PatchworkOS  19e446b
A non-POSIX operating system.
Loading...
Searching...
No Matches
local_conn.c
Go to the documentation of this file.
1#include "local_conn.h"
2#include "local.h"
3#include "local_listen.h"
4
5#include <kernel/fs/devfs.h>
6#include <kernel/sched/wait.h>
7#include <kernel/sync/lock.h>
8
9#include <stdlib.h>
10#include <sys/list.h>
11
13{
14 if (listen == NULL)
15 {
16 errno = EINVAL;
17 return NULL;
18 }
19
20 local_conn_t* conn = malloc(sizeof(local_conn_t));
21 if (conn == NULL)
22 {
23 return NULL;
24 }
25
27 if (conn->clientToServerBuffer == NULL)
28 {
29 free(conn);
30 return NULL;
31 }
32
34 if (conn->serverToClientBuffer == NULL)
35 {
37 free(conn);
38 return NULL;
39 }
40
42 list_entry_init(&conn->entry);
45 conn->listen = REF(listen);
46 conn->isClosed = false;
47 lock_init(&conn->lock);
49 return conn;
50}
51
53{
54 if (conn == NULL)
55 {
56 errno = EINVAL;
57 return;
58 }
59
60 if (conn->listen != NULL)
61 {
62 UNREF(conn->listen);
63 }
64
67 free(conn);
68}
void wait_queue_init(wait_queue_t *queue)
Initialize wait queue.
Definition wait.c:51
static void lock_init(lock_t *lock)
Initializes a lock.
Definition lock.h:79
static void fifo_init(fifo_t *fifo, uint8_t *buffer, size_t size)
Initialize a fifo buffer.
Definition fifo.h:54
#define REF(ptr)
Increment reference count.
Definition ref.h:82
static void ref_init(ref_t *ref, void *callback)
Initialize a reference counter.
Definition ref.h:130
#define UNREF(ptr)
Decrement reference count.
Definition ref.h:109
#define EINVAL
Invalid argument.
Definition errno.h:142
#define errno
Error number variable.
Definition errno.h:27
static void list_entry_init(list_entry_t *entry)
Initializes a list entry.
Definition list.h:173
#define NULL
Pointer error value.
Definition NULL.h:25
local_conn_t * local_conn_new(local_listen_t *listen)
Allocate and initialize a new local connection.
Definition local_conn.c:12
void local_conn_free(local_conn_t *conn)
Free and deinitialize a local connection.
Definition local_conn.c:52
#define LOCAL_BUFFER_SIZE
The size of local sockets buffer.
Definition local.h:23
_PUBLIC void * malloc(size_t size)
Definition malloc.c:5
_PUBLIC void free(void *ptr)
Definition free.c:11
Local Connection structure.
Definition local_conn.h:29
local_listen_t * listen
Definition local_conn.h:36
void * clientToServerBuffer
Definition local_conn.h:33
fifo_t clientToServer
Definition local_conn.h:32
lock_t lock
Definition local_conn.h:38
fifo_t serverToClient
Definition local_conn.h:34
wait_queue_t waitQueue
Definition local_conn.h:39
void * serverToClientBuffer
Definition local_conn.h:35
list_entry_t entry
Definition local_conn.h:31
Local Listener structure.