diff --git a/src/base/system.cpp b/src/base/system.cpp index 9b9e21cbe..2859ab07f 100644 --- a/src/base/system.cpp +++ b/src/base/system.cpp @@ -1130,22 +1130,6 @@ bool net_addr_str(const NETADDR *addr, char *string, int max_length, int add_por return true; } -void net_addr_url_str(const NETADDR *addr, char *string, int max_length, int add_port) -{ - char ipaddr[512]; - if(!net_addr_str(addr, ipaddr, sizeof(ipaddr), add_port)) - { - str_copy(string, ipaddr, max_length); - return; - } - str_format( - string, - max_length, - "tw-%s+udp://%s", - addr->type & NETTYPE_TW7 ? "0.7" : "0.6", - ipaddr); -} - static int priv_net_extract(const char *hostname, char *host, int max_host, int *port) { int i; diff --git a/src/base/system.h b/src/base/system.h index 438432707..dfd636475 100644 --- a/src/base/system.h +++ b/src/base/system.h @@ -818,23 +818,6 @@ int net_addr_comp_noport(const NETADDR *a, const NETADDR *b); */ bool net_addr_str(const NETADDR *addr, char *string, int max_length, int add_port); -/** - * Turns a network address into a url string. - * Examples: - * tw-0.6+udp://127.0.0.1:8303 - * tw-0.7+udp://127.0.0.1 - * - * @ingroup Network-General - * - * @param addr Address to turn into a string. - * @param string Buffer to fill with the url string. - * @param max_length Maximum size of the url string. - * @param add_port add port to url string or not - * - * @remark The string will always be zero terminated - */ -void net_addr_url_str(const NETADDR *addr, char *string, int max_length, int add_port); - /** * Turns url string into a network address struct. * The url format is tw-0.6+udp://{ipaddr}[:{port}] diff --git a/src/engine/client/serverbrowser.cpp b/src/engine/client/serverbrowser.cpp index 4da2676df..6c93b3aba 100644 --- a/src/engine/client/serverbrowser.cpp +++ b/src/engine/client/serverbrowser.cpp @@ -704,7 +704,22 @@ void ServerBrowserFormatAddresses(char *pBuffer, int BufferSize, NETADDR *pAddrs { return; } - net_addr_url_str(&pAddrs[i], pBuffer, BufferSize, true); + char aIpAddr[512]; + if(!net_addr_str(&pAddrs[i], aIpAddr, sizeof(aIpAddr), true)) + { + str_copy(pBuffer, aIpAddr, BufferSize); + return; + } + if(pAddrs[i].type & NETTYPE_TW7) + { + str_format( + pBuffer, + BufferSize, + "tw-0.7+udp://%s", + aIpAddr); + return; + } + str_copy(pBuffer, aIpAddr, BufferSize); int Length = str_length(pBuffer); pBuffer += Length; BufferSize -= Length; diff --git a/src/engine/client/serverbrowser_http.cpp b/src/engine/client/serverbrowser_http.cpp index e70a61fb9..698d9d2af 100644 --- a/src/engine/client/serverbrowser_http.cpp +++ b/src/engine/client/serverbrowser_http.cpp @@ -472,6 +472,7 @@ bool CServerBrowserHttp::Parse(json_value *pJson, std::vector *pvSe CServerInfo SetInfo = ParsedInfo; SetInfo.m_Location = ParsedLocation; SetInfo.m_NumAddresses = 0; + bool GotVersion6 = false; for(unsigned int a = 0; a < Addresses.u.array.length; a++) { const json_value &Address = Addresses[a]; @@ -479,6 +480,23 @@ bool CServerBrowserHttp::Parse(json_value *pJson, std::vector *pvSe { return true; } + if(str_startswith(Addresses[a], "tw-0.6+udp://")) + { + GotVersion6 = true; + break; + } + } + for(unsigned int a = 0; a < Addresses.u.array.length; a++) + { + const json_value &Address = Addresses[a]; + if(Address.type != json_string) + { + return true; + } + if(GotVersion6 && str_startswith(Addresses[a], "tw-0.7+udp://")) + { + continue; + } NETADDR ParsedAddr; if(ServerbrowserParseUrl(&ParsedAddr, Addresses[a])) { diff --git a/src/test/netaddr.cpp b/src/test/netaddr.cpp index ecc6450b5..7b199e393 100644 --- a/src/test/netaddr.cpp +++ b/src/test/netaddr.cpp @@ -24,10 +24,6 @@ TEST(NetAddr, FromUrlStringValid) net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false); EXPECT_STREQ(aBuf1, "127.0.0.1:0"); EXPECT_STREQ(aBuf2, "127.0.0.1"); - net_addr_url_str(&Addr, aBuf1, sizeof(aBuf1), true); - net_addr_url_str(&Addr, aBuf2, sizeof(aBuf2), false); - EXPECT_STREQ(aBuf1, "tw-0.7+udp://127.0.0.1:0"); - EXPECT_STREQ(aBuf2, "tw-0.7+udp://127.0.0.1"); EXPECT_EQ(net_addr_from_url(&Addr, "tw-0.6+udp://127.0.0.1", nullptr, 0), 0); net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true); @@ -40,20 +36,12 @@ TEST(NetAddr, FromUrlStringValid) net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false); EXPECT_STREQ(aBuf1, "127.0.0.1:0"); EXPECT_STREQ(aBuf2, "127.0.0.1"); - net_addr_url_str(&Addr, aBuf1, sizeof(aBuf1), true); - net_addr_url_str(&Addr, aBuf2, sizeof(aBuf2), false); - EXPECT_STREQ(aBuf1, "tw-0.6+udp://127.0.0.1:0"); - EXPECT_STREQ(aBuf2, "tw-0.6+udp://127.0.0.1"); EXPECT_EQ(net_addr_from_url(&Addr, "tw-0.6+udp://[0123:4567:89ab:cdef:1:2:3:4]:5678", nullptr, 0), 0); net_addr_str(&Addr, aBuf1, sizeof(aBuf1), true); net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false); EXPECT_STREQ(aBuf1, "[123:4567:89ab:cdef:1:2:3:4]:5678"); EXPECT_STREQ(aBuf2, "[123:4567:89ab:cdef:1:2:3:4]"); - net_addr_url_str(&Addr, aBuf1, sizeof(aBuf1), true); - net_addr_url_str(&Addr, aBuf2, sizeof(aBuf2), false); - EXPECT_STREQ(aBuf1, "tw-0.6+udp://[123:4567:89ab:cdef:1:2:3:4]:5678"); - EXPECT_STREQ(aBuf2, "tw-0.6+udp://[123:4567:89ab:cdef:1:2:3:4]"); char aHost[128]; EXPECT_EQ(net_addr_from_url(&Addr, "tw-0.6+udp://ger10.ddnet.org:5678", aHost, sizeof(aHost)), -1); @@ -156,14 +144,3 @@ TEST(NetAddr, StrInvalid) net_addr_str(&Addr, aBuf2, sizeof(aBuf2), false); EXPECT_STREQ(aBuf2, "unknown type 0"); } - -TEST(NetAddr, UrlStrInvalid) -{ - NETADDR Addr = {0}; - char aBuf1[NETADDR_MAXSTRSIZE]; - char aBuf2[NETADDR_MAXSTRSIZE]; - net_addr_url_str(&Addr, aBuf1, sizeof(aBuf1), true); - EXPECT_STREQ(aBuf1, "unknown type 0"); - net_addr_url_str(&Addr, aBuf2, sizeof(aBuf2), false); - EXPECT_STREQ(aBuf2, "unknown type 0"); -}