From fdc71cf93503f1f9d4eb70cd40a66533275e45b0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20D=C5=82ugo=C5=82=C4=99cki?= Date: Sun, 14 Jul 2013 13:15:44 +0200 Subject: [PATCH] vlp-10 Using coding style in lognet. --- src/net/lognet.cpp | 2089 ++++++++++++++++++++++---------------------- 1 file changed, 1039 insertions(+), 1050 deletions(-) diff --git a/src/net/lognet.cpp b/src/net/lognet.cpp index 088ef9f..f6211bb 100644 --- a/src/net/lognet.cpp +++ b/src/net/lognet.cpp @@ -31,1023 +31,1020 @@ #define CODEPORT1 3800 #define MAXINTERP 10 #define FILE_BUFFER_SIZE 2048 - -// ************** Interpreter slot ******************* -class INTlink -{ - public: - int sock,ID; - bool connected; - INTlink(); +/*************** Interpreter slot ********************/ +class INTlink { +public: + int sock; + int ID; + bool connected; + INTlink(); }; INTlink::INTlink() { - connected=FALSE; - sock=0; + connected = FALSE; + sock = 0; } +/********************* Network slot ********************/ +class NETlink { +public: + int sock; + bool connected; + bool code_transmit; + char addr[255]; -// ******************** Network slot ******************** -class NETlink -{ - public: - int sock; - bool connected,code_transmit; - char addr[255]; - - int node_number; - int aliases[5]; - - FILE *CodeFile; - char CodeName[255]; - long CodeSize; + int node_number; + int aliases[5]; + FILE *CodeFile; + char CodeName[255]; + long CodeSize; - NETlink(); + NETlink(); }; NETlink::NETlink() { - int i; - for(i=0;i<5;i++) aliases[i]=-1; - connected=FALSE; - sock=0; - code_transmit=FALSE; -} - - + int i; + for(i = 0; i < 5; i++) + aliases[i] = -1; + connected = FALSE; + sock = 0; + code_transmit = FALSE; +} -//********************** NET Module **************************** +/*********************** NET Module *****************************/ -class NETMOD -{ +class NETMOD { public: - int kernel_sock,listen_sock; - bool all_connected,local_mode; - int to_connect,MyNode; - char kername[256]; - - - QList Interpreters; // List of the Interpeter slots - QList Links; // List of the Network slots - - NETMOD(char*); - - void load_config(char*); - void write_at_console(char*); - void send_to_kernel(MESSAGE*); - void sock_reopen(NETlink*); - void send_connect_info(NETlink*); - void send_accept_info(NETlink*); - void send_to_node(NETlink*,MESSAGE*); - void send_to_int(MESSAGE*); - void send_code_ack(NETlink*); - void send_to_all(MESSAGE *); - - NETlink *findNETlink(int node); - INTlink *findINTlink(int id); - void transmit_file(int ton, char *fname, int fromINT); - void propagate_msg(MESSAGE *msg); - void check_node(int,int); - - void run(); - void exit_sequence(); - void disconnect_seq(); - void connect_seq(char*); - void accept_connection(); - void get_internal(); - void remote_messages(); - void check_links(); - void get_message(NETlink*); - void conn_info(int); - - void doitall(); // 2010 + int kernel_sock; + int listen_sock; + bool all_connected; + bool local_mode; + int to_connect; + int MyNode; + char kername[256]; + + /* List of the Interpeter slots */ + QList Interpreters; + /* List of the Network slots */ + QList Links; + + NETMOD(char*); + + void load_config(char*); + void write_at_console(char*); + void send_to_kernel(MESSAGE*); + void sock_reopen(NETlink*); + void send_connect_info(NETlink*); + void send_accept_info(NETlink*); + void send_to_node(NETlink*, MESSAGE*); + void send_to_int(MESSAGE*); + void send_code_ack(NETlink*); + void send_to_all(MESSAGE *); + + NETlink *findNETlink(int node); + INTlink *findINTlink(int id); + void transmit_file(int ton, char *fname, int fromINT); + void propagate_msg(MESSAGE *msg); + void check_node(int, int); + + void run(); + void exit_sequence(); + void disconnect_seq(); + void connect_seq(char*); + void accept_connection(); + void get_internal(); + void remote_messages(); + void check_links(); + void get_message(NETlink*); + void conn_info(int); + + /* 2010 */ + void doitall(); }; - NETMOD::NETMOD(char *kernel_name) { - int i,len,on; - struct sockaddr_in svr; - struct sockaddr_un svr1; - MESSAGE m; - char s[256]; - - - Links.clear(); - Interpreters.clear(); - - bzero(&svr, sizeof(svr)); - listen_sock = socket(AF_INET, SOCK_STREAM, 0); - svr.sin_family = AF_INET; - svr.sin_addr.s_addr = INADDR_ANY; - svr.sin_port = htons(LOGPORT); - bind(listen_sock, (struct sockaddr*)&svr, sizeof(svr)); - listen(listen_sock,5); - fcntl(listen_sock, F_SETFL,O_NONBLOCK | fcntl(listen_sock, F_GETFL,0)); - - to_connect=0; - all_connected=FALSE; - load_config("vlp.cfg"); - - kernel_sock = socket(AF_UNIX,SOCK_STREAM,0); - bzero(&svr1,sizeof(svr1)); - svr1.sun_family = AF_UNIX; - strcpy(svr1.sun_path,kernel_name); - strcpy(kername,kernel_name); - len = strlen(svr1.sun_path)+sizeof(svr1.sun_family); - i = connect(kernel_sock,(struct sockaddr*)&svr1,len); - if (i==0) - fcntl(kernel_sock,F_SETFL, O_NONBLOCK|fcntl(kernel_sock,F_GETFL,0)); - on=1; - setsockopt(kernel_sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); - m.msg_type = MSG_NET; - m.param.pword[0] = NET_NODE; - m.param.pword[1] = MyNode; - send_to_kernel(&m); - - // if (regme) regme_sequence(); - - if (to_connect > 0){ - write_at_console("Connecting remote VLPs..."); - while (!all_connected) check_links(); - } - sprintf(s,"Local node number %d",MyNode); - write_at_console(s); + int i; + int len; + int on; + struct sockaddr_in svr; + struct sockaddr_un svr1; + MESSAGE m; + char s[256]; + + Links.clear(); + Interpreters.clear(); + + bzero(&svr, sizeof(svr)); + listen_sock = socket(AF_INET, SOCK_STREAM, 0); + svr.sin_family = AF_INET; + svr.sin_addr.s_addr = INADDR_ANY; + svr.sin_port = htons(LOGPORT); + bind(listen_sock, (struct sockaddr*)&svr, sizeof(svr)); + listen(listen_sock,5); + fcntl(listen_sock, F_SETFL, O_NONBLOCK | fcntl(listen_sock, F_GETFL, + 0)); + + to_connect = 0; + all_connected = FALSE; + load_config("vlp.cfg"); + + kernel_sock = socket(AF_UNIX, SOCK_STREAM, 0); + bzero(&svr1, sizeof(svr1)); + svr1.sun_family = AF_UNIX; + strcpy(svr1.sun_path, kernel_name); + strcpy(kername, kernel_name); + len = strlen(svr1.sun_path) + sizeof(svr1.sun_family); + i = connect(kernel_sock, (struct sockaddr*)&svr1, len); + if (i == 0) + fcntl(kernel_sock, F_SETFL, O_NONBLOCK|fcntl(kernel_sock, F_GETFL, 0)); + on = 1; + setsockopt(kernel_sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, + sizeof(on)); + m.msg_type = MSG_NET; + m.param.pword[0] = NET_NODE; + m.param.pword[1] = MyNode; + send_to_kernel(&m); + + /* if (regme) regme_sequence();*/ + + if (to_connect > 0) { + write_at_console("Connecting remote VLPs..."); + while (!all_connected) { + check_links(); + } + } + sprintf(s, "Local node number %d", MyNode); + write_at_console(s); } -// ##################### Load configuration ########################## +/*##################### Load configuration ##########################*/ void NETMOD::load_config(char *fname) { - config_t cfg; - config_setting_t *setting; - int on,k=0; - NETlink *pomlink; - - config_init(&cfg); - - - /* Hack for checking if file exists without using external libs.*/ - FILE * file = fopen(fname, "rt"); - if (!file) { - fprintf(stderr, "Error: Cannot load configuration file %s!\n", fname); - write_at_console("Cannot load configuration file!"); - fclose(file); - exit(3); - } - - /* Read the file. If there is an error, report it and exit. */ - if(!config_read(&cfg, file)) - { - fprintf(stderr, "%s: In file %s, line %d\n", - config_error_text(&cfg), - config_error_file(&cfg), - config_error_line(&cfg)); - config_destroy(&cfg); - fclose(file); - exit(3);/* from original code. */ - } - - setting = config_lookup(&cfg, "node_number"); - if(setting) - { - MyNode = config_setting_get_int(setting); - } - /* else */ - if (!setting || MyNode==-1) - { - fprintf(stderr, "%s! In file %s, '%s' was not found.\n", - "Error", - fname, - "node_number"); - write_at_console("Node number must be specified"); - config_destroy(&cfg); - fclose(file); - exit(1); - } - - setting = config_lookup(&cfg, "host"); - if(setting) { - k++; - pomlink = new NETlink; - - switch(config_setting_type(setting)) { - case CONFIG_TYPE_STRING:/* TODO: Deprecated. Made for back compatibility. */ - strncpy(pomlink->addr, config_setting_get_string(setting), 255); - break; - case CONFIG_TYPE_ARRAY: - strncpy(pomlink->addr, config_setting_get_string_elem(setting, 0), 255); - break; - default: - fprintf(stderr, "%s! In file %s, bad entry type for %s. Will not be read.\n" - "Fatal error", - fname, - "host"); - config_destroy(&cfg); - fclose(file); - exit(1); - } - pomlink->connected = FALSE; - pomlink->sock = socket(AF_INET, SOCK_STREAM, 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 { - fprintf(stderr, "%s! In file %s, '%s' was not found.\n", - "Warning", - fname, - "host"); - } - - config_destroy(&cfg); - fclose(file); - - if (k==0) all_connected=TRUE; + config_t cfg; + config_setting_t *setting; + int on; + int k = 0; + NETlink *pomlink; + + config_init(&cfg); + + /* Hack for checking if file exists without using external libs.*/ + FILE * file = fopen(fname, "rt"); + if (!file) { + fprintf(stderr, "Error: Cannot load configuration file %s!\n", + fname); + write_at_console("Cannot load configuration file!"); + fclose(file); + exit(3); + } + + /* Read the file. If there is an error, report it and exit. */ + if (!config_read(&cfg, file)) { + fprintf(stderr, "%s: In file %s, line %d\n", + config_error_text(&cfg), + config_error_file(&cfg), + config_error_line(&cfg)); + config_destroy(&cfg); + fclose(file); + /* from original code. */ + exit(3); + } + + setting = config_lookup(&cfg, "node_number"); + if (setting) { + MyNode = config_setting_get_int(setting); + } + /* else */ + if (!setting || MyNode == -1) { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Error", fname, "node_number"); + write_at_console("Node number must be specified"); + config_destroy(&cfg); + fclose(file); + exit(1); + } + + setting = config_lookup(&cfg, "host"); + if (setting) { + k++; + pomlink = new NETlink; + + switch(config_setting_type(setting)) { + /* TODO: Deprecated. Made for back compatibility. */ + case CONFIG_TYPE_STRING: + strncpy(pomlink->addr, + config_setting_get_string(setting), 255); + break; + case CONFIG_TYPE_ARRAY: + strncpy(pomlink->addr, + config_setting_get_string_elem(setting, 0), + 255); + break; + default: + fprintf(stderr, "%s! In file %s, bad entry type for %s." + " Will not be read.\n", + "Fatal error", fname, "host"); + config_destroy(&cfg); + fclose(file); + exit(1); + } + pomlink->connected = FALSE; + pomlink->sock = socket(AF_INET, SOCK_STREAM, 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 { + fprintf(stderr, "%s! In file %s, '%s' was not found.\n", + "Warning", fname, "host"); + } + + config_destroy(&cfg); + fclose(file); + + if (k == 0) { + all_connected = TRUE; + } } - - void NETMOD::write_at_console(char *s) { - MESSAGE msg; + MESSAGE msg; - msg.msg_type = MSG_NET; - msg.param.pword[0] = NET_CSWRITELN; - strcpy(msg.param.pstr,s); - send_to_kernel(&msg); + msg.msg_type = MSG_NET; + msg.param.pword[0] = NET_CSWRITELN; + strcpy(msg.param.pstr, s); + send_to_kernel(&msg); } void NETMOD::send_to_kernel(MESSAGE *msg) { - write(kernel_sock,msg,sizeof(MESSAGE)); + write(kernel_sock, msg, sizeof(MESSAGE)); } void NETMOD::send_to_node(NETlink *lnk, MESSAGE *msg) { - msg->msg_type = MSG_NET; -// msg2netmsg(msg); -if (lnk->sock) - write(lnk->sock,msg,sizeof(MESSAGE)); + msg->msg_type = MSG_NET; + /* msg2netmsg(msg);*/ + if (lnk->sock) { + write(lnk->sock, msg, sizeof(MESSAGE)); + } } void NETMOD::send_to_int(MESSAGE *msg) { - INTlink *pomlink; - - pomlink = findINTlink(msg->param.pword[5]); - if (pomlink!=NULL) write(pomlink->sock,msg,sizeof(MESSAGE)); + INTlink *pomlink; + + pomlink = findINTlink(msg->param.pword[5]); + if (pomlink != NULL) { + write(pomlink->sock, msg, sizeof(MESSAGE)); + } } void NETMOD::accept_connection() { - unsigned int sz; - int nsock, on; - struct sockaddr_in svr; - fd_set rset,wset; - struct timeval tout = {0,0}; - NETlink *pomlink; - - FD_ZERO(&rset);FD_ZERO(&wset); - FD_SET(listen_sock,&rset); - - if (select(listen_sock+1,&rset,&wset,0,(struct timeval *)&tout)>0) - 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) - { - - /* i<0 someone wants to connect us */ - - 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 */ + unsigned int sz; + int nsock; + int on; + struct sockaddr_in svr; + fd_set rset; + fd_set wset; + struct timeval tout = {0, 0}; + NETlink *pomlink; + + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_SET(listen_sock, &rset); + + if (select(listen_sock + 1, &rset, &wset, 0, (struct timeval *)&tout) > + 0) { + 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) { + + /* i<0 someone wants to connect us */ + 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 */ + } } void NETMOD::check_node(int n, int sc) { - MESSAGE m; - NETlink *pomlink; - - m.msg_type = MSG_NET; - m.param.pword[0] = NET_NODE_EXIST; - - pomlink = Links.first(); - m.param.pword[1] = 0; - while (pomlink!=NULL) - { - if ( pomlink->node_number==n ) - { - m.param.pword[1] = 1; - strcpy(m.param.pstr,pomlink->addr); - break; - } - pomlink = Links.next(); - } - write(sc,&m,sizeof(MESSAGE)); + MESSAGE m; + NETlink *pomlink; + + m.msg_type = MSG_NET; + m.param.pword[0] = NET_NODE_EXIST; + + pomlink = Links.first(); + m.param.pword[1] = 0; + while (pomlink != NULL) { + if (pomlink->node_number == n) { + m.param.pword[1] = 1; + strcpy(m.param.pstr, pomlink->addr); + break; + } + pomlink = Links.next(); + } + write(sc, &m, sizeof(MESSAGE)); } -// ************* Internal message from kernel or INT ******************* +/************** Internal message from kernel or INT ********************/ void NETMOD::get_internal() { - int nr,nrset; - MESSAGE msg; - int si, sj; - fd_set readset,writeset; - struct timeval tout={0,0}; - INTlink *pomlink; - struct sockaddr_un svr; - - - - FD_ZERO(&readset);FD_ZERO(&writeset); - FD_SET(kernel_sock,&readset); - nrset=kernel_sock; - - pomlink = Interpreters.first(); - while (pomlink!=NULL) - { - FD_SET(pomlink->sock,&readset); - if (nrsetsock) nrset=pomlink->sock; - pomlink=Interpreters.next(); - } - - if (select(nrset+1,&readset,&writeset,0,(struct timeval *)&tout)>0) - { - -/* Check request sockets */ - pomlink = Interpreters.first(); - while (pomlink!=NULL) - { - if (FD_ISSET(pomlink->sock,&readset)) - { - nr = read(pomlink->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],pomlink->sock);break; - case NET_GET_INFO: conn_info(pomlink->sock);break; - case NET_NODES_NUM: msg.param.pword[0]=NET_NODES_NUM_RESPONSE; - msg.param.pword[1]=Links.count(); - write(pomlink->sock,&msg,sizeof(MESSAGE)); - break; - }/* switch */ - } - } /* ISSET */ - pomlink=Interpreters.next(); - } // while - -/* Check internal socket */ - if (FD_ISSET(kernel_sock,&readset)) - { - 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: - { - pomlink = new INTlink; - pomlink->sock = socket(AF_UNIX,SOCK_STREAM,0); - bzero(&svr,sizeof(svr)); - svr.sun_family = AF_UNIX; - strcpy(svr.sun_path,msg.param.pstr); - si = strlen(svr.sun_path)+sizeof(svr.sun_family); - sj = connect(pomlink->sock,(struct sockaddr*)&svr,si); - if (sj==0) - fcntl(pomlink->sock,F_SETFL, O_NONBLOCK| - fcntl(pomlink->sock,F_GETFL,0)); - int on=1; - setsockopt(pomlink->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); - pomlink->ID = msg.param.pword[1]; - pomlink->connected=TRUE; - Interpreters.append(pomlink); - - };break; - case VLP_INTERPRETER_DOWN: - { - pomlink = findINTlink(msg.param.pword[1]); - if (pomlink!=NULL) - { - close(pomlink->sock); - Interpreters.remove(pomlink); - } - };break; - - break; - } /* MSg_VLP */ - } - }/* ISSET */ - } /* select >0 */ - - + int nr; + int nrset; + MESSAGE msg; + int si; + int sj; + fd_set readset; + fd_set writeset; + struct timeval tout={0, 0}; + INTlink *pomlink; + struct sockaddr_un svr; + + FD_ZERO(&readset); + FD_ZERO(&writeset); + FD_SET(kernel_sock, &readset); + nrset = kernel_sock; + + pomlink = Interpreters.first(); + while (pomlink != NULL) { + FD_SET(pomlink->sock, &readset); + if (nrset < pomlink->sock) { + nrset = pomlink->sock; + } + pomlink = Interpreters.next(); + } + + if (select(nrset + 1, &readset, &writeset, 0, (struct timeval *)&tout) > + 0) { + + /* Check request sockets */ + pomlink = Interpreters.first(); + while (pomlink != NULL) { + if (FD_ISSET(pomlink->sock, &readset)) { + nr = read(pomlink->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], pomlink->sock); + break; + case NET_GET_INFO: + conn_info(pomlink->sock); + break; + case NET_NODES_NUM: + msg.param.pword[0] = NET_NODES_NUM_RESPONSE; + msg.param.pword[1] = Links.count(); + write(pomlink->sock, &msg, sizeof(MESSAGE)); + break; + }/* switch */ + } + } + } /* ISSET */ + pomlink=Interpreters.next(); + } // while + + /* Check internal socket */ + if (FD_ISSET(kernel_sock,&readset)) { + 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: { + pomlink = new INTlink; + pomlink->sock = socket(AF_UNIX, SOCK_STREAM, 0); + bzero(&svr,sizeof(svr)); + svr.sun_family = AF_UNIX; + strcpy(svr.sun_path, msg.param.pstr); + si = strlen(svr.sun_path) + sizeof(svr.sun_family); + sj = connect(pomlink->sock, (struct sockaddr*)&svr, si); + if (sj == 0) + fcntl(pomlink->sock, F_SETFL, O_NONBLOCK | fcntl(pomlink->sock, F_GETFL, 0)); + int on = 1; + setsockopt(pomlink->sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, sizeof(on)); + pomlink->ID = msg.param.pword[1]; + pomlink->connected=TRUE; + Interpreters.append(pomlink); + }; + break; + case VLP_INTERPRETER_DOWN: { + pomlink = findINTlink(msg.param.pword[1]); + if (pomlink != NULL) { + close(pomlink->sock); + Interpreters.remove(pomlink); + } + }; + break; + break; + } /* MSg_VLP */ + } + } + }/* ISSET */ + } /* select >0 */ } void NETMOD::get_message(NETlink *lnk) { - int nr; - MESSAGE msg; - char pomstr[80]; - int rdbt,rd,sz,j,psock; - struct sockaddr_in svr; - unsigned char buffer[FILE_BUFFER_SIZE]; - protdescr proto; - -if (lnk->connected) -{ - nr = read(lnk->sock,&msg, sizeof(MESSAGE)); - if (nr>0) - { -// netmsg2msg(&msg); - if (msg.msg_type == MSG_NET) - { - 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"); - lnk->CodeFile = fopen(pomstr,"wb"); - if ( lnk->CodeFile == NULL) { write_at_console("Cannot open file\n"); - lnk->code_transmit=FALSE;} - lnk->CodeSize=msg.param.pword[1]; - psock = socket(AF_INET, SOCK_STREAM, 0); - bzero(&svr, sizeof(svr)); - svr.sin_family = AF_INET; - svr.sin_port = htons(CODEPORT); - svr.sin_addr.s_addr = inet_addr(lnk->addr); - j = connect(psock, (struct sockaddr*)&svr, sizeof(svr)); - if ( j==0) - { - //fcntl(psock, F_SETFL,O_NONBLOCK | fcntl(psock, F_GETFL,0)); - sz=0; - while (szCodeSize) - { - rd = read(psock,&buffer,sizeof(buffer)); - rdbt = fwrite(&buffer,sizeof(unsigned char),rd,lnk->CodeFile); - sz=sz+rd; - } - 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"); - lnk->CodeFile = fopen(pomstr,"wb"); - if ( lnk->CodeFile == NULL) { write_at_console("Cannot open file\n"); - lnk->code_transmit=FALSE;} - lnk->CodeSize=msg.param.pword[1]; - psock = socket(AF_INET, SOCK_STREAM, 0); - bzero(&svr, sizeof(svr)); - svr.sin_family = AF_INET; - svr.sin_port = htons(CODEPORT1); - svr.sin_addr.s_addr = inet_addr(lnk->addr); - j = connect(psock, (struct sockaddr*)&svr, sizeof(svr)); - if ( j==0) - { - //fcntl(psock, F_SETFL,O_NONBLOCK | fcntl(psock, F_GETFL,0)); - sz=0; - while (szCodeSize) - { - rd = read(psock,&proto,sizeof(proto)); - rdbt = fwrite(&proto,sizeof(unsigned char),rd,lnk->CodeFile); - sz=sz+rd; - } - 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]; - write_at_console(pomstr); - 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); - Links.remove(lnk); - 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; - - } /* end switch */ - - } - } /* nr > 0 */ - -} /* end if used */ + int nr; + MESSAGE msg; + char pomstr[80]; + int rdbt; + int rd; + int sz; + int j; + int psock; + struct sockaddr_in svr; + unsigned char buffer[FILE_BUFFER_SIZE]; + protdescr proto; + + if (lnk->connected) { + nr = read(lnk->sock, &msg, sizeof(MESSAGE)); + if (nr > 0) { + /* netmsg2msg(&msg); */ + if (msg.msg_type == MSG_NET) { + 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"); + lnk->CodeFile = fopen(pomstr, "wb"); + if (lnk->CodeFile == NULL) { + write_at_console("Cannot open file\n"); + lnk->code_transmit = FALSE; + } + lnk->CodeSize = msg.param.pword[1]; + psock = socket(AF_INET, SOCK_STREAM, 0); + bzero(&svr, sizeof(svr)); + svr.sin_family = AF_INET; + svr.sin_port = htons(CODEPORT); + svr.sin_addr.s_addr = inet_addr(lnk->addr); + j = connect(psock, (struct sockaddr*)&svr, sizeof(svr)); + if (j == 0) { + /*fcntl(psock, F_SETFL,O_NONBLOCK | fcntl(psock, F_GETFL,0));*/ + sz = 0; + while (sz < lnk->CodeSize) { + rd = read(psock, &buffer, sizeof(buffer)); + rdbt = fwrite(&buffer, sizeof(unsigned char), rd, lnk->CodeFile); + sz = sz + rd; + } + 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"); + lnk->CodeFile = fopen(pomstr, "wb"); + if (lnk->CodeFile == NULL) { + write_at_console("Cannot open file\n"); + lnk->code_transmit = FALSE; + } + lnk->CodeSize = msg.param.pword[1]; + psock = socket(AF_INET, SOCK_STREAM, 0); + bzero(&svr, sizeof(svr)); + svr.sin_family = AF_INET; + svr.sin_port = htons(CODEPORT1); + svr.sin_addr.s_addr = inet_addr(lnk->addr); + j = connect(psock, (struct sockaddr*)&svr, sizeof(svr)); + if (j == 0) { + /*fcntl(psock, F_SETFL,O_NONBLOCK | fcntl(psock, F_GETFL,0));*/ + sz = 0; + while (sz < lnk->CodeSize) { + rd = read(psock, &proto, sizeof(proto)); + rdbt = fwrite(&proto, sizeof(unsigned char), rd, lnk->CodeFile); + sz = sz + rd; + } + 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]; + write_at_console(pomstr); + 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); + Links.remove(lnk); + 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; + } /* end switch */ + } + } /* nr > 0 */ + + } /* end if used */ } void NETMOD::remote_messages() { - int max; - fd_set rset,wset; - struct timeval tout={0,0}; - NETlink *pomlink; - - FD_ZERO(&rset);FD_ZERO(&wset); - max=0; - - pomlink = Links.first(); - while (pomlink!=NULL) - { - if (pomlink->connected) - { - FD_SET(pomlink->sock,&rset); - if (maxsock) max=pomlink->sock; - } - pomlink=Links.next(); - } - - if (select(max+1,&rset,&wset,0,(struct timeval *)&tout)>0) - { - pomlink=Links.first(); - while (pomlink!=NULL) - { - if (FD_ISSET(pomlink->sock,&rset)) get_message(pomlink); - pomlink=Links.next(); - } - } - + int max; + fd_set rset, wset; + struct timeval tout={0, 0}; + NETlink *pomlink; + + FD_ZERO(&rset); + FD_ZERO(&wset); + max = 0; + + pomlink = Links.first(); + while (pomlink != NULL) { + if (pomlink->connected) { + FD_SET(pomlink->sock, &rset); + if (max < pomlink->sock){ + max = pomlink->sock; + } + } + pomlink=Links.next(); + } + + if (select(max + 1, &rset, &wset, 0, (struct timeval *)&tout) > 0) { + pomlink=Links.first(); + while (pomlink!=NULL) { + if (FD_ISSET(pomlink->sock,&rset)) { + get_message(pomlink); + } + pomlink=Links.next(); + } + } } - -/****************************** 2010 ********************************************/ +/******************************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 - - + 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 (max < kernel_sock) { + max=kernel_sock; + } + pomlink2 = Interpreters.first(); + while (pomlink2 != NULL) { + FD_SET(pomlink2->sock, &rset); + if (max < pomlink2->sock) { + max=pomlink2->sock; + } + pomlink2 = Interpreters.next(); + } + pomlink = Links.first(); + while (pomlink != NULL) { + if (pomlink->connected) { + FD_SET(pomlink->sock, &rset); + if (max < pomlink->sock) { + 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 ********************************************/ +/****************************** END 2010 **************************************/ void NETMOD::propagate_msg(MESSAGE *msg) { - char ss[255]; - NETlink *pomlink; - - pomlink = findNETlink(msg->param.pword[4]); - if ((pomlink!=NULL)&&(pomlink->connected)) - send_to_node(pomlink,msg); - else { - if (msg->param.pword[1]==MSG_INT) - { - send_to_int(msg); - } - else - { - sprintf(ss,"Not connected to Node %d",msg->param.pword[4]); - write_at_console(ss); - } - } - + char ss[255]; + NETlink *pomlink; + + pomlink = findNETlink(msg->param.pword[4]); + if ((pomlink != NULL) && (pomlink->connected)) + send_to_node(pomlink,msg); + else { + if (msg->param.pword[1] == MSG_INT) { + send_to_int(msg); + } else { + sprintf(ss, "Not connected to Node %d", + msg->param.pword[4]); + write_at_console(ss); + } + } } - void NETMOD::connect_seq(char *a) { - NETlink *pom; - struct sockaddr_in svr; - int j,on; - - - pom=Links.first(); - while (pom!=NULL) - { - if (strcmp(pom->addr,a)==0) return; - pom=Links.next(); - } - pom = new NETlink; - strcpy(pom->addr,a); - pom->connected = FALSE; - pom->sock = socket(AF_INET, SOCK_STREAM, 0); - bzero(&svr, sizeof(svr)); - svr.sin_family = AF_INET; - svr.sin_port = htons(LOGPORT); - svr.sin_addr.s_addr = inet_addr(pom->addr); - j = connect(pom->sock, (struct sockaddr*)&svr, sizeof(svr)); - if ( j==0) - { pom->connected = TRUE; - fcntl(pom->sock, F_SETFL,O_NONBLOCK | fcntl(pom->sock, - F_GETFL,0)); - on=1; - setsockopt(pom->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); - send_connect_info(pom); - Links.append(pom); - } - else write_at_console("Connection failed"); + NETlink *pom; + struct sockaddr_in svr; + int j, on; + + pom = Links.first(); + while (pom != NULL) { + if (strcmp(pom->addr, a) == 0) + return; + pom = Links.next(); + } + pom = new NETlink; + strcpy(pom->addr, a); + pom->connected = FALSE; + pom->sock = socket(AF_INET, SOCK_STREAM, 0); + bzero(&svr, sizeof(svr)); + svr.sin_family = AF_INET; + svr.sin_port = htons(LOGPORT); + svr.sin_addr.s_addr = inet_addr(pom->addr); + j = connect(pom->sock, (struct sockaddr*)&svr, sizeof(svr)); + if (j == 0) { + pom->connected = TRUE; + fcntl(pom->sock, F_SETFL, O_NONBLOCK | fcntl(pom->sock, F_GETFL, + 0)); + on = 1; + setsockopt(pom->sock, IPPROTO_TCP, TCP_NODELAY, (char*)&on, + sizeof(on)); + send_connect_info(pom); + Links.append(pom); + } else { + write_at_console("Connection failed"); + } } void NETMOD::check_links() { - -int j=1; -struct sockaddr_in svr; -NETlink *pomlink; - -/* connect to all other nodes */ -if (!all_connected) -{ - pomlink=Links.first(); - while (pomlink!=NULL) - { - if ( !(pomlink->connected) ) - { - bzero(&svr, sizeof(svr)); - svr.sin_family = AF_INET; - svr.sin_port = htons(LOGPORT); - svr.sin_addr.s_addr = inet_addr(pomlink->addr); - - j = connect(pomlink->sock, (struct sockaddr*)&svr, sizeof(svr)); - if ( j==0) - { pomlink->connected = TRUE; - fcntl(pomlink->sock, F_SETFL,O_NONBLOCK | fcntl(pomlink->sock, - F_GETFL,0)); - send_connect_info(pomlink); - - } - if (errno == ECONNREFUSED) - sock_reopen(pomlink); - } // not connected - pomlink=Links.next(); - } //while - -}//if -all_connected=TRUE; -pomlink=Links.first(); -while(pomlink!=NULL) -{ - if (pomlink->connected==FALSE) {all_connected=FALSE;break;} - pomlink=Links.next(); -} - + int j = 1; + struct sockaddr_in svr; + NETlink *pomlink; + + /* connect to all other nodes */ + if (!all_connected) { + pomlink = Links.first(); + while (pomlink != NULL) { + if (!(pomlink->connected)) { + bzero(&svr, sizeof(svr)); + svr.sin_family = AF_INET; + svr.sin_port = htons(LOGPORT); + svr.sin_addr.s_addr = inet_addr(pomlink->addr); + + j = connect(pomlink->sock, + (struct sockaddr*)&svr, sizeof(svr)); + if (j == 0) { + pomlink->connected = TRUE; + fcntl(pomlink->sock, F_SETFL, O_NONBLOCK + | fcntl(pomlink->sock, F_GETFL, + 0)); + send_connect_info(pomlink); + } + if (errno == ECONNREFUSED) { + sock_reopen(pomlink); + } + } /* not connected */ + pomlink = Links.next(); + } /* while */ + } /* if */ + all_connected = TRUE; + pomlink = Links.first(); + while(pomlink != NULL) { + if (pomlink->connected == FALSE) { + all_connected = FALSE; + break; + } + pomlink = Links.next(); + } } void NETMOD::sock_reopen(NETlink *lnk) { - int on=1; + int on = 1; - close(lnk->sock); - lnk->sock = socket(AF_INET, SOCK_STREAM, 0); - fcntl(lnk->sock, F_SETFL,O_NONBLOCK | fcntl(lnk->sock, - F_GETFL,0)); - setsockopt(lnk->sock,IPPROTO_TCP,TCP_NODELAY,(char*)&on,sizeof(on)); + close(lnk->sock); + lnk->sock = socket(AF_INET, SOCK_STREAM, 0); + fcntl(lnk->sock, F_SETFL,O_NONBLOCK | fcntl(lnk->sock, F_GETFL, 0)); + setsockopt(lnk->sock, IPPROTO_TCP,TCP_NODELAY, (char*)&on, sizeof(on)); } - -// **************** Acknowledges ************************* +/***************** Acknowledges **************************/ void NETMOD::send_connect_info(NETlink *lnk) { - MESSAGE m; - - m.param.pword[0] = NET_CONNECT; - m.param.pword[1] = MyNode; - m.msg_type = MSG_NET; -// msg2netmsg(&m); - if (lnk->sock) - write(lnk->sock,&m,sizeof(MESSAGE)); + MESSAGE m; + + m.param.pword[0] = NET_CONNECT; + m.param.pword[1] = MyNode; + m.msg_type = MSG_NET; + /* msg2netmsg(&m);*/ + if (lnk->sock) + write(lnk->sock, &m, sizeof(MESSAGE)); } void NETMOD::send_accept_info(NETlink *lnk) { - MESSAGE m; - - m.param.pword[0] = NET_ACCEPT; - m.param.pword[1] = MyNode; - m.msg_type = MSG_NET; -// msg2netmsg(&m); - if (lnk->sock) - write(lnk->sock,&m,sizeof(MESSAGE)); + MESSAGE m; + + m.param.pword[0] = NET_ACCEPT; + m.param.pword[1] = MyNode; + m.msg_type = MSG_NET; + /* msg2netmsg(&m);*/ + if (lnk->sock) + write(lnk->sock, &m, sizeof(MESSAGE)); } void NETMOD::send_code_ack(NETlink *lnk) { -MESSAGE m; + MESSAGE m; - m.param.pword[0] = NET_CODESTREAM_OK; - m.msg_type = MSG_NET; -// msg2netmsg(&m); - if (lnk->sock) - write(lnk->sock,&m,sizeof(MESSAGE)); + m.param.pword[0] = NET_CODESTREAM_OK; + m.msg_type = MSG_NET; + /* msg2netmsg(&m);*/ + if (lnk->sock) + write(lnk->sock, &m, sizeof(MESSAGE)); } - void NETMOD::send_to_all(MESSAGE *msg) { - NETlink *pomlink; - pomlink=Links.first(); - while (pomlink!=NULL) - { - write(pomlink->sock,msg,sizeof(MESSAGE)); - pomlink=Links.next(); - } + NETlink *pomlink; + pomlink = Links.first(); + while (pomlink != NULL) { + write(pomlink->sock, msg, sizeof(MESSAGE)); + pomlink = Links.next(); + } } - - - void NETMOD::run() { - while(1) - { - /*accept_connection(); - get_internal(); - remote_messages(); */ - // 2010 - doitall(); - } + while(1) { + /* + accept_connection(); + get_internal(); + remote_messages(); + */ + /* 2010*/ + doitall(); + } } void NETMOD::exit_sequence() { - NETlink *pomlink; - - ::close(kernel_sock); - ::close(listen_sock); - unlink(kername); - pomlink = Links.first(); - while (pomlink!=NULL) - { - ::close(pomlink->sock); - pomlink=Links.next(); - } - exit(0); + NETlink *pomlink; + + ::close(kernel_sock); + ::close(listen_sock); + unlink(kername); + pomlink = Links.first(); + while (pomlink != NULL) { + ::close(pomlink->sock); + pomlink = Links.next(); + } + exit(0); } void NETMOD::disconnect_seq() { - MESSAGE m; - NETlink *p; - - bzero(&m,sizeof(MESSAGE)); - m.msg_type = MSG_NET; - m.param.pword[0] = NET_DISCONNECT; - m.param.pword[1] = MyNode; - - p=Links.first(); - while(p!=NULL) - { - send_to_node(p,&m); - p=Links.next(); - } - p=Links.first(); - while(p!=NULL) - { - ::close(p->sock); - p=Links.next(); - } - Links.clear(); + MESSAGE m; + NETlink *p; + + bzero(&m, sizeof(MESSAGE)); + m.msg_type = MSG_NET; + m.param.pword[0] = NET_DISCONNECT; + m.param.pword[1] = MyNode; + + p = Links.first(); + while(p != NULL) { + send_to_node(p, &m); + p=Links.next(); + } + p = Links.first(); + while(p != NULL) { + ::close(p->sock); + p = Links.next(); + } + Links.clear(); } NETlink *NETMOD::findNETlink(int node) { - NETlink *pomlink; - pomlink=Links.first(); - while(pomlink!=NULL) - { - if (pomlink->node_number == node) return(pomlink); - pomlink=Links.next(); - } - return(pomlink); + NETlink *pomlink; + pomlink = Links.first(); + while(pomlink != NULL) { + if (pomlink->node_number == node) + return pomlink; + + pomlink = Links.next(); + } + return pomlink; } INTlink *NETMOD::findINTlink(int id) { - INTlink *pomlink; - pomlink=Interpreters.first(); - while(pomlink!=NULL) - { - if (pomlink->ID == id) return(pomlink); - pomlink=Interpreters.next(); - } - return(pomlink); + INTlink *pomlink; + pomlink = Interpreters.first(); + while(pomlink != NULL) { + if (pomlink->ID == id) + return pomlink; + pomlink = Interpreters.next(); + } + return pomlink; } @@ -1055,178 +1052,170 @@ INTlink *NETMOD::findINTlink(int id) void NETMOD::transmit_file(int ton, char *fname, int fromINT) { - FILE *f; - MESSAGE msg; - char fn[80]; - char b[255]; - unsigned char buffer[FILE_BUFFER_SIZE]; - protdescr proto; - int i,tsock,sock; - unsigned int sz; - NETlink *outlink; - struct sockaddr_in svr; - fd_set rset,wset; - - -// **************** CCD FILE - - strcpy(fn,fname); - strcat(fn,".ccd"); - f = fopen(fn,"rb"); - if (f!=NULL) - { - fseek(f,0,SEEK_END); - msg.param.pword[1] = ftell(f); - fclose(f); - f = fopen(fn,"rb"); - - strcpy(b,rindex(fname,'/')); - for(i=0;i0) - { - close(sock); - while (!feof(f)) - { - i = fread(&buffer,1,sizeof(buffer),f); - write(tsock,&buffer,i); - FD_ZERO(&rset);FD_ZERO(&wset); - FD_SET(tsock,&wset); - select(tsock+1,&rset,&wset,0,0); - } - close(tsock); - } - fclose(f); - } // f!=NULL - else - { - sprintf(b,"Cannot open file to send %s\n",fname); - write_at_console(b); - } - - -// *************** PCD FILE - - strcpy(fn,fname); - strcat(fn,".pcd"); - f = fopen(fn,"r"); - if (f!=NULL) - { - fseek(f,0,SEEK_END); - msg.param.pword[1] = ftell(f); - fclose(f); - f = fopen(fn,"rb"); - - strcpy(b,rindex(fname,'/')); - for(i=0;i0) - { - close(sock); - while (!feof(f)) - { - i = fread(&proto,1,sizeof(proto),f); - write(tsock,&proto,i); - FD_ZERO(&rset);FD_ZERO(&wset); - FD_SET(tsock,&wset); - select(tsock+1,&rset,&wset,0,0); - } - close(tsock); - } - fclose(f); - } // f!=NULL - else - { - sprintf(b,"Cannot open file to send %s\n",fname); - write_at_console(b); - } - - - msg.msg_type = MSG_NET; - msg.param.pword[0] = NET_TRANSMITTED; - msg.param.pword[1] = fromINT; - send_to_kernel(&msg); - - + FILE *f; + MESSAGE msg; + char fn[80]; + char b[255]; + unsigned char buffer[FILE_BUFFER_SIZE]; + protdescr proto; + int i,tsock,sock; + unsigned int sz; + NETlink *outlink; + struct sockaddr_in svr; + fd_set rset; + fd_set wset; + + /***************** CCD FILE*/ + strcpy(fn, fname); + strcat(fn, ".ccd"); + f = fopen(fn, "rb"); + if (f != NULL) { + fseek(f, 0, SEEK_END); + msg.param.pword[1] = ftell(f); + fclose(f); + f = fopen(fn, "rb"); + + strcpy(b, rindex(fname, '/')); + for(i = 0; i < strlen(b); i++) + b[i] = b[i + 1]; + + msg.param.pword[0] = NET_CCD_START; + strcpy(msg.param.pstr, b); + + outlink = findNETlink(ton); + if (outlink == NULL) + exit(1); + bzero(&svr, sizeof(svr)); + sock = socket(AF_INET, SOCK_STREAM, 0); + svr.sin_family = AF_INET; + svr.sin_addr.s_addr = INADDR_ANY; + svr.sin_port = htons(CODEPORT); + bind(sock, (struct sockaddr*)&svr, sizeof(svr)); + listen(sock, 5); + send_to_node(outlink, &msg); + sz = sizeof(svr); + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_SET(sock, &rset); + if (select(sock + 1, &rset, &wset, 0, 0)) + if (FD_ISSET(sock,&rset)) + tsock = accept(sock, (struct sockaddr*)&svr, + &sz); + if (tsock > 0) { + close(sock); + while (!feof(f)) { + i = fread(&buffer, 1, sizeof(buffer), f); + write(tsock, &buffer, i); + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_SET(tsock, &wset); + select(tsock + 1, &rset, &wset, 0, 0); + } + close(tsock); + } + fclose(f); + } // f!=NULL + else { + sprintf(b, "Cannot open file to send %s\n", fname); + write_at_console(b); + } + + + /**************** PCD FILE */ + + strcpy(fn, fname); + strcat(fn, ".pcd"); + f = fopen(fn, "r"); + if (f != NULL) { + fseek(f, 0, SEEK_END); + msg.param.pword[1] = ftell(f); + fclose(f); + f = fopen(fn, "rb"); + + strcpy(b, rindex(fname, '/')); + for(i = 0; i < strlen(b); i++) + b[i] = b[i + 1]; + msg.param.pword[0] = NET_PCD_START; + strcpy(msg.param.pstr, b); + + outlink = findNETlink(ton); + if (outlink == NULL) + exit(1); + bzero(&svr, sizeof(svr)); + sock = socket(AF_INET, SOCK_STREAM, 0); + svr.sin_family = AF_INET; + svr.sin_addr.s_addr = INADDR_ANY; + svr.sin_port = htons(CODEPORT1); + bind(sock, (struct sockaddr*)&svr, sizeof(svr)); + listen(sock, 5); + send_to_node(outlink, &msg); + sz = sizeof(svr); + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_SET(sock, &rset); + if (select(sock + 1, &rset, &wset, 0, 0)) + if (FD_ISSET(sock, &rset)) + tsock = accept(sock, (struct sockaddr*)&svr, + &sz); + if (tsock>0) { + close(sock); + while (!feof(f)) { + i = fread(&proto, 1, sizeof(proto), f); + write(tsock, &proto, i); + FD_ZERO(&rset); + FD_ZERO(&wset); + FD_SET(tsock, &wset); + select(tsock + 1, &rset, &wset, 0, 0); + } + close(tsock); + } + fclose(f); + } // f!=NULL + else { + sprintf(b, "Cannot open file to send %s\n", fname); + write_at_console(b); + } + + msg.msg_type = MSG_NET; + msg.param.pword[0] = NET_TRANSMITTED; + msg.param.pword[1] = fromINT; + send_to_kernel(&msg); } - - void NETMOD::conn_info(int sk) { - NETlink *pom; - MESSAGE m; - int k=0; - char poms[255]; - - m.msg_type = MSG_NET; - m.param.pword[0] = NET_INFO; - strcpy(m.param.pstr,""); - pom=Links.first(); - while (pom!=NULL) - { - sprintf(poms,"%d=%s;",pom->node_number,pom->addr); - strcat(m.param.pstr,poms); - k++; - if (k==12) - { - m.param.pword[1]=12; - write(sk,&m,sizeof(MESSAGE)); - k=0; - } - pom=Links.next(); - } - if (k>0) - { - m.param.pword[1]=k; - write(sk,&m,sizeof(MESSAGE)); - } - m.msg_type = MSG_NET; - m.param.pword[0] = NET_INFO_END; - write(sk,&m,sizeof(MESSAGE)); + NETlink *pom; + MESSAGE m; + int k = 0; + char poms[255]; + + m.msg_type = MSG_NET; + m.param.pword[0] = NET_INFO; + strcpy(m.param.pstr, ""); + pom = Links.first(); + while (pom != NULL) { + sprintf(poms, "%d=%s;", pom->node_number, pom->addr); + strcat(m.param.pstr, poms); + k++; + if (k == 12) { + m.param.pword[1] = 12; + write(sk, &m, sizeof(MESSAGE)); + k = 0; + } + pom = Links.next(); + } + if (k > 0) { + m.param.pword[1] = k; + write(sk, &m, sizeof(MESSAGE)); + } + m.msg_type = MSG_NET; + m.param.pword[0] = NET_INFO_END; + write(sk, &m, sizeof(MESSAGE)); } int main(int argc,char **argv) { - NETMOD netter(argv[1]); - netter.run(); - return 0; + NETMOD netter(argv[1]); + netter.run(); + return 0; } -- 2.30.2