From a67f97b904c64b21381347299d095006f48e8bce Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Wed, 4 Jan 2023 00:39:25 -0600 Subject: server: add functions for session management Add functions to initialize and control individual sessions. Signed-off-by: Danny Holman --- server/include/session.h | 17 +++++++++++++++++ server/src/session.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 server/include/session.h create mode 100644 server/src/session.c diff --git a/server/include/session.h b/server/include/session.h new file mode 100644 index 0000000..2de8293 --- /dev/null +++ b/server/include/session.h @@ -0,0 +1,17 @@ +#ifndef MRAT_SESSION_H +#define MRAT_SESSION_H + +#include "list.h" + +struct session { + int id; + int socket; + struct list_head list; +}; + +int init_session(int socket); +struct session* find_session(int id); +void write_session(int id, const char *data, size_t size); +size_t read_session(int id, char *data, size_t size); + +#endif diff --git a/server/src/session.c b/server/src/session.c new file mode 100644 index 0000000..b2b760c --- /dev/null +++ b/server/src/session.c @@ -0,0 +1,40 @@ +#include +#include +#include +#include +#include + +struct list_head sessions; +uint16_t next_id = 1; + +int init_session(int socket) { + struct session *ses = malloc(sizeof(struct session)); + ses->id = next_id; + next_id++; + ses->socket = socket; + list_add(&ses->list, &sessions); + return ses->id; +} + +struct session* find_session(int id) { + struct list_head *temp = sessions.next; + struct session *ses = NULL; + while (temp != NULL) { + ses = (struct session*)container_of(temp, struct session, list); + if (ses->id == id) + break; + temp = temp->next; + } + return ses; +} + +void write_session(int id, const char *data, size_t size) { + struct session *ses = find_session(id); + write(ses->socket, data, size); +} + +size_t read_session(int id, char *data, size_t size) { + struct session *ses = find_session(id); + size_t bytes = read(ses->socket, data, size); + return bytes; +} -- cgit v1.2.3