Skip to content
Snippets Groups Projects
Commit 3ac3c1fd authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Track binary mode, and don't enter/exit it for file transfers if it's

already in binary mode.

Should fix Sourceforge issue 91
parent 62552ccf
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #3476 failed
...@@ -606,10 +606,12 @@ void conn_binary_mode_on(void) ...@@ -606,10 +606,12 @@ void conn_binary_mode_on(void)
{ {
if(conn_api.binary_mode_on) if(conn_api.binary_mode_on)
conn_api.binary_mode_on(); conn_api.binary_mode_on();
conn_api.binary_mode = true;
} }
void conn_binary_mode_off(void) void conn_binary_mode_off(void)
{ {
if(conn_api.binary_mode_off) if(conn_api.binary_mode_off)
conn_api.binary_mode_off(); conn_api.binary_mode_off();
conn_api.binary_mode = false;
} }
...@@ -36,6 +36,7 @@ struct conn_api { ...@@ -36,6 +36,7 @@ struct conn_api {
int (*close)(void); int (*close)(void);
void (*binary_mode_on)(void); void (*binary_mode_on)(void);
void (*binary_mode_off)(void); void (*binary_mode_off)(void);
bool binary_mode;
void *(*rx_parse_cb)(const void* inbuf, size_t inlen, size_t *olen); void *(*rx_parse_cb)(const void* inbuf, size_t inlen, size_t *olen);
void *(*tx_parse_cb)(const void* inbuf, size_t inlen, size_t *olen); void *(*tx_parse_cb)(const void* inbuf, size_t inlen, size_t *olen);
int log_level; int log_level;
......
...@@ -1046,10 +1046,11 @@ void ascii_upload(FILE *fp) ...@@ -1046,10 +1046,11 @@ void ascii_upload(FILE *fp)
fclose(fp); fclose(fp);
} }
static void transfer_complete(BOOL success) static void transfer_complete(BOOL success, bool was_binary)
{ {
int timeout = success ? settings.xfer_success_keypress_timeout : settings.xfer_failure_keypress_timeout; int timeout = success ? settings.xfer_success_keypress_timeout : settings.xfer_failure_keypress_timeout;
if (!was_binary)
conn_binary_mode_off(); conn_binary_mode_off();
if(log_fp!=NULL) if(log_fp!=NULL)
fflush(log_fp); fflush(log_fp);
...@@ -1074,6 +1075,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path) ...@@ -1074,6 +1075,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
zmodem_t zm; zmodem_t zm;
int64_t fsize; int64_t fsize;
struct zmodem_cbdata cbdata; struct zmodem_cbdata cbdata;
bool was_binary = conn_api.binary_mode;
draw_transfer_window("ZMODEM Upload"); draw_transfer_window("ZMODEM Upload");
...@@ -1081,6 +1083,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path) ...@@ -1081,6 +1083,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
cbdata.zm=&zm; cbdata.zm=&zm;
cbdata.bbs=bbs; cbdata.bbs=bbs;
if (!was_binary)
conn_binary_mode_on(); conn_binary_mode_on();
transfer_buf_len=0; transfer_buf_len=0;
zmodem_init(&zm zmodem_init(&zm
...@@ -1106,7 +1109,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path) ...@@ -1106,7 +1109,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
fclose(fp); fclose(fp);
transfer_complete(success); transfer_complete(success, was_binary);
} }
BOOL zmodem_duplicate_callback(void *cbdata, void *zm_void) BOOL zmodem_duplicate_callback(void *cbdata, void *zm_void)
...@@ -1184,6 +1187,7 @@ void zmodem_download(struct bbslist *bbs) ...@@ -1184,6 +1187,7 @@ void zmodem_download(struct bbslist *bbs)
int files_received; int files_received;
uint64_t bytes_received; uint64_t bytes_received;
struct zmodem_cbdata cbdata; struct zmodem_cbdata cbdata;
bool was_binary = conn_api.binary_mode;
if(safe_mode) if(safe_mode)
return; return;
...@@ -1191,6 +1195,7 @@ void zmodem_download(struct bbslist *bbs) ...@@ -1191,6 +1195,7 @@ void zmodem_download(struct bbslist *bbs)
zmodem_mode=ZMODEM_MODE_RECV; zmodem_mode=ZMODEM_MODE_RECV;
if (!was_binary)
conn_binary_mode_on(); conn_binary_mode_on();
cbdata.zm=&zm; cbdata.zm=&zm;
cbdata.bbs=bbs; cbdata.bbs=bbs;
...@@ -1212,7 +1217,7 @@ void zmodem_download(struct bbslist *bbs) ...@@ -1212,7 +1217,7 @@ void zmodem_download(struct bbslist *bbs)
if(files_received>1) if(files_received>1)
lprintf(LOG_INFO,"Received %u files (%"PRId64" bytes) successfully", files_received, bytes_received); lprintf(LOG_INFO,"Received %u files (%"PRId64" bytes) successfully", files_received, bytes_received);
transfer_complete(files_received); transfer_complete(files_received, was_binary);
} }
/* End of Zmodem Stuff */ /* End of Zmodem Stuff */
...@@ -1423,7 +1428,9 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las ...@@ -1423,7 +1428,9 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
BOOL success; BOOL success;
xmodem_t xm; xmodem_t xm;
int64_t fsize; int64_t fsize;
bool was_binary = conn_api.binary_mode;
if (!was_binary)
conn_binary_mode_on(); conn_binary_mode_on();
xmodem_init(&xm xmodem_init(&xm
...@@ -1476,6 +1483,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las ...@@ -1476,6 +1483,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
} }
else { else {
fclose(fp); fclose(fp);
if (!was_binary)
conn_binary_mode_off(); conn_binary_mode_off();
return; return;
} }
...@@ -1499,7 +1507,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las ...@@ -1499,7 +1507,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
fclose(fp); fclose(fp);
transfer_complete(success); transfer_complete(success, was_binary);
} }
BOOL xmodem_duplicate(xmodem_t *xm, struct bbslist *bbs, char *path, size_t pathsize, char *fname) BOOL xmodem_duplicate(xmodem_t *xm, struct bbslist *bbs, char *path, size_t pathsize, char *fname)
...@@ -1593,6 +1601,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path) ...@@ -1593,6 +1601,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
time_t t,startfile,ftime=0; time_t t,startfile,ftime=0;
int old_hold=hold_update; int old_hold=hold_update;
BOOL extra_pass = FALSE; BOOL extra_pass = FALSE;
bool was_binary = conn_api.binary_mode;
if(safe_mode) if(safe_mode)
return; return;
...@@ -1611,6 +1620,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path) ...@@ -1611,6 +1620,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
else else
return; return;
if (!was_binary)
conn_binary_mode_on(); conn_binary_mode_on();
xmodem_init(&xm xmodem_init(&xm
,/* cbdata */&xm ,/* cbdata */&xm
...@@ -1872,7 +1882,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path) ...@@ -1872,7 +1882,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
end: end:
if(fp) if(fp)
fclose(fp); fclose(fp);
transfer_complete(success); transfer_complete(success, was_binary);
} }
/* End of X/Y-MODEM stuff */ /* End of X/Y-MODEM stuff */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment