]> git.lizzy.rs Git - dragonnet.git/blobdiff - peer.h
Use inline functions
[dragonnet.git] / peer.h
diff --git a/peer.h b/peer.h
index 2f4ec6a2fcebf9134efcfb25064ff8d7598fb66f..01603755f5dd41bd9e55872d3d54c2d178d70d5c 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -1,7 +1,10 @@
 #ifndef _DRAGONNET_PEER_H_
 #define _DRAGONNET_PEER_H_
 
+#include <dragonnet/addr.h>
+#include <dragontype/number.h>
 #include <pthread.h>
+#include <stdbool.h>
 
 typedef enum {
        DRAGONNET_PEER_CREATED,
@@ -9,16 +12,22 @@ typedef enum {
        DRAGONNET_PEER_CLOSED
 } DragonnetPeerState;
 
-typedef struct {
+typedef struct dragonnet_peer {
        int sock;
-       struct addrinfo *laddr;
-       struct addrinfo *raddr;
+       DragonnetAddr laddr, raddr;
        DragonnetPeerState state;
+       pthread_t recv_thread;
 
-       pthread_rwlock_t *mu;
+       bool (*on_recv)(struct dragonnet_peer *, u16, void *);
+       void (**on_recv_type)(struct dragonnet_peer *, void *);
+
+       pthread_rwlock_t mu;
 } DragonnetPeer;
 
 DragonnetPeer *dragonnet_connect(char *addr);
+void dragonnet_peer_set_recv_hook(DragonnetPeer *p, u16 type_id,
+               void (*on_recv)(struct dragonnet_peer *, void *));
+void dragonnet_peer_run(DragonnetPeer *p);
 void dragonnet_peer_close(DragonnetPeer *p);
 void dragonnet_peer_delete(DragonnetPeer *p);