From e7bca3fc149cf07d80b35499f79364ce7241b100 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Wed, 8 Jun 2005 18:29:26 +0000
Subject: [PATCH] Created escape_telnet_iac (0xff) option.

---
 src/sbbs3/zmodem.c | 10 ++++++++++
 src/sbbs3/zmodem.h |  1 +
 2 files changed, 11 insertions(+)

diff --git a/src/sbbs3/zmodem.c b/src/sbbs3/zmodem.c
index 118808e8d4..6f6ed00a7a 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 21abc3b329..454b91d95e 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;
-- 
GitLab