Add a new back-end function to return the exit code of the remote
[u/mdw/putty] / telnet.c
index 40d032c..5e5fb24 100644 (file)
--- a/telnet.c
+++ b/telnet.c
@@ -230,7 +230,7 @@ static void option_side_effects(struct Opt *o, int enabled)
        echoing = !enabled;
     else if (o->option == TELOPT_SGA && o->send == DO)
        editing = !enabled;
-    ldisc_send(NULL, 0);              /* cause ldisc to notice the change */
+    ldisc_send(NULL, 0, 0);           /* cause ldisc to notice the change */
 
     /* Ensure we get the minimum options */
     if (!activated) {
@@ -588,6 +588,11 @@ static int telnet_receive(Plug plug, int urgent, char *data, int len)
     return 1;
 }
 
+static void telnet_sent(Plug plug, int bufsize)
+{
+    telnet_bufsize = bufsize;
+}
+
 /*
  * Called to set up the Telnet connection.
  *
@@ -596,11 +601,12 @@ static int telnet_receive(Plug plug, int urgent, char *data, int len)
  * Also places the canonical host name into `realhost'. It must be
  * freed by the caller.
  */
-static char *telnet_init(char *host, int port, char **realhost)
+static char *telnet_init(char *host, int port, char **realhost, int nodelay)
 {
     static struct plug_function_table fn_table = {
        telnet_closing,
-       telnet_receive
+       telnet_receive,
+       telnet_sent
     }, *fn_table_ptr = &fn_table;
 
     SockAddr addr;
@@ -609,6 +615,11 @@ static char *telnet_init(char *host, int port, char **realhost)
     /*
      * Try to find host.
      */
+    {
+       char buf[200];
+       sprintf(buf, "Looking up host \"%.170s\"", host);
+       logevent(buf);
+    }
     addr = sk_namelookup(host, realhost);
     if ((err = sk_addr_error(addr)))
        return err;
@@ -619,7 +630,13 @@ static char *telnet_init(char *host, int port, char **realhost)
     /*
      * Open socket.
      */
-    s = sk_new(addr, port, 0, 1, &fn_table_ptr);
+    {
+       char buf[200], addrbuf[100];
+       sk_getaddr(addr, addrbuf, 100);
+       sprintf(buf, "Connecting to %.100s port %d", addrbuf, port);
+       logevent(buf);
+    }
+    s = sk_new(addr, port, 0, 1, nodelay, &fn_table_ptr);
     if ((err = sk_socket_error(s)))
        return err;
 
@@ -831,6 +848,12 @@ static int telnet_ldisc(int option)
     return FALSE;
 }
 
+static int telnet_exitcode(void)
+{
+    /* Telnet doesn't transmit exit codes back to the client */
+    return 0;
+}
+
 Backend telnet_backend = {
     telnet_init,
     telnet_send,
@@ -838,6 +861,7 @@ Backend telnet_backend = {
     telnet_size,
     telnet_special,
     telnet_socket,
+    telnet_exitcode,
     telnet_sendok,
     telnet_ldisc,
     telnet_unthrottle,