]> git.lizzy.rs Git - dragonnet.git/blob - peer.h
e2c957a630e92fe993946a1df5229359e08704ee
[dragonnet.git] / peer.h
1 #ifndef _DRAGONNET_PEER_H_
2 #define _DRAGONNET_PEER_H_
3
4 #include <dragonnet/addr.h>
5 #include <pthread.h>
6 #include <stdbool.h>
7 #include <stdint.h>
8
9 typedef enum {
10         DRAGONNET_PEER_CREATED,
11         DRAGONNET_PEER_ACTIVE,
12         DRAGONNET_PEER_CLOSED
13 } DragonnetPeerState;
14
15 typedef uint16_t DragonnetTypeId;
16
17 typedef struct dragonnet_peer {
18         int sock;
19         DragonnetAddr laddr, raddr;
20         DragonnetPeerState state;
21         pthread_t recv_thread;
22
23         bool (*on_recv)(struct dragonnet_peer *, DragonnetTypeId, void *);
24         void (**on_recv_type)(struct dragonnet_peer *, void *);
25
26         pthread_rwlock_t mu;
27 } DragonnetPeer;
28
29 DragonnetPeer *dragonnet_connect(char *addr);
30 void dragonnet_peer_set_recv_hook(DragonnetPeer *p, DragonnetTypeId type_id,
31                 void (*on_recv)(struct dragonnet_peer *, void *));
32 void dragonnet_peer_run(DragonnetPeer *p);
33 void dragonnet_peer_close(DragonnetPeer *p);
34 void dragonnet_peer_delete(DragonnetPeer *p);
35
36 #endif