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 recv_type_func(DragonnetPeer *p, u16 type_id)
20 char *str_addr = dragonnet_addr_str(p->raddr);
21 printf("type %d from %s\n", type_id, str_addr);
24 if (type_id == DRAGONNET_TYPE_PINGPACKET) {
25 PingPacket ping = dragonnet_peer_recv_PingPacket(p);
26 printf("PingPacket number: 0x%08x\n", ping.number);
31 dragonnet_peer_send_PongPacket(p, pong);
33 dragonnet_listener_close(l);
34 dragonnet_listener_delete(l);
37 dragonnet_peer_close(p);
38 dragonnet_peer_delete(p);
39 } else if (type_id == DRAGONNET_TYPE_PONGPACKET) {
40 PongPacket pong = dragonnet_peer_recv_PongPacket(p);
41 printf("PongPacket number: 0x%08x\n", pong.number);
43 dragonnet_peer_close(p);
44 dragonnet_peer_delete(p);
48 static void *srv_func(__attribute((unused)) void *unused)
50 l = dragonnet_listener_new("[::1]:50000", &connect_func, &recv_type_func);
53 dragonnet_listener_run(l);
57 static void *clt_func(__attribute((unused)) void *unused)
61 DragonnetPeer *p = dragonnet_connect("[::1]:50000", &recv_type_func);
64 dragonnet_peer_run(p);
69 dragonnet_peer_send_PingPacket(p, ping);
74 int main(__attribute((unused)) int argc, __attribute((unused)) char **argv)
76 pthread_t srv_thread, clt_thread;
77 pthread_create(&srv_thread, NULL, &srv_func, NULL);
78 pthread_create(&clt_thread, NULL, &clt_func, NULL);
80 pthread_join(clt_thread, NULL);
81 pthread_join(srv_thread, NULL);