From b0d2f44bec5fd6a407d0fe2ea94fc2ae06176c5e Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 22 Jan 2022 17:56:12 +0100 Subject: [PATCH] Add wildcard receive hook --- peer.h | 2 ++ recv_thread.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/peer.h b/peer.h index 3f52fd0..0160375 100644 --- a/peer.h +++ b/peer.h @@ -4,6 +4,7 @@ #include #include #include +#include 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; diff --git a/recv_thread.c b/recv_thread.c index 437105e..520e9a0 100644 --- a/recv_thread.c +++ b/recv_thread.c @@ -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); } -- 2.44.0