]> git.lizzy.rs Git - dragonnet.git/blobdiff - listen.h
Add wildcard receive hook
[dragonnet.git] / listen.h
index 249119c3cf64c124d66198190f9b00db6bb25187..2ecbc8905d09c0124bf37838a37e400dce642db4 100644 (file)
--- a/listen.h
+++ b/listen.h
@@ -1,10 +1,9 @@
 #ifndef _DRAGONNET_LISTEN_H_
 #define _DRAGONNET_LISTEN_H_
 
+#include <dragonnet/peer.h>
 #include <stdbool.h>
 
-#include "peer.h"
-
 typedef enum {
        DRAGONNET_LISTENER_CREATED,
        DRAGONNET_LISTENER_ACTIVE,
@@ -13,14 +12,20 @@ typedef enum {
 
 typedef struct {
        int sock;
-       struct addrinfo *laddr;
-       void (*on_connect)(DragonnetPeer *p);
+       DragonnetAddr laddr;
        DragonnetListenerState state;
+       pthread_t accept_thread;
+
+       void (*on_connect)(DragonnetPeer *);
+       void (**on_recv_type)(DragonnetPeer *, void *);
 
-       pthread_rwlock_t *mu;
+       pthread_rwlock_t mu;
 } DragonnetListener;
 
-DragonnetListener *dragonnet_listener_new(char *addr, void (*on_connect)(DragonnetPeer *p));
+DragonnetListener *dragonnet_listener_new(char *addr,
+               void (*on_connect)(DragonnetPeer *p));
+void dragonnet_listener_set_recv_hook(DragonnetListener *l, u16 type_id,
+               void (*on_recv)(struct dragonnet_peer *, void *));
 void dragonnet_listener_run(DragonnetListener *l);
 void dragonnet_listener_close(DragonnetListener *l);
 void dragonnet_listener_delete(DragonnetListener *l);