]> git.lizzy.rs Git - dragonnet.git/blob - listen.h
Bug fixes (mainly threading)
[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)(struct dragonnet_peer *, u16);
22
23         pthread_rwlock_t mu;
24 } DragonnetListener;
25
26 DragonnetListener *dragonnet_listener_new(char *addr,
27                 void (*on_connect)(DragonnetPeer *p),
28                 void (*on_recv_type)(struct dragonnet_peer *, u16));
29 void dragonnet_listener_run(DragonnetListener *l);
30 void dragonnet_listener_close(DragonnetListener *l);
31 void dragonnet_listener_delete(DragonnetListener *l);
32
33 #endif