diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/assuan-pipe-connect.c | 30 | ||||
-rw-r--r-- | src/assuan-pipe-server.c | 4 | ||||
-rw-r--r-- | src/system-w32.c | 16 |
3 files changed, 33 insertions, 17 deletions
diff --git a/src/assuan-pipe-connect.c b/src/assuan-pipe-connect.c index a2223cd..fc56334 100644 --- a/src/assuan-pipe-connect.c +++ b/src/assuan-pipe-connect.c @@ -104,7 +104,31 @@ initial_handshake (assuan_context_t ctx) if (err) TRACE1 (ctx, ASSUAN_LOG_SYSIO, "initial_handshake", ctx, "can't connect server: %s", gpg_strerror (err)); - else if (response != ASSUAN_RESPONSE_OK) + else if (response == ASSUAN_RESPONSE_OK) + { +#ifdef HAVE_W32_SYSTEM + const char *line = ctx->inbound.line + off; + int pid = ASSUAN_INVALID_PID; + + /* Parse the message: OK ..., process %i */ + line = strchr (line, ','); + if (line) + { + line = strchr (line + 1, ' '); + if (line) + { + line = strchr (line + 1, ' '); + if (line) + pid = atoi (line + 1); + } + } + if (pid != ASSUAN_INVALID_PID) + ctx->pid = pid; +#else + ; +#endif + } + else { TRACE1 (ctx, ASSUAN_LOG_SYSIO, "initial_handshake", ctx, "can't connect server: `%s'", ctx->inbound.line); @@ -209,7 +233,11 @@ pipe_connect (assuan_context_t ctx, ctx->engine.release = _assuan_client_release; ctx->engine.readfnc = _assuan_simple_read; ctx->engine.writefnc = _assuan_simple_write; +#ifdef HAVE_W32_SYSTEM + ctx->engine.sendfd = w32_fdpass_send; +#else ctx->engine.sendfd = NULL; +#endif ctx->engine.receivefd = NULL; ctx->finish_handler = _assuan_client_finish; ctx->max_accepts = 1; diff --git a/src/assuan-pipe-server.c b/src/assuan-pipe-server.c index 03b754c..7977b83 100644 --- a/src/assuan-pipe-server.c +++ b/src/assuan-pipe-server.c @@ -118,7 +118,11 @@ assuan_init_pipe_server (assuan_context_t ctx, assuan_fd_t filedes[2]) ctx->engine.readfnc = _assuan_simple_read; ctx->engine.writefnc = _assuan_simple_write; ctx->engine.sendfd = NULL; +#ifdef HAVE_W32_SYSTEM + ctx->engine.receivefd = w32_fdpass_recv; +#else ctx->engine.receivefd = NULL; +#endif ctx->max_accepts = 1; s = getenv ("_assuan_pipe_connect_pid"); diff --git a/src/system-w32.c b/src/system-w32.c index 037a924..dfd2ba2 100644 --- a/src/system-w32.c +++ b/src/system-w32.c @@ -235,7 +235,6 @@ gpg_error_t w32_fdpass_send (assuan_context_t ctx, assuan_fd_t fd) { char fdpass_msg[256]; - size_t msglen; int res; int fd0; /* POSIX fd */ intptr_t fd_converted_to_integer; @@ -249,20 +248,6 @@ w32_fdpass_send (assuan_context_t ctx, assuan_fd_t fd) if (err) return err; -#if 0 - res = snprintf (fdpass_msg, sizeof (fdpass_msg), FDPASS_FORMAT, file_handle); - if (res < 0) - { - CloseHandle (file_handle); - return gpg_error (GPG_ERR_ASS_PARAMETER);/*FIXME: error*/ - } - - msglen = (size_t)res + 1; /* Including NUL. */ - - res = send (HANDLE2SOCKET (ctx->outbound.fd), "!", 1, MSG_OOB); - res = send (HANDLE2SOCKET (ctx->outbound.fd), fdpass_msg, msglen, 0); - return 0; -#else res = snprintf (fdpass_msg, sizeof (fdpass_msg), "SENDFD %p", file_handle); if (res < 0) { @@ -272,7 +257,6 @@ w32_fdpass_send (assuan_context_t ctx, assuan_fd_t fd) err = assuan_transact (ctx, fdpass_msg, NULL, NULL, NULL, NULL, NULL, NULL); return err; -#endif } static int |