diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c index 118808e8d4db9b2fd3eb4b2bb5a1bfef0f3313d1..6f6ed00a7a97e1488d193a6501b3938093127db3 100644 --- a/src/sbbs3/zmodem.c +++ b/src/sbbs3/zmodem.c @@ -35,6 +35,7 @@ #include "crc32.h" #include "sexyz.h" +#include "telnet.h" #define ENDOFFRAME 2 #define FRAMEOK 1 @@ -207,6 +208,8 @@ int zmodem_send_esc(zmodem_t* zm, unsigned char c) int zmodem_tx(zmodem_t* zm, unsigned char c) { + int result; + switch (c) { case DLE: case DLE|0x80: /* even if high-bit set */ @@ -221,6 +224,13 @@ int zmodem_tx(zmodem_t* zm, unsigned char c) if(zm->escape_all_control_characters && (zm->last_sent&0x7f) == '@') return zmodem_send_esc(zm, c); break; + case TELNET_IAC: + if(zm->escape_telnet_iac) { + if((result=zmodem_send_raw(zm, ZDLE))!=0) + return(result); + return zmodem_send_raw(zm, ZRUB1); + } + break; default: if(zm->escape_all_control_characters && (c&0x60)==0) return zmodem_send_esc(zm, c); diff --git a/src/sbbs3/zmodem.h b/src/sbbs3/zmodem.h index 21abc3b32959a770f246fb34209fc1605642ee03..454b91d95e0eda9bf8fcc8dffab7cdf73ed34c19 100644 --- a/src/sbbs3/zmodem.h +++ b/src/sbbs3/zmodem.h @@ -251,6 +251,7 @@ typedef struct { long crc_request; /* Configuration */ + BOOL escape_telnet_iac; unsigned send_timeout; unsigned recv_timeout; unsigned max_errors;