[Pkg-gnupg-commit] [libassuan] 355/437: Added assuan_socket_connect_fd() to attach an existing socket file descriptor to a context.
Eric Dorland
eric at moszumanska.debian.org
Fri May 22 05:34:03 UTC 2015
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository libassuan.
commit 5666ade7de25239a36afe0f279b46a0deff1a867
Author: bjk at luxsci.net <bjk at luxsci.net>
Date: Sun Mar 6 16:18:45 2011 -0500
Added assuan_socket_connect_fd() to attach an existing socket file descriptor to a context.
---
src/ChangeLog | 6 +++
src/assuan-socket-connect.c | 98 +++++++++++++++++++++++++++++----------------
src/assuan.h.in | 4 ++
src/libassuan.def | 1 +
src/libassuan.vers | 1 +
5 files changed, 76 insertions(+), 34 deletions(-)
diff --git a/src/ChangeLog b/src/ChangeLog
index 5568549..0ba2a2c 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2011-03-06 Ben Kibbey <bjk at luxsci.net>
+
+ * assuan-socket-connect.c (assuan_socket_connect_fd): Finalize a
+ context connection from an already connected socket descriptor.
+ * assuan.h.in (assuan_socket_connect_fd): New prototype.
+
2011-03-05 Ben Kibbey <bjk at luxsci.net>
* assuan-handler.c (assuan_register_command): Let an existing command
diff --git a/src/assuan-socket-connect.c b/src/assuan-socket-connect.c
index fa3db4b..cb8f9d0 100644
--- a/src/assuan-socket-connect.c
+++ b/src/assuan-socket-connect.c
@@ -97,6 +97,69 @@ parse_portno (const char *str, uint16_t *r_port)
}
+static gpg_error_t
+_assuan_connect_finalize(assuan_context_t ctx, int fd, unsigned int flags)
+{
+ gpg_error_t err;
+
+ ctx->engine.release = _assuan_client_release;
+ ctx->engine.readfnc = _assuan_simple_read;
+ ctx->engine.writefnc = _assuan_simple_write;
+ ctx->engine.sendfd = NULL;
+ ctx->engine.receivefd = NULL;
+ ctx->finish_handler = _assuan_client_finish;
+ ctx->inbound.fd = fd;
+ ctx->outbound.fd = fd;
+ ctx->max_accepts = -1;
+
+ if (flags & ASSUAN_SOCKET_CONNECT_FDPASSING)
+ _assuan_init_uds_io (ctx);
+
+ /* initial handshake */
+ {
+ assuan_response_t response;
+ int off;
+
+ err = _assuan_read_from_server (ctx, &response, &off, 0);
+ if (err)
+ TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
+ "can't connect to server: %s\n", gpg_strerror (err));
+ else if (response != ASSUAN_RESPONSE_OK)
+ {
+ char *sname = _assuan_encode_c_string (ctx, ctx->inbound.line);
+ if (sname)
+ {
+ TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
+ "can't connect to server: %s", sname);
+ _assuan_free (ctx, sname);
+ }
+ err = _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
+ }
+ }
+
+ return err;
+}
+
+
+/* Attach an existing connected file descriptor FD to an allocated handle CTX
+ * and initialize the connection.
+ */
+gpg_error_t
+assuan_socket_connect_fd (assuan_context_t ctx, int fd, unsigned int flags)
+{
+ gpg_error_t err;
+
+ if (!ctx || fd < 0)
+ return GPG_ERR_INV_ARG;
+
+ err = _assuan_connect_finalize(ctx, fd, flags);
+
+ if (err)
+ _assuan_reset (ctx);
+
+ return err;
+}
+
/* Make a connection to the Unix domain socket NAME and return a new
Assuan context in CTX. SERVER_PID is currently not used but may
@@ -268,41 +331,8 @@ assuan_socket_connect (assuan_context_t ctx, const char *name,
return _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
}
- ctx->engine.release = _assuan_client_release;
- ctx->engine.readfnc = _assuan_simple_read;
- ctx->engine.writefnc = _assuan_simple_write;
- ctx->engine.sendfd = NULL;
- ctx->engine.receivefd = NULL;
- ctx->finish_handler = _assuan_client_finish;
- ctx->inbound.fd = fd;
- ctx->outbound.fd = fd;
- ctx->max_accepts = -1;
+ err = _assuan_connect_finalize(ctx, fd, flags);
- if (flags & ASSUAN_SOCKET_CONNECT_FDPASSING)
- _assuan_init_uds_io (ctx);
-
- /* initial handshake */
- {
- assuan_response_t response;
- int off;
-
- err = _assuan_read_from_server (ctx, &response, &off, 0);
- if (err)
- TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
- "can't connect to server: %s\n", gpg_strerror (err));
- else if (response != ASSUAN_RESPONSE_OK)
- {
- char *sname = _assuan_encode_c_string (ctx, ctx->inbound.line);
- if (sname)
- {
- TRACE1 (ctx, ASSUAN_LOG_SYSIO, "assuan_socket_connect", ctx,
- "can't connect to server: %s", sname);
- _assuan_free (ctx, sname);
- }
- err = _assuan_error (ctx, GPG_ERR_ASS_CONNECT_FAILED);
- }
- }
-
if (err)
_assuan_reset (ctx);
diff --git a/src/assuan.h.in b/src/assuan.h.in
index 426fc4c..9ff263f 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -358,6 +358,10 @@ gpg_error_t assuan_pipe_connect (assuan_context_t ctx,
gpg_error_t assuan_socket_connect (assuan_context_t ctx, const char *name,
pid_t server_pid, unsigned int flags);
+/*-- assuan-socket-connect.c --*/
+gpg_error_t assuan_socket_connect_fd (assuan_context_t ctx, int fd,
+ unsigned int flags);
+
/*-- context.c --*/
pid_t assuan_get_pid (assuan_context_t ctx);
struct _assuan_peercred
diff --git a/src/libassuan.def b/src/libassuan.def
index 575966d..9287486 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -104,6 +104,7 @@ EXPORTS
__assuan_socket @83
__assuan_connect @84
assuan_register_pre_cmd_notify @85
+ assuan_socket_connect_fd @86
; END
diff --git a/src/libassuan.vers b/src/libassuan.vers
index 6311ff1..8126fab 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -99,6 +99,7 @@ LIBASSUAN_1.0 {
assuan_write_line;
assuan_write_status;
assuan_free;
+ assuan_socket_connect_fd;
__assuan_close;
__assuan_pipe;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/libassuan.git
More information about the Pkg-gnupg-commit
mailing list