(svn r15990) -Codechange: provide a thread safe variant of GetAddressAsString.

This commit is contained in:
rubidium 2009-04-08 21:11:16 +00:00
parent e779c56e31
commit 0f0cc67d62
3 changed files with 23 additions and 10 deletions

View File

@ -53,15 +53,12 @@ void NetworkAddress::SetPort(uint16 port)
} }
} }
const char *NetworkAddress::GetAddressAsString(bool with_family) void NetworkAddress::GetAddressAsString(char *buffer, const char *last, bool with_family)
{ {
/* 6 = for the : and 5 for the decimal port number */ if (this->GetAddress()->ss_family == AF_INET6) buffer = strecpy(buffer, "[", last);
static char buf[NETWORK_HOSTNAME_LENGTH + 6 + 7]; buffer = strecpy(buffer, this->GetHostname(), last);
char *p = buf; if (this->GetAddress()->ss_family == AF_INET6) buffer = strecpy(buffer, "]", last);
if (this->GetAddress()->ss_family == AF_INET6) p = strecpy(p, "[", lastof(buf)); buffer += seprintf(buffer, last, ":%d", this->GetPort());
p = strecpy(p, this->GetHostname(), 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) { if (with_family) {
char family; char family;
@ -70,8 +67,15 @@ const char *NetworkAddress::GetAddressAsString(bool with_family)
case AF_INET6: family = '6'; break; case AF_INET6: family = '6'; break;
default: family = '?'; break; default: family = '?'; break;
} }
seprintf(p, lastof(buf), " (IPv%c)", family); seprintf(buffer, last, " (IPv%c)", family);
} }
}
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];
this->GetAddressAsString(buf, lastof(buf), with_family);
return buf; return buf;
} }

View File

@ -120,10 +120,19 @@ public:
*/ */
const char *GetHostname(); const char *GetHostname();
/**
* Get the address as a string, e.g. 127.0.0.1:12345.
* @param buffer the buffer to write to
* @param last the last element in the buffer
* @param with_family whether to add the family (e.g. IPvX).
*/
void GetAddressAsString(char *buffer, const char *last, bool with_family = true);
/** /**
* Get the address as a string, e.g. 127.0.0.1:12345. * Get the address as a string, e.g. 127.0.0.1:12345.
* @param with_family whether to add the family (e.g. IPvX). * @param with_family whether to add the family (e.g. IPvX).
* @return the address * @return the address
* @note NOT thread safe
*/ */
const char *GetAddressAsString(bool with_family = true); const char *GetAddressAsString(bool with_family = true);

View File

@ -416,7 +416,7 @@ void NetworkUDPQueryServerThread(void *pntr)
/* Clear item in gamelist */ /* Clear item in gamelist */
NetworkGameList *item = CallocT<NetworkGameList>(1); NetworkGameList *item = CallocT<NetworkGameList>(1);
item->address = *info; item->address = *info;
strecpy(item->info.server_name, info->GetAddressAsString(), lastof(item->info.server_name)); info->GetAddressAsString(item->info.server_name, lastof(item->info.server_name));
strecpy(item->info.hostname, info->GetHostname(), lastof(item->info.hostname)); strecpy(item->info.hostname, info->GetHostname(), lastof(item->info.hostname));
item->manually = info->manually; item->manually = info->manually;
NetworkGameListAddItemDelayed(item); NetworkGameListAddItemDelayed(item);