diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c index dffbf274120934748d052c236f8e23fdc82960d8..60aa9c8d668250620415787c43472224af3e13dc 100644 --- a/src/sbbs3/umonitor/umonitor.c +++ b/src/sbbs3/umonitor/umonitor.c @@ -33,6 +33,14 @@ enum { ,MODE_EXTAUX }; +enum { + SPY_NOSOCKET + ,SPY_NOCONNECT + ,SPY_SOCKETLOST + ,SPY_STDINLOST + ,SPY_CLOSED + }; + /********************/ /* Global Variables */ /********************/ @@ -60,7 +68,7 @@ void allocfail(uint size) bail(1); } -void spyon(char *sockname) { +int spyon(char *sockname) { SOCKET spy_sock=INVALID_SOCKET; struct sockaddr_un spy_name; socklen_t spy_len; @@ -71,6 +79,7 @@ void spyon(char *sockname) { struct termios old_tio; struct pollfd pset[2]; BOOL b; + int retval=0; /* ToDo Test for it actually being a socket! */ /* Well, it will fail to connect won't it? */ @@ -78,14 +87,14 @@ void spyon(char *sockname) { if((spy_sock=socket(PF_LOCAL,SOCK_STREAM,0))==INVALID_SOCKET) { printf("ERROR %d creating local spy socket", errno); - return; + return(SPY_NOSOCKET); } spy_name.sun_family=AF_LOCAL; SAFECOPY(spy_name.sun_path,sockname); spy_len=SUN_LEN(&spy_name); if(connect(spy_sock,(struct sockaddr *)&spy_name,spy_len)) { - return; + return(SPY_NOCONNECT); } i=1; @@ -107,12 +116,14 @@ void spyon(char *sockname) { if(!socket_check(spy_sock,NULL,&b,0)) { close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_SOCKETLOST; break; } if(pset[0].revents) { if(pset[0].revents&(POLLNVAL|POLLHUP|POLLERR)) { close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_STDINLOST; break; } else { @@ -122,6 +133,7 @@ void spyon(char *sockname) { case CTRL('c'): close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_CLOSED; break; default: write(spy_sock,&key,1); @@ -130,6 +142,7 @@ void spyon(char *sockname) { else if(i<0) { close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_STDINLOST; break; } } @@ -138,6 +151,7 @@ void spyon(char *sockname) { if(pset[1].revents&(POLLNVAL|POLLHUP|POLLERR)) { close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_SOCKETLOST; break; } else { @@ -147,6 +161,7 @@ void spyon(char *sockname) { else if(i<0) { close(spy_sock); spy_sock=INVALID_SOCKET; + retval=SPY_SOCKETLOST; break; } } @@ -532,7 +547,7 @@ int main(int argc, char** argv) { int dist=0; int server=0; char revision[16]; - char str[256],ctrl_dir[41],*p,debug=0; + char str[256],str2[256],ctrl_dir[41],*p,debug=0; char title[256]; int sys_nodes,node_num=0,onoff=0; int i,j,mode=0,misc; @@ -699,12 +714,37 @@ int main(int argc, char** argv) { i=0; uifc.helpbuf= "`Node Options:`\n" "\nToDo: Add help"; - switch(uifc.list(WIN_MID,0,0,0,&i,0,"Node Options",opt)) { + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"Node Options",opt)) { case 0: /* Spy */ snprintf(str,sizeof(str),"%slocalspy%d.sock", ctrl_dir, j+1); endwin(); - spyon(str); + i=spyon(str); refresh(); + switch(i) { + case SPY_NOSOCKET: + uifc.msg("Could not create socket"); + break; + + case SPY_NOCONNECT: + sprintf(str2,"Failed to connect to %s",str); + uifc.msg(str2); + break; + + case SPY_SOCKETLOST: + uifc.msg("Spy socket lost"); + break; + + case SPY_STDINLOST: + uifc.msg("STDIN has gone away... you probobly can't close this window. :-)"); + break; + + case SPY_CLOSED: + break; + + default: + sprintf(str,"Unknown return code %d",i); + uifc.msg(str); + } break; case 1: /* Node Toggles */