diff --git a/Common/RepeaterHandler.cpp b/Common/RepeaterHandler.cpp index 0209ecb..c1f32a9 100644 --- a/Common/RepeaterHandler.cpp +++ b/Common/RepeaterHandler.cpp @@ -109,6 +109,7 @@ m_g2Repeater(), m_g2Gateway(), m_g2Header(NULL), m_g2Address(), +m_g2Port(G2_DV_PORT), m_linkStatus(LS_NONE), m_linkRepeater(), m_linkGateway(), @@ -632,6 +633,7 @@ void CRepeaterHandler::processRepeater(CHeaderData& header) m_g2User.Clear(); m_g2Repeater.Clear(); m_g2Gateway.Clear(); + m_g2Port = G2_DV_PORT; // Check if this user is restricted m_restricted = false; @@ -829,7 +831,7 @@ void CRepeaterHandler::processRepeater(CAMBEData& data) break; case G2_OK: - data.setDestination(m_g2Address, G2_DV_PORT); + data.setDestination(m_g2Address, m_g2Port); m_g2Handler->writeAMBE(data); if (data.isEnd()) { @@ -1213,7 +1215,7 @@ void CRepeaterHandler::resolveUserInt(const wxString& user, const wxString& repe m_g2Repeater = repeater; m_g2Gateway = gateway; - m_g2Header->setDestination(m_g2Address, G2_DV_PORT); + m_g2Header->setDestination(m_g2Address, m_g2Port); m_g2Header->setRepeaters(m_g2Gateway, m_g2Repeater); m_g2Handler->writeHeader(*m_g2Header); @@ -1226,6 +1228,7 @@ void CRepeaterHandler::resolveUserInt(const wxString& user, const wxString& repe m_g2User.Clear(); m_g2Repeater.Clear(); m_g2Gateway.Clear(); + m_g2Port = G2_DV_PORT; delete m_g2Header; m_g2Header = NULL; @@ -1245,7 +1248,10 @@ void CRepeaterHandler::resolveRepeaterInt(const wxString& repeater, const wxStri m_g2Repeater = repeater; m_g2Gateway = gateway; - m_g2Header->setDestination(m_g2Address, G2_DV_PORT); + CRepeaterData* rpt = m_cache->findRepeater(repeater); + m_g2Port = rpt != NULL ? rpt->getG2Port() : G2_DV_PORT; + + m_g2Header->setDestination(m_g2Address, m_g2Port); m_g2Header->setRepeaters(m_g2Gateway, m_g2Repeater); m_g2Handler->writeHeader(*m_g2Header); @@ -1258,6 +1264,7 @@ void CRepeaterHandler::resolveRepeaterInt(const wxString& repeater, const wxStri m_g2User.Clear(); m_g2Repeater.Clear(); m_g2Gateway.Clear(); + m_g2Port = G2_DV_PORT; delete m_g2Header; m_g2Header = NULL; @@ -1459,6 +1466,7 @@ void CRepeaterHandler::clockInt(unsigned int ms) m_g2User.Clear(); m_g2Repeater.Clear(); m_g2Gateway.Clear(); + m_g2Port = G2_DV_PORT; delete m_g2Header; m_g2Header = NULL; @@ -1983,7 +1991,8 @@ void CRepeaterHandler::g2CommandHandler(const wxString& callsign, const wxString m_g2Status = G2_OK; m_g2Address = data->getAddress(); m_g2Gateway = data->getGateway(); - header.setDestination(m_g2Address, G2_DV_PORT); + m_g2Port = data->getG2Port(); + header.setDestination(m_g2Address, m_g2Port); header.setRepeaters(m_g2Gateway, m_g2Repeater); m_g2Handler->writeHeader(header); delete data; @@ -2025,7 +2034,9 @@ void CRepeaterHandler::g2CommandHandler(const wxString& callsign, const wxString m_g2Address = data->getAddress(); m_g2Repeater = data->getRepeater(); m_g2Gateway = data->getGateway(); - header.setDestination(m_g2Address, data->getG2Port()); + m_g2Port = data->getG2Port(); + wxLogMessage(wxT("%s is trying to G2 route to gateway %s on port %d"), user.c_str(), m_g2Gateway.c_str(), m_g2Port); + header.setDestination(m_g2Address, m_g2Port); header.setRepeaters(m_g2Gateway, m_g2Repeater); m_g2Handler->writeHeader(header); diff --git a/Common/RepeaterHandler.h b/Common/RepeaterHandler.h index 05baca2..df16c5a 100644 --- a/Common/RepeaterHandler.h +++ b/Common/RepeaterHandler.h @@ -232,6 +232,7 @@ private: wxString m_g2Gateway; CHeaderData* m_g2Header; in_addr m_g2Address; + unsigned int m_g2Port; // Link info LINK_STATUS m_linkStatus; diff --git a/ircDDBGateway/IRCDDBGatewayThread.cpp b/ircDDBGateway/IRCDDBGatewayThread.cpp index 6892267..d20e83e 100644 --- a/ircDDBGateway/IRCDDBGatewayThread.cpp +++ b/ircDDBGateway/IRCDDBGatewayThread.cpp @@ -732,7 +732,6 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!res) break; - CRepeaterHandler::resolveRepeater(repeater, gateway, address, DP_DEXTRA); if (!address.IsEmpty()) { wxLogMessage(wxT("REPEATER: %s %s %s"), repeater.c_str(), gateway.c_str(), address.c_str()); m_cache.updateRepeater(repeater, gateway, address, DP_DEXTRA, false, false); @@ -740,6 +739,9 @@ void CIRCDDBGatewayThread::processIrcDDB() } else { wxLogMessage(wxT("REPEATER: %s NOT FOUND"), repeater.c_str()); } + + //resolve after updating cache so CRepeaterHandler gets latest g2 port from cache + CRepeaterHandler::resolveRepeater(repeater, gateway, address, DP_DEXTRA); } break;