From 75bd5299b88de67754572e21c408c247db5d3c9b Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Tue, 13 Jun 2023 23:49:08 -0500 Subject: server: session: make read and write functions uniform Make the functions that relay data to and from session sockets be uniform in function and arguments. Signed-off-by: Danny Holman --- server/include/session.h | 8 +++++--- server/src/session.c | 27 +++++++++++++++++++-------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/server/include/session.h b/server/include/session.h index 5032a3a..5b371ec 100644 --- a/server/include/session.h +++ b/server/include/session.h @@ -1,7 +1,8 @@ #ifndef MRAT_SESSION_H #define MRAT_SESSION_H -#include "list.h" +#include +#include struct session { int id; @@ -12,8 +13,9 @@ struct session { int init_session(int socket); struct session* find_session(int id); -int write_session(int id, const char *data, size_t size); -size_t read_session(int id, char *data, size_t size); +ssize_t write_session(int id, char *buffer, size_t sz); +ssize_t read_session(int id, char *buffer, size_t sz); +void kill_session(int id); int num_alive_sessions(void); #endif diff --git a/server/src/session.c b/server/src/session.c index 70a1cf1..3dcdfa6 100644 --- a/server/src/session.c +++ b/server/src/session.c @@ -1,6 +1,5 @@ #include -#include -#include +#include struct list_head sessions; int next_id = 1; @@ -23,22 +22,34 @@ struct session* find_session(int id) { while (temp != NULL) { ses = (struct session*)container_of(temp, struct session, list); if (ses->id == id) - break; + return ses; temp = temp->next; } - return ses; + return NULL; } -int write_session(int id, const char *data, size_t size) { +ssize_t write_session(int id, char *buffer, size_t sz) { struct session *ses = find_session(id); - return write(ses->socket, data, size); + if (ses == NULL) + return -1; + + return send(ses->socket, buffer, sz, 0); } -size_t read_session(int id, char *data, size_t size) { +ssize_t read_session(int id, char *buffer, size_t sz) { struct session *ses = find_session(id); if (ses == NULL) return -1; - return read(ses->socket, data, size); + + return recv(ses->socket, buffer, sz, 0); +} + +void kill_session(int id) { + struct session *s = find_session(id); + s->alive = 0; + list_del(&s->list); + close(s->socket); + free(s); } int num_alive_sessions(void) { -- cgit v1.2.3