From d269ce3a027739334046b67cea1c40aa87a21a79 Mon Sep 17 00:00:00 2001 From: HimbeerserverDE Date: Fri, 8 Oct 2021 20:09:53 +0200 Subject: [PATCH] Use demo packets for ping-pong communication --- CMakeLists.txt | 1 + cs_example.c | 49 ++++++++++++++++++++++++++++++++++++++++++------- deps/dragonnet | 2 +- 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 897906e..5cb6cad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ add_custom_target(ExampleTypes add_executable(ExampleCS ${SOURCES_COMMON} + dnet-types.c cs_example.c ) diff --git a/cs_example.c b/cs_example.c index d3c5888..4e01755 100644 --- a/cs_example.c +++ b/cs_example.c @@ -4,6 +4,7 @@ #include #include "deps/dragonnet/listen.h" +#include "dnet-types.h" static DragonnetListener *l; @@ -12,15 +13,41 @@ static void connect_func(DragonnetPeer *p) char *str_addr = dragonnet_addr_str(p->raddr); printf("new connection from %s\n", str_addr); free(str_addr); +} + +static void recv_type_func(DragonnetPeer *p, u16 type_id) +{ + char *str_addr = dragonnet_addr_str(p->raddr); + printf("type %d from %s\n", type_id, str_addr); + free(str_addr); + + if (type_id == DRAGONNET_TYPE_PINGPACKET) { + PingPacket ping = dragonnet_peer_recv_PingPacket(p); + printf("PingPacket number: 0x%08x\n", ping.number); + + PongPacket pong = { + .number = ping.number + }; + dragonnet_peer_send_PongPacket(p, pong); - dragonnet_listener_close(l); - dragonnet_listener_delete(l); - l = NULL; + dragonnet_listener_close(l); + dragonnet_listener_delete(l); + l = NULL; + + dragonnet_peer_close(p); + dragonnet_peer_delete(p); + } else if (type_id == DRAGONNET_TYPE_PONGPACKET) { + PongPacket pong = dragonnet_peer_recv_PongPacket(p); + printf("PongPacket number: 0x%08x\n", pong.number); + + dragonnet_peer_close(p); + dragonnet_peer_delete(p); + } } static void *srv_func(__attribute((unused)) void *unused) { - l = dragonnet_listener_new("[::1]:50000", &connect_func); + l = dragonnet_listener_new("[::1]:50000", &connect_func, &recv_type_func); assert(l != NULL); dragonnet_listener_run(l); @@ -29,12 +56,18 @@ static void *srv_func(__attribute((unused)) void *unused) static void *clt_func(__attribute((unused)) void *unused) { - DragonnetPeer *p = dragonnet_connect("[::1]:50000"); + while (l == NULL); + + DragonnetPeer *p = dragonnet_connect("[::1]:50000", &recv_type_func); assert(p != NULL); dragonnet_peer_run(p); - dragonnet_peer_close(p); - dragonnet_peer_delete(p); + + PingPacket ping = { + .number = 0xdba + }; + dragonnet_peer_send_PingPacket(p, ping); + return NULL; } @@ -46,4 +79,6 @@ int main(__attribute((unused)) int argc, __attribute((unused)) char **argv) pthread_join(clt_thread, NULL); pthread_join(srv_thread, NULL); + + while (true); } diff --git a/deps/dragonnet b/deps/dragonnet index d69acbe..ad53424 160000 --- a/deps/dragonnet +++ b/deps/dragonnet @@ -1 +1 @@ -Subproject commit d69acbe4b3d830a011b240c74467f6f44d4e961d +Subproject commit ad5342417e9c6e5930932afc9cfd71c88220501c -- 2.44.0