/* Parameters for (repeated) creation of named pipe objects */
PSECURITY_DESCRIPTOR psd;
- PSID networksid;
PACL acl;
char *pipename;
/* 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;
{
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);
sfree(ps->pipename);
- if (ps->networksid)
- LocalFree(ps->networksid);
if (ps->acl)
LocalFree(ps->acl);
if (ps->psd)
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;
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;
ret->error = NULL;
ret->psd = NULL;
ret->pipename = dupstr(pipename);
- ret->networksid = NULL;
ret->acl = NULL;
+ ret->callback_handle = NULL;
assert(strncmp(pipename, "\\\\.\\pipe\\", 9) == 0);
assert(strchr(pipename + 9, '\\') == NULL);
if (!make_private_security_descriptor(GENERIC_READ | GENERIC_WRITE,
- &ret->psd, &ret->networksid,
- &ret->acl, &ret->error)) {
+ &ret->psd, &ret->acl, &ret->error)) {
goto cleanup;
}
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: