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 Blob blob = ping->compr_blob->blob;
22 printf("PingPacket siz: 0x%08x\n", blob->siz);
23 printf("PingPacket compr_siz: 0x%08x\n", ping->compr_blob->siz);
24 printf("PingPacket data: 0x%02x%02x\n", blob->data[0], blob->data[1]);
29 dragonnet_peer_send_PongPacket(p, &(PongPacket) {
31 .num_array = {0xd, 0xba}
34 dragonnet_listener_close(l);
35 dragonnet_listener_delete(l);
38 dragonnet_peer_close(p);
39 dragonnet_peer_delete(p);
42 static void handle_pongpacket(DragonnetPeer *p, PongPacket *pong)
44 printf("PongPacket number: 0x%08x\n", pong->number);
45 printf("PongPacket num_array[0]: 0x%02x\n", pong->num_array[0]);
46 printf("PongPacket num_array[1]: 0x%02x\n", pong->num_array[1]);
48 dragonnet_peer_close(p);
49 dragonnet_peer_delete(p);
52 static void *srv_func(__attribute((unused)) void *unused)
54 l = dragonnet_listener_new("[::1]:50000", &connect_func);
57 dragonnet_listener_set_recv_hook(l, DRAGONNET_TYPE_PINGPACKET,
58 (void (*)(DragonnetPeer *, void *)) &handle_pingpacket);
59 dragonnet_listener_run(l);
63 static void *clt_func(__attribute((unused)) void *unused)
67 DragonnetPeer *p = dragonnet_connect("[::1]:50000");
70 dragonnet_peer_set_recv_hook(p, DRAGONNET_TYPE_PONGPACKET,
71 (void (*)(DragonnetPeer *, void *)) &handle_pongpacket);
72 dragonnet_peer_run(p);
74 CompressedBlob compr_blob = malloc(sizeof *compr_blob);
75 compr_blob->blob = malloc(sizeof *compr_blob->blob);
76 compr_blob->blob->siz = 2;
77 compr_blob->blob->data = (u8 *) "\x0d\xba";
79 dragonnet_peer_send_PingPacket(p, &(PingPacket) {
80 .compr_blob = compr_blob
83 free(compr_blob->blob);
88 int main(__attribute((unused)) int argc, __attribute((unused)) char **argv)
90 pthread_t srv_thread, clt_thread;
91 pthread_create(&srv_thread, NULL, &srv_func, NULL);
92 pthread_create(&clt_thread, NULL, &clt_func, NULL);
94 pthread_join(clt_thread, NULL);
95 pthread_join(srv_thread, NULL);