From 017d2a33d57e45d6f24740f1a7db91eff918803b Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 12 Oct 2022 12:18:54 +0900 Subject: experiment: sendfd/recvfd on Windows, part 2/N. * src/assuan-defs.h (w32_fdpass_send): New. * src/assuan-socket-connect.c (_assuan_connect_finalize) [HAVE_W32_SYSTEM]: Use w32_fdpass_send. * src/system-w32.c (w32_fdpass_send): New. -- GnuPG-bug-id: 6236 Signed-off-by: NIIBE Yutaka --- src/assuan-defs.h | 1 + src/assuan-socket-connect.c | 4 ++++ src/system-w32.c | 15 +++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/assuan-defs.h b/src/assuan-defs.h index 47ff4ef..de2a6d4 100644 --- a/src/assuan-defs.h +++ b/src/assuan-defs.h @@ -327,6 +327,7 @@ int _assuan_error_is_eagain (assuan_context_t ctx, gpg_error_t err); #ifdef HAVE_W32_SYSTEM char *_assuan_w32_strerror (assuan_context_t ctx, int ec); +gpg_error_t w32_fdpass_send (assuan_context_t ctx, assuan_fd_t fd); #endif /*HAVE_W32_SYSTEM*/ diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c index 019a41c..d7adc31 100644 --- a/src/assuan-socket-connect.c +++ b/src/assuan-socket-connect.c @@ -115,8 +115,12 @@ _assuan_connect_finalize (assuan_context_t ctx, assuan_fd_t fd, ctx->max_accepts = -1; ctx->flags.is_socket = 1; +#ifdef HAVE_W32_SYSTEM + ctx->engine.sendfd = w32_fdpass_send; +#else if (flags & ASSUAN_SOCKET_CONNECT_FDPASSING) _assuan_init_uds_io (ctx); +#endif /* initial handshake */ { diff --git a/src/system-w32.c b/src/system-w32.c index 87b0f9e..9694481 100644 --- a/src/system-w32.c +++ b/src/system-w32.c @@ -167,6 +167,21 @@ __assuan_close (assuan_context_t ctx, assuan_fd_t fd) +gpg_error_t +w32_fdpass_send (assuan_context_t ctx, assuan_fd_t fd) +{ + char fdpass_msg[256]; + size_t msglen; + int res; + + /* not yet implemented. */ + (void)fd; + msglen = 6; + strcpy (fdpass_msg, "hello!"); + res = send (HANDLE2SOCKET (ctx->outbound.fd), fdpass_msg, msglen, MSG_OOB); + return 0; +} + static int process_fdpass_msg (const char *fdpass_msg, size_t msglen, assuan_fd_t *r_fd) { -- cgit v1.2.3