From 85c4c48480c6f0aabcd8ccb38036392b71a05c2e Mon Sep 17 00:00:00 2001 From: Ian Moffett Date: Thu, 3 Oct 2024 21:20:33 -0500 Subject: lib: server: Add listener_clients() Add function to return a list of connected clients. Signed-off-by: Ian Moffett --- lib/include/server.h | 1 + lib/libostp/server.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/include/server.h b/lib/include/server.h index 9e09f78..52f92ce 100644 --- a/lib/include/server.h +++ b/lib/include/server.h @@ -59,5 +59,6 @@ int listener_bind(struct ostp_listener *lp); int listener_poll(struct ostp_listener *lp); void listener_cleanup(struct ostp_listener *lp); void listener_close(struct ostp_listener *lp, struct ostp_client *c); +int listener_clients(struct ostp_listener *lp, struct ostp_client **res); #endif /* !LIBOSTP_SERVER_H_ */ diff --git a/lib/libostp/server.c b/lib/libostp/server.c index c8f164b..aad91e6 100644 --- a/lib/libostp/server.c +++ b/lib/libostp/server.c @@ -199,3 +199,27 @@ listener_close(struct ostp_listener *lp, struct ostp_client *c) memset(&c->session, 0, sizeof(c->session)); --lp->client_count; } + +/* + * Get a list of clients from a listener. + * + * Returns the number of clients on success, + * on failure this function returns a less than + * zero value. + * + * @lp: Listener. + * @res: An array of clients to be set. + */ +int +listener_clients(struct ostp_listener *lp, struct ostp_client **res) +{ + if (lp->client_count == 0 || lp->client_count > MAX_CLIENTS) { + return -1; + } + + for (int i = 0; i < lp->client_count + 1; ++i) { + res[i] = &lp->clients[i]; + } + + return lp->client_count; +} -- cgit v1.2.3