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) {
33 dragonnet_listener_close(l);
34 dragonnet_listener_delete(l);
37 dragonnet_peer_close(p);
38 dragonnet_peer_delete(p);
41 static void handle_pongpacket(DragonnetPeer *p, PongPacket *pong)
43 printf("PongPacket number: 0x%08x\n", pong->number);
45 dragonnet_peer_close(p);
46 dragonnet_peer_delete(p);
49 static void *srv_func(__attribute((unused)) void *unused)
51 l = dragonnet_listener_new("[::1]:50000", &connect_func);
54 dragonnet_listener_set_recv_hook(l, DRAGONNET_TYPE_PINGPACKET,
55 (void (*)(DragonnetPeer *, void *)) &handle_pingpacket);
56 dragonnet_listener_run(l);
60 static void *clt_func(__attribute((unused)) void *unused)
64 DragonnetPeer *p = dragonnet_connect("[::1]:50000");
67 dragonnet_peer_set_recv_hook(p, DRAGONNET_TYPE_PONGPACKET,
68 (void (*)(DragonnetPeer *, void *)) &handle_pongpacket);
69 dragonnet_peer_run(p);
71 CompressedBlob compr_blob = malloc(sizeof *compr_blob);
72 compr_blob->blob = malloc(sizeof *compr_blob->blob);
73 compr_blob->blob->siz = 2;
74 compr_blob->blob->data = (u8 *) "\x0d\xba";
76 dragonnet_peer_send_PingPacket(p, &(PingPacket) {
77 .compr_blob = compr_blob
80 free(compr_blob->blob);
85 int main(__attribute((unused)) int argc, __attribute((unused)) char **argv)
87 pthread_t srv_thread, clt_thread;
88 pthread_create(&srv_thread, NULL, &srv_func, NULL);
89 pthread_create(&clt_thread, NULL, &clt_func, NULL);
91 pthread_join(clt_thread, NULL);
92 pthread_join(srv_thread, NULL);