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},
38 dragonnet_listener_close(l);
39 dragonnet_listener_delete(l);
42 dragonnet_peer_close(p);
43 dragonnet_peer_delete(p);
46 static void handle_pongpacket(DragonnetPeer *p, PongPacket *pong)
48 printf("PongPacket number: 0x%08x\n", pong->number);
49 printf("PongPacket num_array[0]: 0x%02x\n", pong->num_array[0]);
50 printf("PongPacket num_array[1]: 0x%02x\n", pong->num_array[1]);
51 printf("PongPacket nested_array[0][0]: 0x%02x\n", pong->nested_array[0][0]);
52 printf("PongPacket nested_array[0][1]: 0x%02x\n", pong->nested_array[0][1]);
53 printf("PongPacket nested_array[1][0]: 0x%02x\n", pong->nested_array[1][0]);
54 printf("PongPacket nested_array[1][1]: 0x%02x\n", pong->nested_array[1][1]);
56 dragonnet_peer_close(p);
57 dragonnet_peer_delete(p);
60 static void *srv_func(__attribute((unused)) void *unused)
62 l = dragonnet_listener_new("[::1]:50000", &connect_func);
65 dragonnet_listener_set_recv_hook(l, DRAGONNET_TYPE_PINGPACKET,
66 (void (*)(DragonnetPeer *, void *)) &handle_pingpacket);
67 dragonnet_listener_run(l);
71 static void *clt_func(__attribute((unused)) void *unused)
75 DragonnetPeer *p = dragonnet_connect("[::1]:50000");
78 dragonnet_peer_set_recv_hook(p, DRAGONNET_TYPE_PONGPACKET,
79 (void (*)(DragonnetPeer *, void *)) &handle_pongpacket);
80 dragonnet_peer_run(p);
82 CompressedBlob compr_blob = malloc(sizeof *compr_blob);
83 compr_blob->blob = malloc(sizeof *compr_blob->blob);
84 compr_blob->blob->siz = 2;
85 compr_blob->blob->data = (u8 *) "\x0d\xba";
87 dragonnet_peer_send_PingPacket(p, &(PingPacket) {
88 .compr_blob = compr_blob
91 free(compr_blob->blob);
96 int main(__attribute((unused)) int argc, __attribute((unused)) char **argv)
98 pthread_t srv_thread, clt_thread;
99 pthread_create(&srv_thread, NULL, &srv_func, NULL);
100 pthread_create(&clt_thread, NULL, &clt_func, NULL);
102 pthread_join(clt_thread, NULL);
103 pthread_join(srv_thread, NULL);