summaryrefslogtreecommitdiff
path: root/kernel/queue.c
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2024-04-29 15:50:32 +0200
committerAnton Kling <anton@kling.gg>2024-04-29 15:50:32 +0200
commitd60fa1fc01e600c4a163bbe82fab3f1986cb1476 (patch)
tree01358975cf35954f87466b805e603ebe9d5b13e6 /kernel/queue.c
parent528031e0e4c17f12b88f6773d31c7a56bf92b956 (diff)
Kernel/TCP: Increment seq number after sending SYN|ACK
Diffstat (limited to 'kernel/queue.c')
-rw-r--r--kernel/queue.c85
1 files changed, 0 insertions, 85 deletions
diff --git a/kernel/queue.c b/kernel/queue.c
deleted file mode 100644
index 43b2400..0000000
--- a/kernel/queue.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <assert.h>
-#include <kmalloc.h>
-#include <queue.h>
-#include <sched/scheduler.h>
-#include <socket.h>
-#include <stdio.h>
-
-int queue_create(u32 *id, process_t *p) {
- struct event_queue *q = kcalloc(1, sizeof(struct event_queue));
- q->wait = 0;
- q->p = p;
- list_init(&q->events);
-
- struct list *list = &current_task->event_queue;
- list_add(list, q, id);
- return 1;
-}
-
-struct event_queue *get_event_queue(u32 id) {
- const struct list *list = &current_task->event_queue;
- struct event_queue *q;
- if (!list_get(list, id, (void **)&q)) {
- return NULL;
- }
- return q;
-}
-
-int queue_add(u32 queue_id, struct event *ev, u32 size) {
- struct event_queue *q = get_event_queue(queue_id);
- if (!q) {
- return 0;
- }
- for (u32 i = 0; i < size; i++) {
- // TODO: Should it be a copy or could it be kept in userland to
- // improve performance?
- struct event *new_ev = kmalloc(sizeof(struct event));
- memcpy(new_ev, ev, sizeof(struct event));
- list_add(&q->events, new_ev, NULL);
- }
- return 1;
-}
-
-int queue_should_block(struct event_queue *q, int *is_empty) {
- if (!q->wait) {
- return 0;
- }
- *is_empty = 1;
- for (int i = 0;; i++) {
- struct event *ev;
- if (!list_get(&q->events, i, (void **)&ev)) {
- break;
- }
- *is_empty = 0;
- if (EVENT_TYPE_FD == ev->type) {
- vfs_fd_t *fd = get_vfs_fd(ev->internal_id, q->p);
- if (!fd) {
- kprintf("queue: Invalid fd given\n");
- continue;
- }
- if (fd->inode->_has_data) {
- if (fd->inode->_has_data(fd->inode)) {
- return 0;
- }
- }
- } else if (EVENT_TYPE_TCP_SOCKET == ev->type) {
- struct TcpConnection *con = tcp_get_connection(ev->internal_id, q->p);
- assert(con);
- if (!ringbuffer_isempty(&con->buffer)) {
- return 0;
- }
- }
- }
- return 1;
-}
-
-int queue_wait(u32 queue_id) {
- struct event_queue *q = get_event_queue(queue_id);
- if (!q) {
- return 0;
- }
- q->wait = 1;
- switch_task();
- q->wait = 0;
- return 1;
-}