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