From e31de8226f81ac0d38666423f60ea4754da1b874 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Tue, 5 May 2020 18:18:36 +0100 Subject: [PATCH] lib/client.[ch]: Add functions for reading the connection endpoint addresses. Organization: Straylight/Edgeware From: Mark Wooding Nothing uses these yet. --- lib/client.c | 18 ++++++++++++++++++ lib/client.h | 4 ++++ 2 files changed, 22 insertions(+) diff --git a/lib/client.c b/lib/client.c index 0fab347..fdf0abe 100644 --- a/lib/client.c +++ b/lib/client.c @@ -119,6 +119,24 @@ int disorder_client_af(disorder_client *c) { return c->family; } +/** @brief Determine the local socket address of this client */ +int disorder_client_sockname(disorder_client *c, + struct sockaddr *sa, socklen_t *len_inout) { + int rc; + if((rc = getsockname(c->sio.sd, sa, len_inout))) + disorder_error(errno, "failed to read client socket name"); + return rc; +} + +/** @brief Determine the remote peer address for this client */ +int disorder_client_peername(disorder_client *c, + struct sockaddr *sa, socklen_t *len_inout) { + int rc; + if((rc = getpeername(c->sio.sd, sa, len_inout))) + disorder_error(errno, "failed to read client socket name"); + return rc; +} + /** @brief Read a response line * @param c Client * @param rp Where to store response, or NULL (UTF-8) diff --git a/lib/client.h b/lib/client.h index c443f7e..5d44622 100644 --- a/lib/client.h +++ b/lib/client.h @@ -41,6 +41,10 @@ struct sink; disorder_client *disorder_new(int verbose); void disorder_force_unpriv(disorder_client *c); int disorder_client_af(disorder_client *c); +int disorder_client_sockname(disorder_client *c, + struct sockaddr *sa, socklen_t *len_inout); +int disorder_client_peername(disorder_client *c, + struct sockaddr *sa, socklen_t *len_inout); int disorder_connect(disorder_client *c); int disorder_connect_user(disorder_client *c, const char *username, -- [mdw]