From f7bdf336eddfbb68485f8c48f0615e09a7e2d901 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck F4FXL - KC3FRA Date: Thu, 1 Nov 2018 09:22:21 +0100 Subject: [PATCH 1/2] First G2 UDP Hole Punching test --- ircDDBGateway/Common/G2ProtocolHandler.cpp | 12 ++++++++++++ ircDDBGateway/Common/G2ProtocolHandler.h | 2 ++ ircDDBGateway/ircDDBGateway/IRCDDBGatewayThread.cpp | 3 +++ 3 files changed, 17 insertions(+) diff --git a/ircDDBGateway/Common/G2ProtocolHandler.cpp b/ircDDBGateway/Common/G2ProtocolHandler.cpp index 5f8cf61..627a15d 100644 --- a/ircDDBGateway/Common/G2ProtocolHandler.cpp +++ b/ircDDBGateway/Common/G2ProtocolHandler.cpp @@ -144,6 +144,18 @@ CAMBEData* CG2ProtocolHandler::readAMBE() return data; } +void CG2ProtocolHandler::PunchUDPHole(const wxString& address) +{ + unsigned char buffer[1]; + buffer[0] = 0; + + in_addr addr; + addr.s_addr = ::inet_addr(address.mb_str()); + + for(int i = 0; i < 3; i++) + m_socket.write(buffer, 1, addr, m_port); +} + void CG2ProtocolHandler::close() { m_socket.close(); diff --git a/ircDDBGateway/Common/G2ProtocolHandler.h b/ircDDBGateway/Common/G2ProtocolHandler.h index 876c276..e489f28 100644 --- a/ircDDBGateway/Common/G2ProtocolHandler.h +++ b/ircDDBGateway/Common/G2ProtocolHandler.h @@ -52,6 +52,8 @@ class CG2ProtocolHandler { CHeaderData* readHeader(); CAMBEData* readAMBE(); + void PunchUDPHole(const wxString& addr); + void close(); private: diff --git a/ircDDBGateway/ircDDBGateway/IRCDDBGatewayThread.cpp b/ircDDBGateway/ircDDBGateway/IRCDDBGatewayThread.cpp index 8e139ba..4c55c51 100644 --- a/ircDDBGateway/ircDDBGateway/IRCDDBGatewayThread.cpp +++ b/ircDDBGateway/ircDDBGateway/IRCDDBGatewayThread.cpp @@ -728,6 +728,7 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!address.IsEmpty()) { wxLogMessage(wxT("USER: %s %s %s %s"), user.c_str(), repeater.c_str(), gateway.c_str(), address.c_str()); m_cache.updateUser(user, repeater, gateway, address, timestamp, DP_DEXTRA, false, false); + m_g2Handler->PunchUDPHole(address); } else { wxLogMessage(wxT("USER: %s NOT FOUND"), user.c_str()); } @@ -744,6 +745,7 @@ void CIRCDDBGatewayThread::processIrcDDB() 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); + m_g2Handler->PunchUDPHole(address); } else { wxLogMessage(wxT("REPEATER: %s NOT FOUND"), repeater.c_str()); } @@ -761,6 +763,7 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!address.IsEmpty()) { wxLogMessage(wxT("GATEWAY: %s %s"), gateway.c_str(), address.c_str()); m_cache.updateGateway(gateway, address, DP_DEXTRA, false, false); + m_g2Handler->PunchUDPHole(address); } else { wxLogMessage(wxT("GATEWAY: %s NOT FOUND"), gateway.c_str()); } From 9c8adb34e729b1bdcf5cdcc42ba9cc7fda2746f2 Mon Sep 17 00:00:00 2001 From: Geoffrey Merck F4FXL - KC3FRA Date: Thu, 1 Nov 2018 14:38:55 +0100 Subject: [PATCH 2/2] Removed unnecessary loop, using G2_DV_PORT constant --- ircDDBGateway/Common/G2ProtocolHandler.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ircDDBGateway/Common/G2ProtocolHandler.cpp b/ircDDBGateway/Common/G2ProtocolHandler.cpp index 627a15d..097891f 100644 --- a/ircDDBGateway/Common/G2ProtocolHandler.cpp +++ b/ircDDBGateway/Common/G2ProtocolHandler.cpp @@ -147,13 +147,13 @@ CAMBEData* CG2ProtocolHandler::readAMBE() void CG2ProtocolHandler::PunchUDPHole(const wxString& address) { unsigned char buffer[1]; - buffer[0] = 0; + ::memset(buffer, 0, 1); - in_addr addr; - addr.s_addr = ::inet_addr(address.mb_str()); + in_addr addr = CUDPReaderWriter::lookup(address); - for(int i = 0; i < 3; i++) - m_socket.write(buffer, 1, addr, m_port); + //wxLogError(wxT("Punching hole to %s"), address.mb_str()); + + m_socket.write(buffer, 1, addr, G2_DV_PORT); } void CG2ProtocolHandler::close()