From 080095ade5e6dc330529ff01d66c14c844aa7005 Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 8 Apr 2009 17:51:04 +0000 Subject: (svn r15984) -Codechange: prepare the UDP receiver to process multiple types of returned server lists. --- src/network/core/address.cpp | 4 ++-- src/network/core/udp.h | 9 +++++++++ src/network/network_udp.cpp | 7 ++++--- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/network/core/address.cpp b/src/network/core/address.cpp index 963a2e970..d14d1dab6 100644 --- a/src/network/core/address.cpp +++ b/src/network/core/address.cpp @@ -58,9 +58,9 @@ const char *NetworkAddress::GetAddressAsString(bool with_family) /* 6 = for the : and 5 for the decimal port number */ static char buf[NETWORK_HOSTNAME_LENGTH + 6 + 7]; char *p = buf; - if (this->address.ss_family == AF_INET6) p = strecpy(p, "[", lastof(buf)); + if (this->GetAddress()->ss_family == AF_INET6) p = strecpy(p, "[", lastof(buf)); p = strecpy(p, this->GetHostname(), lastof(buf)); - if (this->address.ss_family == AF_INET6) p = strecpy(p, "]", lastof(buf)); + if (this->GetAddress()->ss_family == AF_INET6) p = strecpy(p, "]", lastof(buf)); p += seprintf(p, lastof(buf), ":%d", this->GetPort()); if (with_family) { diff --git a/src/network/core/udp.h b/src/network/core/udp.h index 2302dab0d..6f68c213d 100644 --- a/src/network/core/udp.h +++ b/src/network/core/udp.h @@ -90,6 +90,15 @@ enum PacketUDPType { PACKET_UDP_END ///< Must ALWAYS be on the end of this list!! (period) }; +/** The types of server lists we can get */ +enum ServerListType { + SLT_IPv4 = 0, ///< Get the IPv4 addresses + SLT_IPv6 = 1, ///< Get the IPv6 addresses + SLT_AUTODETECT, ///< Autodetect the type based on the connection + + SLT_END = SLT_AUTODETECT ///< End of 'arrays' marker +}; + #define DECLARE_UDP_RECEIVE_COMMAND(type) virtual void NetworkPacketReceive_## type ##_command(Packet *p, NetworkAddress *client_addr) #define DEF_UDP_RECEIVE_COMMAND(cls, type) void cls ##NetworkUDPSocketHandler::NetworkPacketReceive_ ## type ## _command(Packet *p, NetworkAddress *client_addr) diff --git a/src/network/network_udp.cpp b/src/network/network_udp.cpp index 15677d0fe..f9c2f98ca 100644 --- a/src/network/network_udp.cpp +++ b/src/network/network_udp.cpp @@ -286,12 +286,12 @@ DEF_UDP_RECEIVE_COMMAND(Client, PACKET_UDP_MASTER_RESPONSE_LIST) /* packet begins with the protocol version (uint8) * then an uint16 which indicates how many * ip:port pairs are in this packet, after that - * an uint32 (ip) and an uint16 (port) for each pair + * an uint32 (ip) and an uint16 (port) for each pair. */ - uint8 ver = p->Recv_uint8(); + ServerListType type = (ServerListType)(p->Recv_uint8() - 1); - if (ver == 1) { + if (type < SLT_END) { for (int i = p->Recv_uint16(); i != 0 ; i--) { uint32 ip = TO_LE32(p->Recv_uint32()); uint16 port = p->Recv_uint16(); @@ -390,6 +390,7 @@ void NetworkUDPQueryMasterServer() /* packet only contains protocol version */ p.Send_uint8(NETWORK_MASTER_SERVER_VERSION); + p.Send_uint8(SLT_AUTODETECT); _udp_client_socket->SendPacket(&p, &out_addr, true); -- cgit v1.2.3-54-g00ecf