Introduce a sane interface function, from_backend(), for backends to
[u/mdw/putty] / telnet.c
index 4fb39c6..7b6c0bf 100644 (file)
--- a/telnet.c
+++ b/telnet.c
@@ -171,6 +171,11 @@ static void s_write (void *buf, int len) {
     try_write();
 }
 
+static void c_write1(int c) {
+    char cc = (char)c;
+    from_backend(0, &cc, 1);
+}
+
 static void log_option (char *sender, int cmd, int option) {
     char buf[50];
     sprintf(buf, "%s:\t%s %s", sender,
@@ -631,8 +636,11 @@ static int telnet_msg (WPARAM wParam, LPARAM lParam) {
       case FD_CLOSE:
        {
            int clear_of_oob = 1;
-           if (ioctlsocket (s, SIOCATMARK, &clear_of_oob) < 0 )
-               return -20000-WSAGetLastError();
+
+           /* Don't check for error return; some shims don't support
+            * this ioctl.
+            */
+           ioctlsocket (s, SIOCATMARK, &clear_of_oob);
 
            in_synch = !clear_of_oob;
 
@@ -747,6 +755,12 @@ static void telnet_special (Telnet_Special code) {
            send_opt (o_echo.nsend, o_echo.option);
        }
        break;
+      case TS_PING: 
+       if (o_they_sga.state == ACTIVE) {
+           b[1] = NOP; 
+           s_write (b, 2); 
+       }
+        break;
     }
 }