diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c index 95ad370b037a066a87cf966fa0ac3c55db740809..fba11fb45c47a8939c39c2b0ade802a0c058fbd5 100644 --- a/src/sbbs3/sexyz.c +++ b/src/sbbs3/sexyz.c @@ -202,7 +202,7 @@ void send_telnet_cmd(SOCKET sock, uchar cmd, uchar opt) /****************************************************************************/ /* Receive a byte from remote */ /****************************************************************************/ -uint recv_byte(SOCKET sock, int timeout, long mode) +uint recv_byte(SOCKET sock, unsigned timeout, long mode) { int i; long t; @@ -213,13 +213,13 @@ uint recv_byte(SOCKET sock, int timeout, long mode) static uchar telnet_cmd; static int telnet_cmdlen; - end=time(NULL)+timeout; + end=msclock()+(timeout*MSCLOCKS_PER_SEC); while(1) { FD_ZERO(&socket_set); FD_SET(sock,&socket_set); - if((t=end-time(NULL))<0) t=0; - tv.tv_sec=t; + if((t=end-msclock())<0) t=0; + tv.tv_sec=t/MSCLOCKS_PER_SEC; tv.tv_usec=0; if(select(sock+1,&socket_set,NULL,NULL,&tv)<1) { @@ -288,7 +288,7 @@ uint recv_byte(SOCKET sock, int timeout, long mode) /*************************/ /* Send a byte to remote */ /*************************/ -int send_byte(SOCKET sock, uchar ch, int timeout, long mode) +int send_byte(SOCKET sock, uchar ch, unsigned timeout, long mode) { uchar buf[2] = { TELNET_IAC, TELNET_IAC }; int len=1; @@ -1129,6 +1129,9 @@ int main(int argc, char **argv) } #endif + xm.byte_timeout=3; /* seconds */ + xm.ack_timeout=10; /* seconds */ + for(i=1;i<argc;i++) { if(sock==INVALID_SOCKET && isdigit(argv[i][0])) { diff --git a/src/sbbs3/sexyz.h b/src/sbbs3/sexyz.h index 25109733f207211a604dfbd43cce57bfe82c1ba3..cbe3fd4912e70d356fa0047580329ac1c9d280a5 100644 --- a/src/sbbs3/sexyz.h +++ b/src/sbbs3/sexyz.h @@ -78,7 +78,7 @@ #define NOINP 0x0100 /* input buffer empty (incom only) */ -uint recv_byte(SOCKET sock, int timeout, long mode); -int send_byte(SOCKET sock, uchar ch, int timeout, long mode); +uint recv_byte(SOCKET sock, unsigned timeout, long mode); +int send_byte(SOCKET sock, uchar ch, unsigned timeout, long mode); char* chr(uchar ch); void bail(int code); \ No newline at end of file diff --git a/src/sbbs3/xmodem.c b/src/sbbs3/xmodem.c index ee0a797e40df898cadd97279beee5e497b440b75..92e49496b2619c9df933f6ed5f5e3f2955ef49b8 100644 --- a/src/sbbs3/xmodem.c +++ b/src/sbbs3/xmodem.c @@ -45,7 +45,7 @@ void xmodem_put_nak(xmodem_t* xm) { - while(getcom(1)!=NOINP) + while(getcom(0)!=NOINP) ; /* wait for any trailing data */ putcom(NAK); } @@ -112,7 +112,7 @@ int xmodem_get_block(xmodem_t* xm, uchar* block, BOOL hdrblock) xmodem_put_nak(xm); continue; } - i=getcom(1); + i=getcom(xm->byte_timeout); if(i==NOINP) { if(hdrblock) /* Trying to get Ymodem header block */ return(-1); @@ -120,7 +120,7 @@ int xmodem_get_block(xmodem_t* xm, uchar* block, BOOL hdrblock) continue; } block_num=i; - i=getcom(1); + i=getcom(xm->byte_timeout); if(i==NOINP) { if(hdrblock) /* Trying to get Ymodem header block */ return(-1); @@ -137,7 +137,7 @@ int xmodem_get_block(xmodem_t* xm, uchar* block, BOOL hdrblock) } calc_crc=calc_chksum=0; for(b=0;b<xm->block_size;b++) { - i=getcom(1); + i=getcom(xm->byte_timeout); if(i==NOINP) break; block[b]=i; @@ -153,11 +153,11 @@ int xmodem_get_block(xmodem_t* xm, uchar* block, BOOL hdrblock) } if((*xm->mode)&CRC) { - crc=getcom(1)<<8; - crc|=getcom(1); + crc=getcom(xm->byte_timeout)<<8; + crc|=getcom(xm->byte_timeout); } else - chksum=getcom(1); + chksum=getcom(xm->byte_timeout); if((*xm->mode)&CRC) { if(crc==calc_crc) @@ -243,7 +243,7 @@ int xmodem_get_ack(xmodem_t* xm, int tries) return(1); } - i=getcom(10); + i=getcom(xm->ack_timeout); if(can && i!=CAN) can=0; if(i==ACK) diff --git a/src/sbbs3/xmodem.h b/src/sbbs3/xmodem.h index 007405797334051111e24e28e9f2d14ef9af197d..116d78c55f8d8a446de946cbe6021070cb956368 100644 --- a/src/sbbs3/xmodem.h +++ b/src/sbbs3/xmodem.h @@ -44,11 +44,13 @@ typedef struct { - SOCKET sock; /* socket descriptor */ - long* mode; - FILE* statfp; - FILE* errfp; - uint block_size; + SOCKET sock; /* socket descriptor */ + long* mode; + FILE* statfp; + FILE* errfp; + unsigned block_size; + unsigned ack_timeout; + unsigned byte_timeout; } xmodem_t;