From 0fe7785194277105fa3b44c2f300a95b1a02ead1 Mon Sep 17 00:00:00 2001 From: Taylor Richards Date: Fri, 31 Mar 2017 15:33:21 -0400 Subject: [PATCH] add basic support for getting though firewalls --- include/gtrack.h | 1 + src/network/gtrack.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/include/gtrack.h b/include/gtrack.h index f00c7fb..e95d755 100644 --- a/include/gtrack.h +++ b/include/gtrack.h @@ -48,6 +48,7 @@ #define GNT_GAMELIST_DATA 6 #define GNT_GAME_COUNT_REQ 7 #define GNT_GAME_COUNT_DATA 8 +#define GNT_PEER_PING 9 #define GT_FREESPACE 1 #define GT_DESCENT3 2 diff --git a/src/network/gtrack.cpp b/src/network/gtrack.cpp index e215c42..42dedd2 100644 --- a/src/network/gtrack.cpp +++ b/src/network/gtrack.cpp @@ -277,6 +277,19 @@ static void DeserializeGamePacket(const ubyte *data, const int data_size, game_p break; } + case GNT_PEER_PING: { + int ip_address = 0; + ushort port = 0; + + PXO_GET_INT(ip_address); + PXO_GET_USHORT(port); + + memcpy(gph->data, &ip_address, sizeof(int)); + memcpy(gph->data+sizeof(int), &port, sizeof(ushort)); + + break; + } + default: break; } @@ -524,6 +537,20 @@ void IdleGameTracker() // send it to the PXO screen multi_pxo_channel_count_update(channel,num_servers); break; + + case GNT_PEER_PING: + // send ping packet to specified client in attempt to open up a + // way through stateful firewalls, allowing client to talk later + net_addr clientaddr; + + clientaddr.type = Multi_options_g.protocol; + memcpy(clientaddr.addr, inpacket.data, IP_ADDRESS_LENGTH); + memcpy(&clientaddr.port, inpacket.data+IP_ADDRESS_LENGTH, sizeof(short)); + clientaddr.port = ntohs(clientaddr.port); + + extern void send_ping(net_addr *addr); + send_ping(&clientaddr); + break; } AckPacket(inpacket.sig); } -- 2.39.2