]> git.lizzy.rs Git - dragonnet.git/blob - listen.h
Add wildcard receive hook
[dragonnet.git] / listen.h
1 #ifndef _DRAGONNET_LISTEN_H_
2 #define _DRAGONNET_LISTEN_H_
3
4 #include <dragonnet/peer.h>
5 #include <stdbool.h>
6
7 typedef enum {
8         DRAGONNET_LISTENER_CREATED,
9         DRAGONNET_LISTENER_ACTIVE,
10         DRAGONNET_LISTENER_CLOSED
11 } DragonnetListenerState;
12
13 typedef struct {
14         int sock;
15         DragonnetAddr laddr;
16         DragonnetListenerState state;
17         pthread_t accept_thread;
18
19         void (*on_connect)(DragonnetPeer *);
20         void (**on_recv_type)(DragonnetPeer *, void *);
21
22         pthread_rwlock_t mu;
23 } DragonnetListener;
24
25 DragonnetListener *dragonnet_listener_new(char *addr,
26                 void (*on_connect)(DragonnetPeer *p));
27 void dragonnet_listener_set_recv_hook(DragonnetListener *l, u16 type_id,
28                 void (*on_recv)(struct dragonnet_peer *, void *));
29 void dragonnet_listener_run(DragonnetListener *l);
30 void dragonnet_listener_close(DragonnetListener *l);
31 void dragonnet_listener_delete(DragonnetListener *l);
32
33 #endif