#5 send notify messages

pull/32/head
Geoffrey Merck 4 years ago
parent 13335e4924
commit 3d0b31682e

@ -403,8 +403,9 @@ void CDExtraHandler::process(CConnectData& connect)
}
}
void CDExtraHandler::link(IReflectorCallback* handler, const std::string& repeater, const std::string &gateway, const in_addr& address)
void CDExtraHandler::link(IReflectorCallback* handler, const std::string& repeater, const std::string &gateway, const in_addr& address, unsigned int& localPort)
{
localPort = 0U;
CDExtraProtocolHandler* protoHandler = m_pool->getHandler();
if (protoHandler == NULL)
return;
@ -422,6 +423,7 @@ void CDExtraHandler::link(IReflectorCallback* handler, const std::string& repeat
}
if (found) {
localPort = protoHandler->getPort();
CConnectData reply(repeater, gateway, CT_LINK1, address, DEXTRA_PORT);
protoHandler->writeConnect(reply);
} else {

@ -52,7 +52,7 @@ public:
static void setHeaderLogger(CHeaderLogger* logger);
static void setMaxDongles(unsigned int maxDongles);
static void link(IReflectorCallback* handler, const std::string& repeater, const std::string& reflector, const in_addr& address);
static void link(IReflectorCallback* handler, const std::string& repeater, const std::string& reflector, const in_addr& address, unsigned int& localPort);
static void unlink(IReflectorCallback* handler, const std::string& reflector = "", bool exclude = true);
static void unlink();

@ -1381,8 +1381,9 @@ void CRepeaterHandler::resolveRepeaterInt(const std::string& repeater, const std
default:
if (m_dextraEnabled) {
m_linkGateway = gateway;
unsigned int localPort = 0U;
addr.s_addr = ::inet_addr(address.c_str());
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, addr);
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, addr, localPort);
m_linkStatus = LS_LINKING_DEXTRA;
} else {
CLog::logInfo("Require DExtra for linking to %s, but DExtra is disabled", repeater.c_str());
@ -2321,8 +2322,11 @@ void CRepeaterHandler::linkInt(const std::string& callsign)
default:
if (m_dextraEnabled) {
unsigned int localPort = 0U;
m_linkStatus = LS_LINKING_DEXTRA;
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, data->getAddress());
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, data->getAddress(), localPort);
if(m_irc != nullptr && localPort > 0U)
m_irc->notifyRepeaterDextraNatTraversal(m_linkRepeater, localPort);
writeLinkingTo(m_linkRepeater);
triggerInfo();
} else {
@ -2493,8 +2497,11 @@ void CRepeaterHandler::startupInt()
default:
if (m_dextraEnabled) {
unsigned int localPort = 0U;
m_linkStatus = LS_LINKING_DEXTRA;
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, data->getAddress());
CDExtraHandler::link(this, m_rptCallsign, m_linkRepeater, data->getAddress(), localPort);
if(m_irc != nullptr && localPort > 0U)
m_irc->notifyRepeaterDextraNatTraversal(m_linkRepeater, localPort);
writeLinkingTo(m_linkRepeater);
triggerInfo();
} else {

Loading…
Cancel
Save

Powered by TurnKey Linux.