mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-09 09:27:59 +00:00
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.
This commit is contained in:
parent
35d6c97dd7
commit
f864265e39
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user