Преглед на файлове

Feat: add config {IAC GA}

dzp преди 3 години
родител
ревизия
35b27d3f74
променени са 3 файла, в които са добавени 37 реда и са изтрити 0 реда
  1. 31 0
      src/config.c
  2. 5 0
      src/telopt_client.c
  3. 1 0
      src/tintin.h

+ 31 - 0
src/config.c

@@ -60,6 +60,7 @@ DO_CONFIG(config_verbatim);
 DO_CONFIG(config_verbatimchar);
 DO_CONFIG(config_verbose);
 DO_CONFIG(config_wordwrap);
+DO_CONFIG(config_iac_ga);
 
 typedef struct session *CONFIG  (struct session *ses, char *arg1, char *arg2, int index);
 
@@ -304,6 +305,12 @@ struct config_type config_table[] =
 		config_wordwrap
 	},
 
+	{
+		"IAC GA",
+		"Don't strip IAC GA from server output",
+		"Strip IAC GA from server output",
+		config_iac_ga
+	},
 
 	{
 		"",
@@ -1345,3 +1352,27 @@ DO_CONFIG(config_wordwrap)
 
 	return ses;
 }
+
+DO_CONFIG(config_iac_ga)
+{
+	if (*arg2)
+	{
+		if (is_abbrev(arg2, "ON"))
+		{
+			SET_BIT(ses->config_flags, CONFIG_FLAG_IAC_GA);
+		}
+		else if (is_abbrev(arg2, "OFF"))
+		{
+			DEL_BIT(ses->config_flags, CONFIG_FLAG_IAC_GA);
+		}
+		else
+		{
+			show_error(ses, LIST_CONFIG, "#SYNTAX: #CONFIG {%s} <ON|OFF>", config_table[index].name);
+
+			return NULL;
+		}
+	}
+	strcpy(arg2, HAS_BIT(ses->config_flags, CONFIG_FLAG_IAC_GA) ? "ON" : "OFF");
+
+	return ses;
+}

+ 5 - 0
src/telopt_client.c

@@ -413,6 +413,11 @@ int client_translate_telopts(struct session *ses, unsigned char *src, int cplen)
 
 			if (skip <= cplen)
 			{
+                if (HAS_BIT(ses->config_flags, CONFIG_FLAG_IAC_GA)) {
+                    if (skip == 2 && (cpsrc[1] == GA || cpsrc[1] == EOR)) {
+                        gtd->mud_output_len++; *cpdst++ = cpsrc[1];
+                    };
+                };
 				cplen -= skip;
 				cpsrc += skip;
 			}

+ 1 - 0
src/tintin.h

@@ -647,6 +647,7 @@ enum operators
 #define CONFIG_FLAG_VERBATIM          BV17
 #define CONFIG_FLAG_VERBOSE           BV18
 #define CONFIG_FLAG_WORDWRAP          BV19
+#define CONFIG_FLAG_IAC_GA            BV30
 
 
 #define SES_FLAG_BUFFERUPDATE         BV01