diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp index b7b62d930629dc16d70e761d8b67c683a9ba3ec7..c1ea103c01742ba2acd06beb1e1b33ecf2f1ef7b 100644 --- a/src/sbbs3/main.cpp +++ b/src/sbbs3/main.cpp @@ -51,7 +51,7 @@ uint riobp; #define STATUS_WFC "Listening" -#define TIMEOUT_THREAD_WAIT 30 // Seconds +#define TIMEOUT_THREAD_WAIT 15 // Seconds (was 30) #define IO_THREAD_BUF_SIZE 10000 // Bytes // Globals @@ -137,6 +137,28 @@ static void thread_down() startup->thread_up(FALSE); } +int lputs(char* str) +{ + if(startup==NULL || startup->lputs==NULL) + return(0); + return(startup->lputs(str)); +} + +int lprintf(char *fmt, ...) +{ + va_list argptr; + char sbuf[1024]; + + if(startup==NULL || startup->lputs==NULL) + return(0); + va_start(argptr,fmt); + vsprintf(sbuf,fmt,argptr); + va_end(argptr); + return(startup->lputs(sbuf)); +} + +} /* extern "C" */ + SOCKET open_socket(int type) { SOCKET sock; @@ -151,6 +173,9 @@ int close_socket(SOCKET sock) { int result; + if(sock==INVALID_SOCKET) + return(0); + shutdown(sock,SHUT_RDWR); /* required on Unix */ result=closesocket(sock); if(/* result==0 && */ startup!=NULL && startup->socket_open!=NULL) @@ -160,29 +185,21 @@ int close_socket(SOCKET sock) return(result); } -int lputs(char* str) +u_long resolve_ip(char *addr) { - if(startup==NULL || startup->lputs==NULL) - return(0); - return(startup->lputs(str)); -} - -int lprintf(char *fmt, ...) -{ - va_list argptr; - char sbuf[1024]; + HOSTENT* host; + char* p; - if(startup==NULL || startup->lputs==NULL) - return(0); - va_start(argptr,fmt); - vsprintf(sbuf,fmt,argptr); - va_end(argptr); - return(startup->lputs(sbuf)); + for(p=addr;*p;p++) + if(*p!='.' && !isdigit(*p)) + break; + if(!(*p)) + return(inet_addr(addr)); + if ((host=gethostbyname(addr))==NULL) + return(0); + return(*((ulong*)host->h_addr_list[0])); } -} /* extern "C" */ - - BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen, BYTE* outbuf, int& outlen) { @@ -283,6 +300,7 @@ void input_thread(void *arg) BYTE *wrbuf; int i,rd,wr,avail; ulong total_recv=0; + ulong total_pkts=0; fd_set socket_set; sbbs_t* sbbs = (sbbs_t*) arg; struct timeval tv; @@ -371,6 +389,7 @@ void input_thread(void *arg) } total_recv+=rd; + total_pkts++; // telbuf and wr are modified to reflect telnet escaped data wrbuf=telnet_interpret(sbbs, inbuf, rd, telbuf, wr); @@ -391,8 +410,8 @@ void input_thread(void *arg) pthread_mutex_destroy(&sbbs->input_thread_mutex); - lprintf("Node %d input thread terminated (total bytes received: %lu)" - ,sbbs->cfg.node_num, total_recv); + lprintf("Node %d input thread terminated (received %lu bytes in %lu packets)" + ,sbbs->cfg.node_num, total_recv, total_pkts); thread_down(); } @@ -404,6 +423,7 @@ void output_thread(void* arg) int i; ulong avail; ulong total_sent=0; + ulong total_pkts=0; ulong bufbot=0; ulong buftop=0; sbbs_t* sbbs = (sbbs_t*) arg; @@ -468,13 +488,15 @@ void output_thread(void* arg) bufbot+=i; total_sent+=i; + total_pkts++; } sbbs->spymsg("Disconnected"); sbbs->output_thread_running = false; - lprintf("%s output thread terminated (total bytes sent: %lu)", node, total_sent); + lprintf("%s output thread terminated (sent %lu byts in %lu packets)" + ,node, total_sent, total_pkts); thread_down(); }