diff options
Diffstat (limited to 'server/src/session.c')
-rw-r--r-- | server/src/session.c | 40 |
1 files changed, 40 insertions, 0 deletions
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; +} |