28a1cae1cd4c67469f5965cd4562975a1a2aa7bb
[barrelfish] / include / net_sockets / net_sockets.h
1 #ifndef NET_SOCKETS_H
2 #define NET_SOCKETS_H
3
4 #include <net_sockets/net_sockets_types.h>
5
6 void * net_alloc(size_t size);
7 void net_free(void *buffer);
8
9 struct net_socket {
10     uint32_t descriptor;
11     bool is_closing;
12     net_received_callback_t received;
13     net_sent_callback_t sent;
14     net_connected_callback_t connected;
15     net_accepted_callback_t accepted;
16     net_closed_callback_t closed;
17     void *user_state;
18
19     struct in_addr bound_address;
20     uint16_t bound_port;
21     struct in_addr connected_address;
22     uint16_t connected_port;
23
24     struct net_socket *prev, *next;
25 };
26
27 struct net_socket * net_udp_socket(void);
28 struct net_socket * net_tcp_socket(void);
29 void net_set_user_state(struct net_socket *socket, void *user_state);
30 void net_close(struct net_socket *socket);
31
32 errval_t net_bind(struct net_socket *socket, struct in_addr ip_address, uint16_t port);
33 errval_t net_listen(struct net_socket *socket, uint8_t backlog);
34 errval_t net_print_log(void);
35
36 // data must be allocated using net_alloc, it can be freed, when on_sent is called (i.e. actually sent)
37 errval_t net_send(struct net_socket *socket, void *data, size_t size);
38 errval_t net_send_to(struct net_socket *socket, void *data, size_t size, struct in_addr ip_address, uint16_t port);
39
40 errval_t net_connect(struct net_socket *socket, struct in_addr ip_address, uint16_t port, net_connected_callback_t cb);
41
42 void net_set_on_received(struct net_socket *socket, net_received_callback_t cb);
43 void net_set_on_sent(struct net_socket *socket, net_sent_callback_t cb);
44 void net_set_on_accepted(struct net_socket *socket, net_accepted_callback_t cb);
45 void net_set_on_closed(struct net_socket *socket, net_closed_callback_t cb);
46
47
48 errval_t net_sockets_init(void);
49
50 #endif