Send to all broadcast addresses for connecting to wan server in lan
This commit is contained in:
parent
7926ad9ba0
commit
4a4c99baf2
@ -23,6 +23,7 @@
|
||||
#include "network/network_config.hpp"
|
||||
#include "network/protocol_manager.hpp"
|
||||
#include "network/server.hpp"
|
||||
#include "network/servers_manager.hpp"
|
||||
#include "network/stk_host.hpp"
|
||||
#include "online/xml_request.hpp"
|
||||
#include "utils/string_utils.hpp"
|
||||
@ -97,30 +98,40 @@ void RequestConnection::asynchronousUpdate()
|
||||
(STKHost::get()->isClientServer() ? "-localhost" :
|
||||
StringUtils::toString(m_server->getPrivatePort())));
|
||||
|
||||
TransportAddress server_addr;
|
||||
if (!NetworkConfig::m_disable_lan &&
|
||||
m_server->getAddress().getIP() ==
|
||||
STKHost::get()->getPublicAddress().getIP() &&
|
||||
!STKHost::get()->isClientServer())
|
||||
{
|
||||
// If use lan connection in wan server, send a broadcast
|
||||
server_addr.setIP(0xffffffff);
|
||||
// If use lan connection in wan server, send to all
|
||||
// broadcast address
|
||||
for (auto& addr :
|
||||
ServersManager::get()->getBroadcastAddresses())
|
||||
{
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
STKHost::get()->sendRawPacket(message, addr);
|
||||
StkTime::sleep(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TransportAddress server_addr;
|
||||
server_addr.setIP(m_server->getAddress().getIP());
|
||||
// Direct socket always listens on server discovery port
|
||||
server_addr.setPort(NetworkConfig::get()
|
||||
->getServerDiscoveryPort());
|
||||
// Avoid possible packet loss, the connect to peer done by
|
||||
// server will auto terminate if same peer from same port
|
||||
// has connected already
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
STKHost::get()->sendRawPacket(message, server_addr);
|
||||
StkTime::sleep(1);
|
||||
}
|
||||
}
|
||||
// Direct socket always listens on server discovery port
|
||||
server_addr.setPort(NetworkConfig::get()
|
||||
->getServerDiscoveryPort());
|
||||
// Avoid possible packet loss, the connect to peer done by
|
||||
// server will auto terminate if same peer from same port
|
||||
// has connected already
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
STKHost::get()->sendRawPacket(message, server_addr);
|
||||
StkTime::sleep(1);
|
||||
}
|
||||
|
||||
m_state = DONE;
|
||||
}
|
||||
else
|
||||
|
@ -315,6 +315,8 @@ void ServersManager::setDefaultBroadcastAddresses()
|
||||
m_broadcast_address.emplace_back(std::string("255.255.255.255"));
|
||||
m_broadcast_address.emplace_back(std::string("127.0.0.255") );
|
||||
m_broadcast_address.emplace_back(std::string("127.0.0.1") );
|
||||
for (auto& addr : m_broadcast_address)
|
||||
addr.setPort(NetworkConfig::get()->getServerDiscoveryPort());
|
||||
} // setDefaultBroadcastAddresses
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -381,7 +383,7 @@ void ServersManager::updateBroadcastAddresses()
|
||||
|
||||
if (return_code == ERROR_BUFFER_OVERFLOW)
|
||||
{
|
||||
Log::warn("NetworkConfig", "Can not get broadcast addresses.");
|
||||
Log::warn("ServerManager", "Can not get broadcast addresses.");
|
||||
setDefaultBroadcastAddresses();
|
||||
return;
|
||||
}
|
||||
@ -418,7 +420,8 @@ void ServersManager::updateBroadcastAddresses()
|
||||
u = (u & 0x33333333) + ((u >> 2) & 0x33333333);
|
||||
u = (((u + (u >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
|
||||
|
||||
printf("Interface: %s\tAddress: %s\tmask: %x\n", p->ifa_name,
|
||||
Log::debug("ServerManager",
|
||||
"Interface: %s\tAddress: %s\tmask: %x\n", p->ifa_name,
|
||||
ta.toString().c_str(), u);
|
||||
addAllBroadcastAddresses(ta, u);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user