X-Git-Url: https://git.dlugolecki.net.pl/?p=vlp.git;a=blobdiff_plain;f=net%2Flognet.cpp;h=decd822abfb2ddcb652ccafe82a6509035e35f06;hp=2fd8348c350a65c88c051fad1288484ae5fea9f9;hb=e702805740237c3ce3bc4c5de9466d3f0d630595;hpb=9db87b545def5d31a64608f2eb082d915ad5efa4 diff --git a/net/lognet.cpp b/net/lognet.cpp index 2fd8348..decd822 100644 --- a/net/lognet.cpp +++ b/net/lognet.cpp @@ -17,6 +17,9 @@ #include #include #include +#include +#include +#include #include #define REMOTE_PATH "REMOTE" @@ -120,6 +123,8 @@ public: void check_links(); void get_message(NETlink*); void conn_info(int); + + void doitall(); // 2010 }; @@ -178,53 +183,44 @@ NETMOD::NETMOD(char *kernel_name) void NETMOD::load_config(char *fname) { - FILE *f; - char line1[80],*line2; - int k=0,on; + QFile f(fname); + QString line; + QString val; + int br=0,on,k=0; NETlink *pomlink; - f = fopen(fname,"r"); - if (f!=NULL) + if (!f.exists()) { - while (!feof(f)) -{ - fscanf(f,"%s\n",line1); - line2 = strtok(line1,"="); - if (line2==NULL) { write_at_console("Bad config file\n");exit(1);} - - if (strcmp(line2,"node_number")==0) - { - line2 = strtok(NULL,"="); - MyNode = atoi(line2); - } - else - if (strcmp(line2,"host")==0) - { - line2 = strtok(NULL,"=");if (line2==NULL) {exit(1);} - k++; + write_at_console("Cannot load configuration file!");sleep(2);exit(3); + } + f.open(IO_ReadOnly); + br = f.readLine(line,256); + while (br>0) + { + QStringList l = QStringList::split("=",line,FALSE); + QStringList::Iterator it = l.begin(); + line = *it; + ++it; + val = *it; + val = val.stripWhiteSpace(); + if (line == "node_number") {MyNode = val.toInt();}; + if (line == "host" ) { + k++; pomlink = new NETlink; - strcpy(pomlink->addr,line2); + strcpy(pomlink->addr,val.ascii()); pomlink->connected = FALSE; pomlink->sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(pomlink->sock, F_SETFL,O_NONBLOCK | fcntl(pomlink->sock, - F_GETFL,0)); + fcntl(pomlink->sock, F_SETFL,O_NONBLOCK | fcntl(pomlink->sock,F_GETFL,0)); on=1; setsockopt(pomlink->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); Links.append(pomlink); - to_connect++; - - } - else - if (strcmp(line2,"type")==0) - { - } - - } /* feof */ - - fclose(f); - if (k==0) all_connected=TRUE; + to_connect++; + }; + br = f.readLine(line,256); } - if (MyNode==-1) {write_at_console("Node number must be specified");exit(1);}; + f.close(); + if (k==0) all_connected=TRUE; + if (MyNode==-1) {write_at_console("Node number must be specified");exit(1);}; } @@ -316,7 +312,9 @@ void NETMOD::check_node(int n, int sc) { if ( pomlink->node_number==n ) { - m.param.pword[1] = 1;break; + m.param.pword[1] = 1; + strcpy(m.param.pstr,pomlink->addr); + break; } pomlink = Links.next(); } @@ -465,6 +463,7 @@ if (lnk->connected) switch(msg.param.pword[0]) { case NET_CCD_START: + lnk->code_transmit = TRUE; sprintf(pomstr,"%s/%s",REMOTE_PATH,msg.param.pstr); strcat(pomstr,".ccd"); @@ -491,9 +490,11 @@ if (lnk->connected) close(psock); fclose(lnk->CodeFile); } + break; case NET_PCD_START: + lnk->code_transmit = TRUE; sprintf(pomstr,"%s/%s",REMOTE_PATH,msg.param.pstr); strcat(pomstr,".pcd"); @@ -520,9 +521,11 @@ if (lnk->connected) close(psock); fclose(lnk->CodeFile); } + break; case NET_CONNECT: + sprintf(pomstr,"Node: %d Addr: %s",msg.param.pword[1], lnk->addr); lnk->node_number = msg.param.pword[1]; @@ -530,12 +533,14 @@ if (lnk->connected) send_accept_info(lnk); break; case NET_ACCEPT: + sprintf(pomstr,"Node: %d Addr: %s",msg.param.pword[1], lnk->addr); lnk->node_number = msg.param.pword[1]; write_at_console(pomstr); break; case NET_DISCONNECT: + sprintf(pomstr,"Node: %d disconnected",msg.param.pword[1]); write_at_console(pomstr); ::close(lnk->sock); @@ -543,6 +548,7 @@ if (lnk->connected) delete(lnk); break; case NET_PROPAGATE: + if (msg.param.pword[1] == MSG_VLP) send_to_kernel(&msg); else if (msg.param.pword[1] == MSG_INT) send_to_int(&msg); break; @@ -590,6 +596,166 @@ void NETMOD::remote_messages() } + +/****************************** 2010 ********************************************/ +void NETMOD::doitall() { + unsigned int sz; + int nsock,max=0,on, nr, si, sj; + struct sockaddr_in svr; + fd_set rset; + NETlink *pomlink; + INTlink *pomlink2; + struct sockaddr_un svr2; + MESSAGE msg; + + + FD_ZERO(&rset); + FD_SET(listen_sock,&rset); + max = listen_sock; + FD_SET(kernel_sock,&rset); + if (maxsock,&rset); + if (maxsock) max=pomlink2->sock; + pomlink2=Interpreters.next(); + } + pomlink = Links.first(); + while (pomlink!=NULL) + { + if (pomlink->connected) + { + FD_SET(pomlink->sock,&rset); + if (maxsock) max=pomlink->sock; + } + pomlink=Links.next(); + } + + // odczyt + if (select(max+1,&rset,0,0,NULL) > 0) { + // accept connection + if (FD_ISSET(listen_sock,&rset)) + { + /* accept connection on listen socket */ + sz = sizeof(svr); + bzero(&svr, sizeof(svr)); + nsock = accept(listen_sock, (struct sockaddr*)&svr, &sz); + if (nsock>0) + { + pomlink = new NETlink; + strcpy(pomlink->addr,inet_ntoa(svr.sin_addr)); + pomlink->sock = nsock; + pomlink->connected = TRUE; + fcntl(pomlink->sock, F_SETFL,O_NONBLOCK | fcntl(pomlink->sock,F_GETFL,0)); + on=1; + setsockopt(pomlink->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); + Links.append(pomlink); + } /* nsock > 0 */ + } /* ISSET */ + + // get internal message + /* Check request sockets */ + pomlink2 = Interpreters.first(); + while (pomlink2!=NULL) + { + if (FD_ISSET(pomlink2->sock,&rset)) + { + nr = read(pomlink2->sock,&msg,sizeof(MESSAGE)); + if (nr>0) + { + if (msg.msg_type == MSG_NET) + switch(msg.param.pword[0]) + { + case NET_PROPAGATE:propagate_msg(&msg); break; + case NET_NODE_EXIST:check_node(msg.param.pword[1],pomlink2->sock);break; + case NET_GET_INFO: conn_info(pomlink2->sock);break; + case NET_NODES_NUM: msg.param.pword[0]=NET_NODES_NUM_RESPONSE; + msg.param.pword[1]=Links.count(); + write(pomlink2->sock,&msg,sizeof(MESSAGE)); + break; + }/* switch */ + } + } /* ISSET */ + pomlink2=Interpreters.next(); + } // while + /* Check internal socket */ + if (FD_ISSET(kernel_sock,&rset)) + { + nr = read(kernel_sock, &msg, sizeof(MESSAGE)); + if (nr>0) + { + if (msg.msg_type == MSG_NET) + { + switch(msg.param.pword[0]) + { + case NET_TRANSMIT_CODE: + + transmit_file(msg.param.pword[2],msg.param.pstr,msg.param.pword[1]); + + break; + case NET_EXIT: { disconnect_seq();exit_sequence();} + break; + case NET_GET_INFO: conn_info(kernel_sock);break; + case NET_PROPAGATE:propagate_msg(&msg);break; + case NET_DISCONNECT:disconnect_seq(); + break; + case NET_NODE_EXIST: check_node(msg.param.pword[1],kernel_sock);break; + case NET_CONNECT_TO: connect_seq(msg.param.pstr); + } /* end switch */ + } /* MSG_NET */ + if (msg.msg_type == MSG_VLP) + switch(msg.param.pword[0]) + { + case VLP_REGINT: + { + + pomlink2 = new INTlink; + pomlink2->sock = socket(AF_UNIX,SOCK_STREAM,0); + bzero(&svr2,sizeof(svr2)); + svr2.sun_family = AF_UNIX; + strcpy(svr2.sun_path,msg.param.pstr); + si = strlen(svr2.sun_path)+sizeof(svr2.sun_family); + sj = connect(pomlink2->sock,(struct sockaddr*)&svr2,si); + if (sj==0) + fcntl(pomlink2->sock,F_SETFL, O_NONBLOCK|fcntl(pomlink2->sock,F_GETFL,0)); + int on=1; + setsockopt(pomlink2->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); + pomlink2->ID = msg.param.pword[1]; + pomlink2->connected=TRUE; + Interpreters.append(pomlink2); + + };break; + case VLP_INTERPRETER_DOWN: + { + + pomlink2 = findINTlink(msg.param.pword[1]); + if (pomlink2!=NULL) + { + close(pomlink2->sock); + Interpreters.remove(pomlink2); + } + };break; + } /* MSg_VLP */ + } // nr > 0 + }/* ISSET */ + + // get remote message + + pomlink=Links.first(); + while (pomlink!=NULL) + { + if (FD_ISSET(pomlink->sock,&rset)) get_message(pomlink); + pomlink=Links.next(); + } + } // select + + +} +/****************************** END 2010 ********************************************/ + + + void NETMOD::propagate_msg(MESSAGE *msg) { char ss[255]; @@ -760,9 +926,11 @@ void NETMOD::run() { while(1) { - accept_connection(); + /*accept_connection(); get_internal(); - remote_messages(); + remote_messages(); */ + // 2010 + doitall(); } }