From f864265e393f4279045ca59d7eb9b03352766cde Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 29 Jan 2017 20:24:09 +0000 Subject: [PATCH] Remove the commented-out WINDOWS_ASYNC_AGENT code. It's been commented out for ages because it never really worked, and it's about to become further out of date when I make other changes to the agent client code, so it's time to get rid of it before it gets in the way. If and when I do get round to supporting asynchronous agent requests on Windows, it's now pretty clear to me that trying to coerce this ghastly window-message IPC into the right shape is the wrong way, and a better approach will be to make Pageant support a named-pipe based alternative transport for its agent connections, and speaking the ordinary stream-oriented agent protocol over that. Then Pageant will be able to start adding interactive features (like confirmation dialogs or on-demand decryption) with freedom to reply to multiple simultaneous agent connections in whatever order it finds convenient. --- windows/winpgntc.c | 71 ---------------------------------------------- 1 file changed, 71 deletions(-) diff --git a/windows/winpgntc.c b/windows/winpgntc.c index 06649abc..6e085e42 100644 --- a/windows/winpgntc.c +++ b/windows/winpgntc.c @@ -24,52 +24,6 @@ int agent_exists(void) return TRUE; } -/* - * Unfortunately, this asynchronous agent request mechanism doesn't - * appear to work terribly well. I'm going to comment it out for - * the moment, and see if I can come up with a better one :-/ - */ -#ifdef WINDOWS_ASYNC_AGENT - -struct agent_query_data { - COPYDATASTRUCT cds; - unsigned char *mapping; - HANDLE handle; - char *mapname; - HWND hwnd; - void (*callback)(void *, void *, int); - void *callback_ctx; -}; - -DWORD WINAPI agent_query_thread(LPVOID param) -{ - struct agent_query_data *data = (struct agent_query_data *)param; - unsigned char *ret; - int id, retlen; - - id = SendMessage(data->hwnd, WM_COPYDATA, (WPARAM) NULL, - (LPARAM) &data->cds); - ret = NULL; - if (id > 0) { - retlen = 4 + GET_32BIT(data->mapping); - ret = snewn(retlen, unsigned char); - if (ret) { - memcpy(ret, data->mapping, retlen); - } - } - if (!ret) - retlen = 0; - UnmapViewOfFile(data->mapping); - CloseHandle(data->handle); - sfree(data->mapname); - - agent_schedule_callback(data->callback, data->callback_ctx, ret, retlen); - - return 0; -} - -#endif - int agent_query(void *in, int inlen, void **out, int *outlen, void (*callback)(void *, void *, int), void *callback_ctx) { @@ -136,31 +90,6 @@ int agent_query(void *in, int inlen, void **out, int *outlen, cds.dwData = AGENT_COPYDATA_ID; cds.cbData = 1 + strlen(mapname); cds.lpData = mapname; -#ifdef WINDOWS_ASYNC_AGENT - if (callback != NULL && !(flags & FLAG_SYNCAGENT)) { - /* - * We need an asynchronous Pageant request. Since I know of - * no way to stop SendMessage from blocking the thread it's - * called in, I see no option but to start a fresh thread. - * When we're done we'll PostMessage the result back to our - * main window, so that the callback is done in the primary - * thread to avoid concurrency. - */ - struct agent_query_data *data = snew(struct agent_query_data); - DWORD threadid; - data->mapping = p; - data->handle = filemap; - data->mapname = mapname; - data->callback = callback; - data->callback_ctx = callback_ctx; - data->cds = cds; /* structure copy */ - data->hwnd = hwnd; - if (CreateThread(NULL, 0, agent_query_thread, data, 0, &threadid)) - return 0; - sfree(mapname); - sfree(data); - } -#endif /* * The user either passed a null callback (indicating that the -- 2.45.2