diff options
author | Ian Moffett <ian@osmora.org> | 2024-10-03 21:20:33 -0500 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-10-03 21:20:33 -0500 |
commit | 85c4c48480c6f0aabcd8ccb38036392b71a05c2e (patch) | |
tree | e76bacb0eb78b5c7a8a20e5c47110f3f7b2aea01 | |
parent | fe5120087d24cdd07ef65d85f60eb11f4ae12cf2 (diff) |
lib: server: Add listener_clients()
Add function to return a list of connected clients.
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r-- | lib/include/server.h | 1 | ||||
-rw-r--r-- | lib/libostp/server.c | 24 |
2 files changed, 25 insertions, 0 deletions
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; +} |