summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2022-10-12 12:18:54 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2022-10-12 12:18:54 +0900
commit017d2a33d57e45d6f24740f1a7db91eff918803b (patch)
treed2a21310f93da85993295be65d98684fe87ee5d9
parent29950e3387ecdaadbd61727e74abc3e79e575852 (diff)
downloadlibassuan-017d2a33d57e45d6f24740f1a7db91eff918803b.tar.gz
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 <gniibe@fsij.org>
-rw-r--r--src/assuan-defs.h1
-rw-r--r--src/assuan-socket-connect.c4
-rw-r--r--src/system-w32.c15
3 files changed, 20 insertions, 0 deletions
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)
{