diff --git a/src/sbbs3/sexyz.c b/src/sbbs3/sexyz.c index 418f491c3b2f79eccf6384e605317bded4a88624..0f406d05a4a2499d5dcc9a1b8ddfa5e78a5047a2 100644 --- a/src/sbbs3/sexyz.c +++ b/src/sbbs3/sexyz.c @@ -412,7 +412,9 @@ int send_byte(void* unused, uchar ch, unsigned timeout) fprintf(statfp,"FLOW"); flows++; if(WaitForEvent(outbuf_empty,timeout*1000)!=WAIT_OBJECT_0) { - fprintf(statfp,"\n!ERROR Waiting for output buffer to flush\n"); + fprintf(statfp + ,"\n!TIMEOUT waiting for output buffer to flush (%u seconds, %u bytes)\n" + ,timeout, RingBufFull(&outbuf)); newline=TRUE; return(-1); } @@ -592,11 +594,11 @@ BOOL is_connected(void* unused) return socket_check(sock,NULL,NULL,0); } -BOOL data_waiting(void* unused) +BOOL data_waiting(void* unused, unsigned timeout) { BOOL rd; - if(!socket_check(sock,&rd,NULL,0)) + if(!socket_check(sock,&rd,NULL,timeout)) return(FALSE); return(rd); } diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c index 1a8e56856db2d49573f781ccb020bafab9060ac1..d5afd33f9464da9747b753ac699015b860142645 100644 --- a/src/sbbs3/zmodem.c +++ b/src/sbbs3/zmodem.c @@ -70,10 +70,10 @@ static BOOL is_connected(zmodem_t* zm) return(TRUE); } -int zmodem_data_waiting(zmodem_t* zm) +int zmodem_data_waiting(zmodem_t* zm, unsigned timeout) { if(zm->data_waiting) - return(zm->data_waiting(zm->cbdata)); + return(zm->data_waiting(zm->cbdata, timeout)); return(FALSE); } @@ -1421,7 +1421,8 @@ int zmodem_send_from(zmodem_t* zm, FILE* fp, ulong pos, ulong* sent) * check out that header */ - while(zmodem_data_waiting(zm) && !zm->cancelled && is_connected(zm)) { + while(zmodem_data_waiting(zm, zm->consecutive_errors ? 1000:0) + && !zm->cancelled && is_connected(zm)) { int type; int c; lprintf(zm,LOG_DEBUG,"Back-channel traffic detected:"); @@ -2030,7 +2031,7 @@ void zmodem_init(zmodem_t* zm, void* cbdata ,int (*send_byte)(void*, uchar ch, unsigned timeout) ,int (*recv_byte)(void*, unsigned timeout) ,BOOL (*is_connected)(void*) - ,BOOL (*data_waiting)(void*)) + ,BOOL (*data_waiting)(void*, unsigned timeout)) { memset(zm,0,sizeof(zmodem_t)); diff --git a/src/sbbs3/zmodem.h b/src/sbbs3/zmodem.h index 5d6d96d4da15cfaa85e9fe9263ea1b56928d8618..953275f93ab216fcaae4c4a23ce0e7871465355f 100644 --- a/src/sbbs3/zmodem.h +++ b/src/sbbs3/zmodem.h @@ -272,7 +272,7 @@ typedef struct { int (*recv_byte)(void*, unsigned timeout); void (*progress)(void*, ulong current_pos); BOOL (*is_connected)(void*); - BOOL (*data_waiting)(void*); + BOOL (*data_waiting)(void*, unsigned timeout); } zmodem_t; @@ -282,7 +282,7 @@ void zmodem_init(zmodem_t*, void* cbdata ,int (*send_byte)(void*, BYTE ch, unsigned timeout) ,int (*recv_byte)(void*, unsigned timeout) ,BOOL (*is_connected)(void*) - ,BOOL (*data_waiting)(void*) + ,BOOL (*data_waiting)(void*, unsigned timeout) ); char* zmodem_ver(char *buf); const char* zmodem_source(void);