diff options
| author | Lioncash <mathew1800@gmail.com> | 2021-01-19 14:11:39 -0500 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2021-01-20 12:24:05 -0500 |
| commit | d2ea94195cde9f8453f5b9448b41648973859277 (patch) | |
| tree | 84df8b46264a4f53ac40f3b23339e31e199cbf60 /Source/Core/Common/TraversalServer.cpp | |
| parent | 2f0fb2056e126e80eaaa76e9b410525591fca53d (diff) | |
TraversalProto: Convert TraversalPacketType into an enum class
Makes for strong typing and prevents namespace pollution.
Diffstat (limited to 'Source/Core/Common/TraversalServer.cpp')
| -rw-r--r-- | Source/Core/Common/TraversalServer.cpp | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/Source/Core/Common/TraversalServer.cpp b/Source/Core/Common/TraversalServer.cpp index 2c383bcbd7..655e591916 100644 --- a/Source/Core/Common/TraversalServer.cpp +++ b/Source/Core/Common/TraversalServer.cpp @@ -185,8 +185,9 @@ static const char* SenderName(sockaddr_in6* addr) static void TrySend(const void* buffer, size_t size, sockaddr_in6* addr) { #if DEBUG - printf("-> %d %llu %s\n", ((TraversalPacket*)buffer)->type, - (long long)((TraversalPacket*)buffer)->requestId, SenderName(addr)); + const auto* packet = static_cast<const TraversalPacket*>(buffer); + printf("-> %d %llu %s\n", static_cast<int>(packet->type), + static_cast<long long>(packet->requestId), SenderName(addr)); #endif if ((size_t)sendto(sock, buffer, size, 0, (sockaddr*)addr, sizeof(*addr)) != size) { @@ -227,7 +228,7 @@ static void ResendPackets() { if (info->tries >= NUMBER_OF_TRIES) { - if (info->packet.type == TraversalPacketPleaseSendPacket) + if (info->packet.type == TraversalPacketType::PleaseSendPacket) { todoFailures.push_back(std::make_pair(info->packet.pleaseSendPacket.address, info->misc)); } @@ -245,7 +246,7 @@ static void ResendPackets() for (const auto& p : todoFailures) { TraversalPacket* fail = AllocPacket(MakeSinAddr(p.first)); - fail->type = TraversalPacketConnectFailed; + fail->type = TraversalPacketType::ConnectFailed; fail->connectFailed.requestId = p.second; fail->connectFailed.reason = TraversalConnectFailedReason::ClientDidntRespond; } @@ -254,12 +255,13 @@ static void ResendPackets() static void HandlePacket(TraversalPacket* packet, sockaddr_in6* addr) { #if DEBUG - printf("<- %d %llu %s\n", packet->type, (long long)packet->requestId, SenderName(addr)); + printf("<- %d %llu %s\n", static_cast<int>(packet->type), + static_cast<long long>(packet->requestId), SenderName(addr)); #endif bool packetOk = true; switch (packet->type) { - case TraversalPacketAck: + case TraversalPacketType::Ack: { auto it = outgoingPackets.find(packet->requestId); if (it == outgoingPackets.end()) @@ -267,18 +269,18 @@ static void HandlePacket(TraversalPacket* packet, sockaddr_in6* addr) OutgoingPacketInfo* info = &it->second; - if (info->packet.type == TraversalPacketPleaseSendPacket) + if (info->packet.type == TraversalPacketType::PleaseSendPacket) { TraversalPacket* ready = AllocPacket(MakeSinAddr(info->packet.pleaseSendPacket.address)); if (packet->ack.ok) { - ready->type = TraversalPacketConnectReady; + ready->type = TraversalPacketType::ConnectReady; ready->connectReady.requestId = info->misc; ready->connectReady.address = MakeInetAddress(info->dest); } else { - ready->type = TraversalPacketConnectFailed; + ready->type = TraversalPacketType::ConnectFailed; ready->connectFailed.requestId = info->misc; ready->connectFailed.reason = TraversalConnectFailedReason::ClientFailure; } @@ -287,17 +289,17 @@ static void HandlePacket(TraversalPacket* packet, sockaddr_in6* addr) outgoingPackets.erase(it); break; } - case TraversalPacketPing: + case TraversalPacketType::Ping: { auto r = EvictFind(connectedClients, packet->ping.hostId, true); packetOk = r.found; break; } - case TraversalPacketHelloFromClient: + case TraversalPacketType::HelloFromClient: { u8 ok = packet->helloFromClient.protoVersion <= TraversalProtoVersion; TraversalPacket* reply = AllocPacket(*addr); - reply->type = TraversalPacketHelloFromServer; + reply->type = TraversalPacketType::HelloFromServer; reply->helloFromServer.ok = ok; if (ok) { @@ -323,32 +325,34 @@ static void HandlePacket(TraversalPacket* packet, sockaddr_in6* addr) } break; } - case TraversalPacketConnectPlease: + case TraversalPacketType::ConnectPlease: { TraversalHostId& hostId = packet->connectPlease.hostId; auto r = EvictFind(connectedClients, hostId); if (!r.found) { TraversalPacket* reply = AllocPacket(*addr); - reply->type = TraversalPacketConnectFailed; + reply->type = TraversalPacketType::ConnectFailed; reply->connectFailed.requestId = packet->requestId; reply->connectFailed.reason = TraversalConnectFailedReason::NoSuchClient; } else { TraversalPacket* please = AllocPacket(MakeSinAddr(*r.value), packet->requestId); - please->type = TraversalPacketPleaseSendPacket; + please->type = TraversalPacketType::PleaseSendPacket; please->pleaseSendPacket.address = MakeInetAddress(*addr); } break; } default: - fprintf(stderr, "received unknown packet type %d from %s\n", packet->type, SenderName(addr)); + fprintf(stderr, "received unknown packet type %d from %s\n", static_cast<int>(packet->type), + SenderName(addr)); + break; } - if (packet->type != TraversalPacketAck) + if (packet->type != TraversalPacketType::Ack) { TraversalPacket ack = {}; - ack.type = TraversalPacketAck; + ack.type = TraversalPacketType::Ack; ack.requestId = packet->requestId; ack.ack.ok = packetOk; TrySend(&ack, sizeof(ack), addr); |
