From e115c6549b213c5d45f375f5bf118ea0442db592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 21 Apr 2022 23:02:04 +0200 Subject: [PATCH] eis: Add API to add client getting an fd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates the socket and adds it; is intended to be used to create client connections that are passed via a secure channel, e.g. via portals. Signed-off-by: Jonas Ã…dahl --- src/libeis-fd.c | 21 +++++++++++++++++++++ src/libeis.h | 11 ++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/libeis-fd.c b/src/libeis-fd.c index 5d97764..8ca2e39 100644 --- a/src/libeis-fd.c +++ b/src/libeis-fd.c @@ -86,3 +86,24 @@ eis_backend_fd_add_fd(struct eis *eis, int fd) return 0; } + +_public_ int +eis_backend_fd_add_client(struct eis *eis) +{ + assert(eis); + assert(eis->backend); + + int fds[2]; + + int rc = socketpair(AF_UNIX, SOCK_STREAM|SOCK_NONBLOCK|SOCK_CLOEXEC, 0, fds); + if (rc == -1) + return -errno; + + struct eis_client *client = eis_client_new(eis, fds[0]); + if (client == NULL) + return -ENOMEM; + + eis_client_unref(client); + + return fds[1]; +} diff --git a/src/libeis.h b/src/libeis.h index dbeeb37..848c608 100644 --- a/src/libeis.h +++ b/src/libeis.h @@ -403,11 +403,20 @@ int eis_setup_backend_fd(struct eis *ctx); /** - * Add a new client to a context set up with eis_setup_backend_fd() + * Add a new client given a file descriptor to a context set up with + * eis_setup_backend_fd() */ int eis_backend_fd_add_fd(struct eis *ctx, int fd); +/** + * Add a new client to a context set up with eis_setup_backend_fd(). Returns + * a file descriptor to be passed to ei_setup_backend_fd(), or a negative + * errno on failure. + */ +int +eis_backend_fd_add_client(struct eis *ctx); + /** * libeis keeps a single file descriptor for all events. This fd should be * monitored for events by the caller's mainloop, e.g. using select(). When