X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/c85623f918b8a6c639afc15604414f9b113bb20d..90bf4cce0865803dc8ab32d6bc2b130797b378e3:/telnet.c diff --git a/telnet.c b/telnet.c index 91d0cab4..c0efd715 100644 --- a/telnet.c +++ b/telnet.c @@ -72,6 +72,19 @@ #define TELOPT_AUTHENTICATION 37 /* Authenticate */ #define TELOPT_ENCRYPT 38 /* Encryption option */ #define TELOPT_NEW_ENVIRON 39 /* New - Environment variables */ +#define TELOPT_TN3270E 40 /* TN3270 enhancements */ +#define TELOPT_XAUTH 41 +#define TELOPT_CHARSET 42 /* Character set */ +#define TELOPT_RSP 43 /* Remote serial port */ +#define TELOPT_COM_PORT_OPTION 44 /* Com port control */ +#define TELOPT_SLE 45 /* Suppress local echo */ +#define TELOPT_STARTTLS 46 /* Start TLS */ +#define TELOPT_KERMIT 47 /* Automatic Kermit file transfer */ +#define TELOPT_SEND_URL 48 +#define TELOPT_FORWARD_X 49 +#define TELOPT_PRAGMA_LOGON 138 +#define TELOPT_SSPI_LOGON 139 +#define TELOPT_PRAGMA_HEARTBEAT 140 #define TELOPT_EXOPL 255 /* extended-options-list */ #define TELQUAL_IS 0 /* option is... */ @@ -132,6 +145,19 @@ static char *telopt(int opt) i(AUTHENTICATION); i(ENCRYPT); i(NEW_ENVIRON); + i(TN3270E); + i(XAUTH); + i(CHARSET); + i(RSP); + i(COM_PORT_OPTION); + i(SLE); + i(STARTTLS); + i(KERMIT); + i(SEND_URL); + i(FORWARD_X); + i(PRAGMA_LOGON); + i(SSPI_LOGON); + i(PRAGMA_HEARTBEAT); i(EXOPL); #undef i return ""; @@ -740,6 +766,15 @@ static char *telnet_init(void *frontend_handle, void **backend_handle, return NULL; } +static void telnet_free(void *handle) +{ + Telnet telnet = (Telnet) handle; + + sfree(telnet->sb_buf); + if (telnet->s) + sk_close(telnet->s); + sfree(telnet); +} /* * Reconfigure the Telnet backend. There's no immediate action * necessary, in this backend: we just save the fresh config for @@ -893,9 +928,10 @@ static void telnet_special(void *handle, Telnet_Special code) telnet->bufsize = sk_write(telnet->s, (char *)b, 2); break; case TS_EOL: - /* In BINARY mode, CR-LF becomes just CR. */ + /* In BINARY mode, CR-LF becomes just CR - + * and without the NUL suffix too. */ if (telnet->opt_states[o_we_bin.index] == ACTIVE) - telnet->bufsize = sk_write(telnet->s, "\r", 2); + telnet->bufsize = sk_write(telnet->s, "\r", 1); else telnet->bufsize = sk_write(telnet->s, "\r\n", 2); break; @@ -974,6 +1010,7 @@ static int telnet_exitcode(void *handle) Backend telnet_backend = { telnet_init, + telnet_free, telnet_reconfig, telnet_send, telnet_sendbuffer,