]> git.lizzy.rs Git - dragonnet.git/blobdiff - peer.h
Implement deallocators
[dragonnet.git] / peer.h
diff --git a/peer.h b/peer.h
index 80e5a9518a294546eab64928824df60349053447..01603755f5dd41bd9e55872d3d54c2d178d70d5c 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -1,9 +1,10 @@
 #ifndef _DRAGONNET_PEER_H_
 #define _DRAGONNET_PEER_H_
 
+#include <dragonnet/addr.h>
+#include <dragontype/number.h>
 #include <pthread.h>
-
-#include "addr.h"
+#include <stdbool.h>
 
 typedef enum {
        DRAGONNET_PEER_CREATED,
@@ -11,15 +12,21 @@ typedef enum {
        DRAGONNET_PEER_CLOSED
 } DragonnetPeerState;
 
-typedef struct {
+typedef struct dragonnet_peer {
        int sock;
        DragonnetAddr laddr, raddr;
        DragonnetPeerState state;
+       pthread_t recv_thread;
+
+       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);