]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - windows/winnps.c
Update version number for 0.68 release.
[PuTTY.git] / windows / winnps.c
index a172628f86c3366bec2c7d514897a81b142cf6ed..f992a4f0cbfd98f46a7dd95f760f6da07c3c1b27 100644 (file)
@@ -16,8 +16,8 @@
 
 #include "winsecur.h"
 
-Socket make_handle_socket(HANDLE send_H, HANDLE recv_H, Plug plug,
-                          int overlapped);
+Socket make_handle_socket(HANDLE send_H, HANDLE recv_H, HANDLE stderr_H,
+                          Plug plug, int overlapped);
 
 typedef struct Socket_named_pipe_server_tag *Named_Pipe_Server_Socket;
 struct Socket_named_pipe_server_tag {
@@ -32,6 +32,7 @@ struct Socket_named_pipe_server_tag {
     /* The current named pipe object + attempt to connect to it */
     HANDLE pipehandle;
     OVERLAPPED connect_ovl;
+    struct handle *callback_handle;    /* winhandl.c's reference */
 
     /* PuTTY Socket machinery */
     Plug plug;
@@ -51,6 +52,8 @@ static void sk_namedpipeserver_close(Socket s)
 {
     Named_Pipe_Server_Socket ps = (Named_Pipe_Server_Socket) s;
 
+    if (ps->callback_handle)
+        handle_free(ps->callback_handle);
     CloseHandle(ps->pipehandle);
     CloseHandle(ps->connect_ovl.hEvent);
     sfree(ps->error);
@@ -68,6 +71,11 @@ static const char *sk_namedpipeserver_socket_error(Socket s)
     return ps->error;
 }
 
+static char *sk_namedpipeserver_peer_info(Socket s)
+{
+    return NULL;
+}
+
 static int create_named_pipe(Named_Pipe_Server_Socket ps, int first_instance)
 {
     SECURITY_ATTRIBUTES sa;
@@ -112,7 +120,7 @@ static Socket named_pipe_accept(accept_ctx_t ctx, Plug plug)
 {
     HANDLE conn = (HANDLE)ctx.p;
 
-    return make_handle_socket(conn, conn, plug, TRUE);
+    return make_handle_socket(conn, conn, NULL, plug, TRUE);
 }
 
 /*
@@ -208,7 +216,8 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
         NULL /* write_eof */,
         NULL /* flush */,
         NULL /* set_frozen */,
-       sk_namedpipeserver_socket_error
+       sk_namedpipeserver_socket_error,
+       sk_namedpipeserver_peer_info,
     };
 
     Named_Pipe_Server_Socket ret;
@@ -220,6 +229,7 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
     ret->psd = NULL;
     ret->pipename = dupstr(pipename);
     ret->acl = NULL;
+    ret->callback_handle = NULL;
 
     assert(strncmp(pipename, "\\\\.\\pipe\\", 9) == 0);
     assert(strchr(pipename + 9, '\\') == NULL);
@@ -237,8 +247,9 @@ Socket new_named_pipe_listener(const char *pipename, Plug plug)
 
     memset(&ret->connect_ovl, 0, sizeof(ret->connect_ovl));
     ret->connect_ovl.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-    handle_add_foreign_event(ret->connect_ovl.hEvent,
-                             named_pipe_connect_callback, ret);
+    ret->callback_handle =
+        handle_add_foreign_event(ret->connect_ovl.hEvent,
+                                 named_pipe_connect_callback, ret);
     named_pipe_accept_loop(ret, FALSE);
 
   cleanup: