#include <dragonnet/addr.h>
#include <dragontype/number.h>
#include <pthread.h>
+#include <stdbool.h>
typedef enum {
DRAGONNET_PEER_CREATED,
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;
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);
}