diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/include/session.h | 17 | ||||
-rw-r--r-- | server/src/session.c | 40 |
2 files changed, 57 insertions, 0 deletions
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 <session.h> +#include <util.h> +#include <stdlib.h> +#include <unistd.h> +#include <stdint.h> + +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; +} |