]> git.lizzy.rs Git - dragonnet.git/commitdiff
Add wildcard receive hook
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 22 Jan 2022 16:56:12 +0000 (17:56 +0100)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 22 Jan 2022 16:56:12 +0000 (17:56 +0100)
peer.h
recv_thread.c

diff --git a/peer.h b/peer.h
index 3f52fd021681f007ac251a37d5608f0c312c4a18..01603755f5dd41bd9e55872d3d54c2d178d70d5c 100644 (file)
--- a/peer.h
+++ b/peer.h
@@ -4,6 +4,7 @@
 #include <dragonnet/addr.h>
 #include <dragontype/number.h>
 #include <pthread.h>
+#include <stdbool.h>
 
 typedef enum {
        DRAGONNET_PEER_CREATED,
@@ -17,6 +18,7 @@ typedef struct dragonnet_peer {
        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;
index 437105ee6492d4f5ab2263b4d7e9ec479e2d05f1..520e9a0948d561a7ebd4a0bffe850bcbecdf5ea8 100644 (file)
@@ -50,9 +50,13 @@ void *dragonnet_peer_recv_thread(void *g_peer)
                type.deserialize(p, buf);
 
                pthread_rwlock_rdlock(&p->mu);
+               bool (*on_recv)(struct dragonnet_peer *, u16, void *) = p->on_recv;
                void (*on_recv_type)(DragonnetPeer *, void *) = p->on_recv_type[type_id];
                pthread_rwlock_unlock(&p->mu);
 
+               if (on_recv != NULL && !on_recv(p, type, buf))
+                       on_recv_type = NULL;
+
                if (on_recv_type != NULL)
                        on_recv_type(p, buf);
        }