Update stun servers list with not working one removed

This commit is contained in:
Benau 2018-09-07 11:39:16 +08:00
parent 9cf42302a6
commit 3729f27de0
2 changed files with 33 additions and 20 deletions

View File

@ -683,21 +683,24 @@ namespace UserConfigParams
PARAM_PREFIX bool m_profiler_enabled PARAM_DEFAULT( false ); PARAM_PREFIX bool m_profiler_enabled PARAM_DEFAULT( false );
// ---- Networking // ---- Networking
PARAM_PREFIX StringToUIntUserConfigParam m_stun_list PARAM_PREFIX StringToUIntUserConfigParam m_stun_servers
PARAM_DEFAULT(StringToUIntUserConfigParam("stun_list", PARAM_DEFAULT(StringToUIntUserConfigParam("stun_servers",
"The stun servers that will be used to know the public address," "The stun servers that will be used to know the public address with"
" LHS: server address, RHS: ping time.", " port, LHS: server address, RHS: ping time.",
{ {
{ "numb.viagenie.ca", 0u }, { "stun.12connect.com:3478", 0u },
{ "stun.12connect.com", 0u }, { "stun.callwithus.com:3478", 0u },
{ "stun.callwithus.com", 0u }, { "stun.cope.es:3478", 0u },
{ "stun.cope.es", 0u }, { "stun.counterpath.net:3478", 0u },
{ "stun.counterpath.net", 0u }, { "stun.ekiga.net:3478", 0u },
{ "stun.ekiga.net", 0u }, { "stun.ivao.aero:3478", 0u },
{ "stun.ivao.aero", 0u }, { "stun.schlund.de:3478", 0u },
{ "stun.schlund.de", 0u }, { "stun.stunprotocol.org:3478", 0u },
{ "stun.stunprotocol.org", 0u }, { "stun.l.google.com:19302", 0u },
{ "stun.voip.aebc.com", 0u } { "stun1.l.google.com:19302", 0u },
{ "stun2.l.google.com:19302", 0u },
{ "stun3.l.google.com:19302", 0u },
{ "stun4.l.google.com:19302", 0u }
} }
)); ));

View File

@ -365,7 +365,7 @@ void STKHost::shutdown()
void STKHost::setPublicAddress() void STKHost::setPublicAddress()
{ {
std::vector<std::pair<std::string, uint32_t> > untried_server; std::vector<std::pair<std::string, uint32_t> > untried_server;
for (auto& p : UserConfigParams::m_stun_list) for (auto& p : UserConfigParams::m_stun_servers)
untried_server.push_back(p); untried_server.push_back(p);
assert(untried_server.size() > 2); assert(untried_server.size() > 2);
@ -385,9 +385,19 @@ void STKHost::setPublicAddress()
{ {
// Pick last element in untried servers // Pick last element in untried servers
std::string server_name = untried_server.back().first.c_str(); std::string server_name = untried_server.back().first.c_str();
UserConfigParams::m_stun_list[server_name] = (uint32_t)-1; UserConfigParams::m_stun_servers[server_name] = (uint32_t)-1;
Log::debug("STKHost", "Using STUN server %s", server_name.c_str()); Log::debug("STKHost", "Using STUN server %s", server_name.c_str());
std::vector<std::string> addr_and_port =
StringUtils::split(server_name, ':');
uint16_t port = 0;
if (addr_and_port.size() != 2 ||
!StringUtils::fromString(addr_and_port[1], port))
{
Log::error("STKHost", "Wrong server address and port");
untried_server.pop_back();
continue;
}
struct addrinfo hints, *res; struct addrinfo hints, *res;
memset(&hints, 0, sizeof hints); memset(&hints, 0, sizeof hints);
@ -395,11 +405,11 @@ void STKHost::setPublicAddress()
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
// Resolve the stun server name so we can send it a STUN request // Resolve the stun server name so we can send it a STUN request
int status = getaddrinfo(server_name.c_str(), NULL, &hints, &res); int status = getaddrinfo(addr_and_port[0].c_str(), NULL, &hints, &res);
if (status != 0) if (status != 0)
{ {
Log::error("STKHost", "Error in getaddrinfo for stun server" Log::error("STKHost", "Error in getaddrinfo for stun server"
" %s: %s", server_name.c_str(), gai_strerror(status)); " %s: %s", addr_and_port[0].c_str(), gai_strerror(status));
untried_server.pop_back(); untried_server.pop_back();
continue; continue;
} }
@ -408,7 +418,7 @@ void STKHost::setPublicAddress()
assert(res != NULL); assert(res != NULL);
struct sockaddr_in* current_interface = (struct sockaddr_in*)(res->ai_addr); struct sockaddr_in* current_interface = (struct sockaddr_in*)(res->ai_addr);
m_stun_address.setIP(ntohl(current_interface->sin_addr.s_addr)); m_stun_address.setIP(ntohl(current_interface->sin_addr.s_addr));
m_stun_address.setPort(3478); m_stun_address.setPort(port);
// Assemble the message for the stun server // Assemble the message for the stun server
BareNetworkString s(20); BareNetworkString s(20);
@ -577,7 +587,7 @@ void STKHost::setPublicAddress()
m_public_address = non_xor_addr; m_public_address = non_xor_addr;
} }
// Succeed, save ping // Succeed, save ping
UserConfigParams::m_stun_list[server_name] = (uint32_t)(ping); UserConfigParams::m_stun_servers[server_name] = (uint32_t)(ping);
untried_server.clear(); untried_server.clear();
} }
} }