summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2023-06-13 23:49:08 -0500
committerDanny Holman <dholman@gymli.org>2023-06-13 23:49:08 -0500
commit75bd5299b88de67754572e21c408c247db5d3c9b (patch)
tree7eb287de5cc922da4948198bd71b1478722b0de2 /server
parentac63c0965a7f23ba0cc74688c7e1fc0cde4b654d (diff)
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 <dholman@gymli.org>
Diffstat (limited to 'server')
-rw-r--r--server/include/session.h8
-rw-r--r--server/src/session.c27
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 <mini-rat.h>
+#include <list.h>
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 <session.h>
-#include <stdlib.h>
-#include <unistd.h>
+#include <server.h>
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) {