return l;
}
-void dragonnet_listener_set_recv_hook(DragonnetListener *l, u16 type_id,
+void dragonnet_listener_set_recv_hook(DragonnetListener *l, DragonnetTypeId type_id,
void (*on_recv)(struct dragonnet_peer *, void *))
{
pthread_rwlock_rdlock(&l->mu);
DragonnetListener *dragonnet_listener_new(char *addr,
void (*on_connect)(DragonnetPeer *p));
-void dragonnet_listener_set_recv_hook(DragonnetListener *l, u16 type_id,
+void dragonnet_listener_set_recv_hook(DragonnetListener *l, DragonnetTypeId type_id,
void (*on_recv)(struct dragonnet_peer *, void *));
void dragonnet_listener_run(DragonnetListener *l);
void dragonnet_listener_close(DragonnetListener *l);
return p;
}
-void dragonnet_peer_set_recv_hook(DragonnetPeer *p, u16 type_id,
+void dragonnet_peer_set_recv_hook(DragonnetPeer *p, DragonnetTypeId type_id,
void (*on_recv)(struct dragonnet_peer *, void *))
{
pthread_rwlock_rdlock(&p->mu);
#define _DRAGONNET_PEER_H_
#include <dragonnet/addr.h>
-#include <dragontype/number.h>
#include <pthread.h>
#include <stdbool.h>
+#include <stdint.h>
typedef enum {
DRAGONNET_PEER_CREATED,
DRAGONNET_PEER_CLOSED
} DragonnetPeerState;
+typedef uint16_t DragonnetTypeId;
+
typedef struct dragonnet_peer {
int sock;
DragonnetAddr laddr, raddr;
DragonnetPeerState state;
pthread_t recv_thread;
- bool (*on_recv)(struct dragonnet_peer *, u16, void *);
+ bool (*on_recv)(struct dragonnet_peer *, DragonnetTypeId, 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 dragonnet_peer_set_recv_hook(DragonnetPeer *p, DragonnetTypeId type_id,
void (*on_recv)(struct dragonnet_peer *, void *));
void dragonnet_peer_run(DragonnetPeer *p);
void dragonnet_peer_close(DragonnetPeer *p);
void (*deserialize)(DragonnetPeer *, void *);
} DragonnetType;
-extern u16 dragonnet_num_types;
+extern DragonnetTypeId dragonnet_num_types;
extern DragonnetType dragonnet_types[];
void dragonnet_recv_raw(DragonnetPeer *p, void *buf, size_t n);
#include <dragonnet/peer.h>
#include <dragonnet/recv.h>
#include <dragonnet/recv_thread.h>
-#include <dragontype/number.h>
#include <pthread.h>
#include <stdbool.h>
#include <stdio.h>
pthread_rwlock_unlock(&p->mu);
while (true) {
- u16 type_id;
+ DragonnetTypeId type_id;
// Copy socket fd so that shutdown doesn't block
pthread_rwlock_rdlock(&p->mu);
type_id = be16toh(type_id);
DragonnetType type = dragonnet_types[type_id];
- u8 buf[type.siz];
+ unsigned char buf[type.siz];
type.deserialize(p, buf);
pthread_rwlock_rdlock(&p->mu);
- bool (*on_recv)(struct dragonnet_peer *, u16, void *) = p->on_recv;
+ bool (*on_recv)(struct dragonnet_peer *, DragonnetTypeId, void *) = p->on_recv;
void (*on_recv_type)(DragonnetPeer *, void *) = p->on_recv_type[type_id];
pthread_rwlock_unlock(&p->mu);