6 #include "deps/dragonnet/listen.h"
7 #include "dnet-types.h"
9 static DragonnetListener *l;
11 static void connect_func(DragonnetPeer *p)
13 char *str_addr = dragonnet_addr_str(p->raddr);
14 printf("new connection from %s\n", str_addr);
18 static void handle_pingpacket(DragonnetPeer *p, PingPacket *ping)
20 printf("PingPacket siz: 0x%08x\n", ping->compr_blob->siz);
21 printf("PingPacket compr_siz: 0x%08x\n", ping->compr_blob->compr_siz);
22 printf("PingPacket data: 0x%02x%02x\n", ping->compr_blob->data[0], ping->compr_blob->data[1]);
23 free(ping->compr_blob->data);
25 dragonnet_peer_send_PongPacket(p, &(PongPacket) {
29 dragonnet_listener_close(l);
30 dragonnet_listener_delete(l);
33 dragonnet_peer_close(p);
34 dragonnet_peer_delete(p);
37 static void handle_pongpacket(DragonnetPeer *p, PongPacket *pong)
39 printf("PongPacket number: 0x%08x\n", pong->number);
41 dragonnet_peer_close(p);
42 dragonnet_peer_delete(p);
45 static void *srv_func(__attribute((unused)) void *unused)
47 l = dragonnet_listener_new("[::1]:50000", &connect_func);
50 dragonnet_listener_set_recv_hook(l, DRAGONNET_TYPE_PINGPACKET,
51 (void (*)(DragonnetPeer *, void *)) &handle_pingpacket);
52 dragonnet_listener_run(l);
56 static void *clt_func(__attribute((unused)) void *unused)
60 DragonnetPeer *p = dragonnet_connect("[::1]:50000");
63 dragonnet_peer_set_recv_hook(p, DRAGONNET_TYPE_PONGPACKET,
64 (void (*)(DragonnetPeer *, void *)) &handle_pongpacket);
65 dragonnet_peer_run(p);
67 CompressedBlob blob = malloc(sizeof *blob);
69 blob->data = (u8 *) "\x0d\xba";
71 dragonnet_peer_send_PingPacket(p, &(PingPacket) {
79 int main(__attribute((unused)) int argc, __attribute((unused)) char **argv)
81 pthread_t srv_thread, clt_thread;
82 pthread_create(&srv_thread, NULL, &srv_func, NULL);
83 pthread_create(&clt_thread, NULL, &clt_func, NULL);
85 pthread_join(clt_thread, NULL);
86 pthread_join(srv_thread, NULL);