PatchworkOS
Loading...
Searching...
No Matches
local_conn.c
Go to the documentation of this file.
2
3#include <kernel/fs/sysfs.h>
6#include <kernel/net/socket.h>
8#include <kernel/sched/wait.h>
9#include <kernel/sync/lock.h>
10
11#include <stdlib.h>
12#include <sys/list.h>
13
15{
16 if (listen == NULL)
17 {
18 errno = EINVAL;
19 return NULL;
20 }
21
22 local_conn_t* conn = malloc(sizeof(local_conn_t));
23 if (conn == NULL)
24 {
25 return NULL;
26 }
27
29 if (conn->clientToServerBuffer == NULL)
30 {
31 free(conn);
32 return NULL;
33 }
34
36 if (conn->serverToClientBuffer == NULL)
37 {
39 free(conn);
40 return NULL;
41 }
42
44 list_entry_init(&conn->entry);
47 conn->listen = REF(listen);
48 conn->isClosed = false;
49 lock_init(&conn->lock);
51 return conn;
52}
53
55{
56 if (conn == NULL)
57 {
58 errno = EINVAL;
59 return;
60 }
61
62 if (conn->listen != NULL)
63 {
64 DEREF(conn->listen);
65 }
66
69 free(conn);
70}
local_conn_t * local_conn_new(local_listen_t *listen)
Allocate and initialize a new local connection.
Definition local_conn.c:14
void local_conn_free(local_conn_t *conn)
Free and deinitialize a local connection.
Definition local_conn.c:54
#define LOCAL_BUFFER_SIZE
The size of local sockets buffer.
Definition local.h:26
void wait_queue_init(wait_queue_t *waitQueue)
Initialize wait queue.
Definition wait.c:71
static void lock_init(lock_t *lock)
Initializes a lock.
Definition lock.h:80
static void ref_init(ref_t *ref, void *free)
Initialize a reference counter.
Definition ref.h:92
#define REF(ptr)
Increment reference count.
Definition ref.h:65
#define DEREF(ptr)
Decrement reference count.
Definition ref.h:80
static void ring_init(ring_t *ring, void *buffer, uint64_t size)
Initialize a ring buffer.
Definition ring.h:43
#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:184
#define NULL
Pointer error value.
Definition NULL.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
ring_t serverToClient
Definition local_conn.h:34
local_listen_t * listen
Definition local_conn.h:36
void * clientToServerBuffer
Definition local_conn.h:33
lock_t lock
Definition local_conn.h:38
ring_t clientToServer
Definition local_conn.h:32
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.