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)
{
if(conn_api.binary_mode_on)
conn_api.binary_mode_on();
conn_api.binary_mode = true;
}
void conn_binary_mode_off(void)
{
if(conn_api.binary_mode_off)
conn_api.binary_mode_off();
conn_api.binary_mode = false;
}
......@@ -36,6 +36,7 @@ struct conn_api {
int (*close)(void);
void (*binary_mode_on)(void);
void (*binary_mode_off)(void);
bool binary_mode;
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);
int log_level;
......
......@@ -1046,11 +1046,12 @@ void ascii_upload(FILE *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;
conn_binary_mode_off();
if (!was_binary)
conn_binary_mode_off();
if(log_fp!=NULL)
fflush(log_fp);
/* TODO: Make this pretty (countdown timer) and don't delay a second between keyboard polls */
......@@ -1074,6 +1075,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
zmodem_t zm;
int64_t fsize;
struct zmodem_cbdata cbdata;
bool was_binary = conn_api.binary_mode;
draw_transfer_window("ZMODEM Upload");
......@@ -1081,7 +1083,8 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
cbdata.zm=&zm;
cbdata.bbs=bbs;
conn_binary_mode_on();
if (!was_binary)
conn_binary_mode_on();
transfer_buf_len=0;
zmodem_init(&zm
,/* cbdata */&cbdata
......@@ -1106,7 +1109,7 @@ void zmodem_upload(struct bbslist *bbs, FILE *fp, char *path)
fclose(fp);
transfer_complete(success);
transfer_complete(success, was_binary);
}
BOOL zmodem_duplicate_callback(void *cbdata, void *zm_void)
......@@ -1184,6 +1187,7 @@ void zmodem_download(struct bbslist *bbs)
int files_received;
uint64_t bytes_received;
struct zmodem_cbdata cbdata;
bool was_binary = conn_api.binary_mode;
if(safe_mode)
return;
......@@ -1191,7 +1195,8 @@ void zmodem_download(struct bbslist *bbs)
zmodem_mode=ZMODEM_MODE_RECV;
conn_binary_mode_on();
if (!was_binary)
conn_binary_mode_on();
cbdata.zm=&zm;
cbdata.bbs=bbs;
transfer_buf_len=0;
......@@ -1212,7 +1217,7 @@ void zmodem_download(struct bbslist *bbs)
if(files_received>1)
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 */
......@@ -1423,8 +1428,10 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
BOOL success;
xmodem_t xm;
int64_t fsize;
bool was_binary = conn_api.binary_mode;
conn_binary_mode_on();
if (!was_binary)
conn_binary_mode_on();
xmodem_init(&xm
,/* cbdata */&xm
......@@ -1476,7 +1483,8 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
}
else {
fclose(fp);
conn_binary_mode_off();
if (!was_binary)
conn_binary_mode_off();
return;
}
......@@ -1499,7 +1507,7 @@ void xmodem_upload(struct bbslist *bbs, FILE *fp, char *path, long mode, int las
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)
......@@ -1593,6 +1601,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
time_t t,startfile,ftime=0;
int old_hold=hold_update;
BOOL extra_pass = FALSE;
bool was_binary = conn_api.binary_mode;
if(safe_mode)
return;
......@@ -1611,7 +1620,8 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
else
return;
conn_binary_mode_on();
if (!was_binary)
conn_binary_mode_on();
xmodem_init(&xm
,/* cbdata */&xm
,&mode
......@@ -1872,7 +1882,7 @@ void xmodem_download(struct bbslist *bbs, long mode, char *path)
end:
if(fp)
fclose(fp);
transfer_complete(success);
transfer_complete(success, was_binary);
}
/* End of X/Y-MODEM stuff */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment