partial RFC1143 implementation; only reacts to negotiation, cannot handle initiating it yet
diff --git a/telnet-client.c b/telnet-client.c
index 099a846..3e5f645 100644
--- a/telnet-client.c
+++ b/telnet-client.c
@@ -89,55 +89,32 @@
case LIBTELNET_EV_SEND:
_send(sock, ev->buffer, ev->size);
break;
- /* accept any options we want */
- case LIBTELNET_EV_NEGOTIATE:
- switch (ev->command) {
- case LIBTELNET_WILL:
- switch (ev->telopt) {
- /* accept request to enable compression */
- case LIBTELNET_TELOPT_COMPRESS2:
- libtelnet_send_negotiate(telnet, LIBTELNET_DO, ev->telopt);
- break;
- /* server "promises" to echo, so turn off local echo */
- case LIBTELNET_TELOPT_ECHO:
- do_echo = 0;
- libtelnet_send_negotiate(telnet, LIBTELNET_DO, ev->telopt);
- break;
- /* unknown -- reject */
- default:
- libtelnet_send_negotiate(telnet, LIBTELNET_DONT, ev->telopt);
- break;
- }
- break;
+ /* request to enable remote feature (or receipt) */
+ case LIBTELNET_EV_WILL:
+ /* we accept COMPRESS2 (MCCP) */
+ if (ev->telopt == LIBTELNET_TELOPT_COMPRESS2)
+ ev->accept = 1;
- case LIBTELNET_WONT:
- switch (ev->telopt) {
- /* server wants us to do echoing, by telling us it won't */
- case LIBTELNET_TELOPT_ECHO:
- do_echo = 1;
- libtelnet_send_negotiate(telnet, LIBTELNET_DONT, ev->telopt);
- break;
- }
- break;
-
- case LIBTELNET_DO:
- switch (ev->telopt) {
- /* accept request to enable terminal-type requests */
- case LIBTELNET_TELOPT_TTYPE:
- libtelnet_send_negotiate(telnet, LIBTELNET_WILL, ev->telopt);
- break;
- /* unknown - reject */
- default:
- libtelnet_send_negotiate(telnet, LIBTELNET_WONT, ev->telopt);
- break;
- }
- break;
-
- case LIBTELNET_DONT:
- /* ignore for now */
- break;
+ /* we'll agree to turn off our echo if server wants us to stop */
+ else if (ev->telopt == LIBTELNET_TELOPT_ECHO) {
+ do_echo = 0;
+ ev->accept = 1;
}
break;
+ /* notification of disabling remote feature (or receipt) */
+ case LIBTELNET_EV_WONT:
+ if (ev->telopt == LIBTELNET_TELOPT_ECHO)
+ do_echo = 1;
+ break;
+ /* request to enable local feature (or receipt) */
+ case LIBTELNET_EV_DO:
+ /* we support the TTYPE option */
+ if (ev->telopt == LIBTELNET_TELOPT_TTYPE)
+ ev->accept = 1;
+ break;
+ /* demand to disable local feature (or receipt) */
+ case LIBTELNET_EV_DONT:
+ break;
/* respond to particular subnegotiations */
case LIBTELNET_EV_SUBNEGOTIATION:
/* respond with our terminal type */