diff --git a/.gitignore b/.gitignore index e3bcc9a..5b78d6c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ Release *.bak .vs *.a - +*.d diff --git a/APRSTransmit/APRSTransmit.vcxproj b/APRSTransmit/APRSTransmit.vcxproj index 96a54ae..afecf5d 100644 --- a/APRSTransmit/APRSTransmit.vcxproj +++ b/APRSTransmit/APRSTransmit.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName) false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/APRSTransmit/APRSTransmitD.vcxproj b/APRSTransmit/APRSTransmitD.vcxproj index 7c3486c..b03ecf3 100644 --- a/APRSTransmit/APRSTransmitD.vcxproj +++ b/APRSTransmit/APRSTransmitD.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\$(ProjectName)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/APRSTransmit/Makefile b/APRSTransmit/Makefile index 8814c53..17e82b4 100644 --- a/APRSTransmit/Makefile +++ b/APRSTransmit/Makefile @@ -1,16 +1,24 @@ OBJECTS = APRSParser.o APRSTransmitAppD.o APRSTransmit.o +.PHONY: all all: aprstransmitd -aprstransmitd: $(OBJECTS) +aprstransmitd: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o aprstransmitd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 aprstransmitd $(BINDIR) +.PHONY: clean clean: $(RM) aprstransmitd *.o *.d *.bak *~ +../Common/Common.a: + diff --git a/CHANGES.txt b/CHANGES.txt index d5b4c0e..edb04a7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1486,4 +1486,5 @@ Support the GPS data from the Kenwood TH-D74. -------- Add support for external GPS input for mobile systems. +Add audio bypass processing for fast data mode. diff --git a/Common/Common.vcxproj b/Common/Common.vcxproj index bdbcfc3..1f68ab8 100644 --- a/Common/Common.vcxproj +++ b/Common/Common.vcxproj @@ -77,6 +77,10 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) + + + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) @@ -189,6 +193,7 @@ + @@ -260,6 +265,7 @@ + diff --git a/Common/Common.vcxproj.filters b/Common/Common.vcxproj.filters index 8365240..82574fb 100644 --- a/Common/Common.vcxproj.filters +++ b/Common/Common.vcxproj.filters @@ -209,6 +209,9 @@ Source Files + + Source Files + @@ -433,5 +436,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/Common/DCSHandler.cpp b/Common/DCSHandler.cpp index 85888d2..2016805 100644 --- a/Common/DCSHandler.cpp +++ b/Common/DCSHandler.cpp @@ -39,6 +39,8 @@ CCallsignList* CDCSHandler::m_blackList = NULL; CDCSHandler::CDCSHandler(IReflectorCallback* handler, const wxString& reflector, const wxString& repeater, CDCSProtocolHandler* protoHandler, const in_addr& address, unsigned int port, DIRECTION direction) : m_reflector(reflector.Clone()), +m_xlxReflector(), +m_isXlx(false), m_repeater(repeater.Clone()), m_handler(protoHandler), m_yourAddress(address), @@ -78,6 +80,11 @@ m_rptCall2() m_linkState = DCS_LINKED; } else { m_linkState = DCS_LINKING; + m_isXlx = m_reflector.StartsWith(wxT("XLX")); + if (m_isXlx) { + m_xlxReflector = m_reflector.Clone(); + m_reflector = wxT("DCS") + m_reflector.Right(m_reflector.length() - 3); + } m_tryTimer.start(); } } @@ -162,10 +169,10 @@ void CDCSHandler::getInfo(IReflectorCallback* handler, CRemoteRepeaterData& data if (reflector->m_destination == handler) { if (reflector->m_direction == DIR_INCOMING && reflector->m_repeater.IsEmpty()) { if (reflector->m_linkState != DCS_UNLINKING) - data.addLink(reflector->m_reflector, PROTO_DCS, reflector->m_linkState == DCS_LINKED, DIR_INCOMING, true); + data.addLink(GET_DISP_REFLECTOR(reflector), PROTO_DCS, reflector->m_linkState == DCS_LINKED, DIR_INCOMING, true); } else { if (reflector->m_linkState != DCS_UNLINKING) - data.addLink(reflector->m_reflector, PROTO_DCS, reflector->m_linkState == DCS_LINKED, reflector->m_direction, false); + data.addLink(GET_DISP_REFLECTOR(reflector), PROTO_DCS, reflector->m_linkState == DCS_LINKED, reflector->m_direction, false); } } } @@ -634,10 +641,10 @@ bool CDCSHandler::processInt(CConnectData& connect, CD_TYPE type) return false; if (m_linkState == DCS_LINKING) { - wxLogMessage(wxT("DCS ACK message received from %s"), m_reflector.c_str()); + wxLogMessage(wxT("DCS ACK message received from %s"), GET_DISP_REFLECTOR(this).c_str()); if (m_direction == DIR_OUTGOING && m_destination != NULL) - m_destination->linkUp(DP_DCS, m_reflector); + m_destination->linkUp(DP_DCS, GET_DISP_REFLECTOR(this)); m_tryTimer.stop(); m_stateChange = true; @@ -651,16 +658,16 @@ bool CDCSHandler::processInt(CConnectData& connect, CD_TYPE type) return false; if (m_linkState == DCS_LINKING) { - wxLogMessage(wxT("DCS NAK message received from %s"), m_reflector.c_str()); + wxLogMessage(wxT("DCS NAK message received from %s"), GET_DISP_REFLECTOR(this).c_str()); if (m_direction == DIR_OUTGOING && m_destination != NULL) - m_destination->linkRefused(DP_DCS, m_reflector); + m_destination->linkRefused(DP_DCS, GET_DISP_REFLECTOR(this)); return true; } if (m_linkState == DCS_UNLINKING) { - wxLogMessage(wxT("DCS NAK message received from %s"), m_reflector.c_str()); + wxLogMessage(wxT("DCS NAK message received from %s"), GET_DISP_REFLECTOR(this).c_str()); if (m_direction == DIR_OUTGOING && m_destination != NULL) m_destination->linkFailed(DP_DCS, m_reflector, false); @@ -675,10 +682,10 @@ bool CDCSHandler::processInt(CConnectData& connect, CD_TYPE type) return false; if (m_linkState == DCS_LINKED) { - wxLogMessage(wxT("DCS disconnect message received from %s"), m_reflector.c_str()); + wxLogMessage(wxT("DCS disconnect message received from %s"), GET_DISP_REFLECTOR(this).c_str()); if (m_direction == DIR_OUTGOING && m_destination != NULL) - m_destination->linkFailed(DP_DCS, m_reflector, false); + m_destination->linkFailed(DP_DCS, GET_DISP_REFLECTOR(this), false); m_stateChange = true; } @@ -706,20 +713,20 @@ bool CDCSHandler::clockInt(unsigned int ms) switch (m_linkState) { case DCS_LINKING: - wxLogMessage(wxT("DCS link to %s has failed to connect"), m_reflector.c_str()); + wxLogMessage(wxT("DCS link to %s has failed to connect"), GET_DISP_REFLECTOR(this).c_str()); break; case DCS_LINKED: - wxLogMessage(wxT("DCS link to %s has failed (poll inactivity)"), m_reflector.c_str()); + wxLogMessage(wxT("DCS link to %s has failed (poll inactivity)"), GET_DISP_REFLECTOR(this).c_str()); break; case DCS_UNLINKING: - wxLogMessage(wxT("DCS link to %s has failed to disconnect cleanly"), m_reflector.c_str()); + wxLogMessage(wxT("DCS link to %s has failed to disconnect cleanly"), GET_DISP_REFLECTOR(this).c_str()); break; default: break; } if (m_direction == DIR_OUTGOING) { - bool reconnect = m_destination->linkFailed(DP_DCS, m_reflector, true); + bool reconnect = m_destination->linkFailed(DP_DCS, GET_DISP_REFLECTOR(this), true); if (reconnect) { CConnectData reply(m_gatewayType, m_repeater, m_reflector, CT_LINK1, m_yourAddress, m_yourPort); m_handler->writeConnect(reply); @@ -844,7 +851,7 @@ void CDCSHandler::writeStatus(wxFFile& file) wxString text; text.Printf(wxT("%04d-%02d-%02d %02d:%02d:%02d: DCS link - Type: Repeater Rptr: %s Refl: %s Dir: Outgoing\n"), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, - reflector->m_repeater.c_str(), reflector->m_reflector.c_str()); + reflector->m_repeater.c_str(), GET_DISP_REFLECTOR(reflector).c_str()); file.Write(text); } break; @@ -854,7 +861,7 @@ void CDCSHandler::writeStatus(wxFFile& file) wxString text; text.Printf(wxT("%04d-%02d-%02d %02d:%02d:%02d: DCS link - Type: Repeater Rptr: %s Refl: %s Dir: Incoming\n"), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, - reflector->m_repeater.c_str(), reflector->m_reflector.c_str()); + reflector->m_repeater.c_str(), GET_DISP_REFLECTOR(reflector).c_str()); file.Write(text); } break; diff --git a/Common/DCSHandler.h b/Common/DCSHandler.h index d54334a..8cd1caa 100644 --- a/Common/DCSHandler.h +++ b/Common/DCSHandler.h @@ -39,6 +39,8 @@ #include #include +#define GET_DISP_REFLECTOR(refl) (refl->m_isXlx ? refl->m_xlxReflector : refl->m_reflector) + enum DCS_STATE { DCS_LINKING, DCS_LINKED, @@ -109,6 +111,8 @@ private: static CCallsignList* m_blackList; wxString m_reflector; + wxString m_xlxReflector; + bool m_isXlx; wxString m_repeater; CDCSProtocolHandler* m_handler; in_addr m_yourAddress; diff --git a/Common/DDHandler.cpp b/Common/DDHandler.cpp index 5f85820..604babe 100644 --- a/Common/DDHandler.cpp +++ b/Common/DDHandler.cpp @@ -254,7 +254,7 @@ CDDData* CDDHandler::read() if (m_maxRoutes == 0U) return NULL; -#if !defined(WIN32) +#if defined(__WINDOWS__) return NULL; #else // Check that the read() won't block diff --git a/Common/DStarDefines.h b/Common/DStarDefines.h index e624cd1..5899b0f 100644 --- a/Common/DStarDefines.h +++ b/Common/DStarDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2015 by Jonathan Naylor, G4KLX + * Copyright (C) 2009-2015,2018,2019 by Jonathan Naylor, G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -32,8 +32,7 @@ const bool DATA_SYNC_BITS[] = {true, false, true, false, true, false, true, true, false, true, true, false, true, false, false, false, true, true, false, true, false, false, false}; -const unsigned char END_PATTERN_BYTES[] = {0x55, 0x55, 0x55, 0x55, 0xC8, 0x7A, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +const unsigned char END_PATTERN_BYTES[] = {0x55, 0x55, 0x55, 0x55, 0xC8, 0x7A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; const bool END_PATTERN_BITS[] = {true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, @@ -84,10 +83,14 @@ const unsigned int DATA_BLOCK_SIZE_BYTES = 21U * DV_FRAME_LENGTH_BYTES; const unsigned int LONG_CALLSIGN_LENGTH = 8U; const unsigned int SHORT_CALLSIGN_LENGTH = 4U; -const unsigned char SLOW_DATA_TYPE_MASK = 0xF0U; -const unsigned char SLOW_DATA_TYPE_GPS = 0x30U; -const unsigned char SLOW_DATA_TYPE_TEXT = 0x40U; -const unsigned char SLOW_DATA_TYPE_HEADER = 0x50U; +const unsigned char SLOW_DATA_TYPE_MASK = 0xF0U; +const unsigned char SLOW_DATA_TYPE_GPS = 0x30U; +const unsigned char SLOW_DATA_TYPE_TEXT = 0x40U; +const unsigned char SLOW_DATA_TYPE_HEADER = 0x50U; +const unsigned char SLOW_DATA_TYPE_FAST_DATA1 = 0x80U; +const unsigned char SLOW_DATA_TYPE_FAST_DATA2 = 0x90U; +const unsigned char SLOW_DATA_TYPE_SQUELCH = 0xC0U; +const unsigned char SLOW_DATA_LENGTH_MASK = 0x0FU; const unsigned char DATA_MASK = 0x80U; const unsigned char REPEATER_MASK = 0x40U; diff --git a/Common/DTMF.cpp b/Common/DTMF.cpp index a05cbed..bab79c3 100644 --- a/Common/DTMF.cpp +++ b/Common/DTMF.cpp @@ -167,6 +167,8 @@ wxString CDTMF::translate() return processReflector(wxT("XRF"), command.Mid(1U)); else if (command.GetChar(0U) == wxT('D')) return processReflector(wxT("DCS"), command.Mid(1U)); + else if (command.GetChar(0U) == wxT('A')) + return processReflector(wxT("XLX"), command.Mid(1U)); else return processCCS(command); } diff --git a/Common/G2ProtocolHandler.cpp b/Common/G2ProtocolHandler.cpp index 7d1fc7e..28c2a60 100644 --- a/Common/G2ProtocolHandler.cpp +++ b/Common/G2ProtocolHandler.cpp @@ -144,7 +144,8 @@ CAMBEData* CG2ProtocolHandler::readAMBE() return data; } -void CG2ProtocolHandler::punchUDPHole(const wxString& address) +#if defined(ENABLE_NAT_TRAVERSAL) +void CG2ProtocolHandler::traverseNat(const wxString& address) { unsigned char buffer[1]; ::memset(buffer, 0, 1); @@ -155,6 +156,7 @@ void CG2ProtocolHandler::punchUDPHole(const wxString& address) m_socket.write(buffer, 1, addr, G2_DV_PORT); } +#endif void CG2ProtocolHandler::close() { diff --git a/Common/G2ProtocolHandler.h b/Common/G2ProtocolHandler.h index 8b74bd5..0a60896 100644 --- a/Common/G2ProtocolHandler.h +++ b/Common/G2ProtocolHandler.h @@ -52,7 +52,9 @@ public: CHeaderData* readHeader(); CAMBEData* readAMBE(); - void punchUDPHole(const wxString& addr); +#if defined(ENABLE_NAT_TRAVERSAL) + void traverseNat(const wxString& addr); +#endif void close(); diff --git a/Common/IRCDDBGatewayConfig.cpp b/Common/IRCDDBGatewayConfig.cpp index 3748933..e796555 100644 --- a/Common/IRCDDBGatewayConfig.cpp +++ b/Common/IRCDDBGatewayConfig.cpp @@ -141,7 +141,6 @@ const wxString KEY_DCS_ENABLED = wxT("dcsEnabled"); const wxString KEY_CCS_ENABLED = wxT("ccsEnabled"); const wxString KEY_CCS_HOST = wxT("ccsHost"); const wxString KEY_XLX_ENABLED = wxT("xlxEnabled"); -const wxString KEY_XLX_OVERRIDE_LOCAL = wxT("xlxOverrideLocal"); const wxString KEY_XLX_HOSTS_FILE_URL = wxT("xlxHostsFileUrl"); const wxString KEY_STARNET_BAND1 = wxT("starNetBand1"); const wxString KEY_STARNET_CALLSIGN1 = wxT("starNetCallsign1"); @@ -267,8 +266,7 @@ const bool DEFAULT_DCS_ENABLED = true; const bool DEFAULT_CCS_ENABLED = true; const wxString DEFAULT_CCS_HOST = wxT("CCS704 "); const bool DEFAULT_XLX_ENABLED = true; -const bool DEFAULT_XLX_OVERRIDE_LOCAL = true; -const wxString DEFAULT_XLX_HOSTS_FILE_URL = _T("http://xlxapi.rlx.lu/api.php?do=GetReflectorHostname"); +const wxString DEFAULT_XLX_HOSTS_FILE_URL = wxT("http://xlxapi.rlx.lu/api.php?do=GetXLXDMRMaster");//we use the XLXDMRMaster list because it starts with XLX instead of DCS, XRF etc .... const wxString DEFAULT_STARNET_BAND = wxEmptyString; const wxString DEFAULT_STARNET_CALLSIGN = wxEmptyString; const wxString DEFAULT_STARNET_LOGOFF = wxEmptyString; @@ -422,7 +420,6 @@ m_dcsEnabled(DEFAULT_DCS_ENABLED), m_ccsEnabled(DEFAULT_CCS_ENABLED), m_ccsHost(DEFAULT_CCS_HOST), m_xlxEnabled(DEFAULT_XLX_ENABLED), -m_xlxOverrideLocal(DEFAULT_XLX_OVERRIDE_LOCAL), m_xlxHostsFileUrl(DEFAULT_XLX_HOSTS_FILE_URL), m_starNet1Band(DEFAULT_STARNET_BAND), m_starNet1Callsign(DEFAULT_STARNET_CALLSIGN), @@ -761,10 +758,10 @@ m_y(DEFAULT_WINDOW_Y) m_config->Read(m_name + KEY_CCS_HOST, &m_ccsHost, DEFAULT_CCS_HOST); m_config->Read(m_name + KEY_XLX_ENABLED, &m_xlxEnabled, DEFAULT_XLX_ENABLED); - - m_config->Read(m_name + KEY_XLX_OVERRIDE_LOCAL, &m_xlxOverrideLocal, DEFAULT_XLX_OVERRIDE_LOCAL); - + m_config->Read(m_name + KEY_XLX_HOSTS_FILE_URL, &m_xlxHostsFileUrl, DEFAULT_XLX_HOSTS_FILE_URL); + if(m_xlxEnabled && m_xlxHostsFileUrl.Trim().IsEmpty())//To avoid support nightmare, fill the url with the default one when xlx is enabled and the url is left empty + m_xlxHostsFileUrl = DEFAULT_XLX_HOSTS_FILE_URL; m_config->Read(m_name + KEY_STARNET_BAND1, &m_starNet1Band, DEFAULT_STARNET_BAND); @@ -1045,7 +1042,6 @@ m_dcsEnabled(DEFAULT_DCS_ENABLED), m_ccsEnabled(DEFAULT_CCS_ENABLED), m_ccsHost(DEFAULT_CCS_HOST), m_xlxEnabled(DEFAULT_XLX_ENABLED), -m_xlxOverrideLocal(DEFAULT_XLX_OVERRIDE_LOCAL), m_xlxHostsFileUrl(DEFAULT_XLX_HOSTS_FILE_URL), m_starNet1Band(DEFAULT_STARNET_BAND), m_starNet1Callsign(DEFAULT_STARNET_CALLSIGN), @@ -1438,10 +1434,7 @@ m_y(DEFAULT_WINDOW_Y) } else if (key.IsSameAs(KEY_XLX_ENABLED)) { val.ToLong(&temp1); m_xlxEnabled = temp1 == 1L; - } else if (key.IsSameAs(KEY_XLX_OVERRIDE_LOCAL)) { - val.ToLong(&temp1); - m_xlxOverrideLocal = temp1 == 1L; - } else if (key.IsSameAs(KEY_XLX_HOSTS_FILE_URL)) { + } else if (key.IsSameAs(KEY_XLX_HOSTS_FILE_URL) && !val.Trim().IsEmpty()) { //always load default url if the value in the config file is empty m_xlxHostsFileUrl = val; } else if (key.IsSameAs(KEY_STARNET_BAND1)) { m_starNet1Band = val; @@ -1968,17 +1961,15 @@ void CIRCDDBGatewayConfig::setDCS(bool dcsEnabled, bool ccsEnabled, const wxStri m_ccsHost = ccsHost; } -void CIRCDDBGatewayConfig::getXLX(bool& xlxEnabled, bool& xlxOverrideLocal, wxString& xlxHostsFileUrl) +void CIRCDDBGatewayConfig::getXLX(bool& xlxEnabled, wxString& xlxHostsFileUrl) { xlxEnabled = m_xlxEnabled; - xlxOverrideLocal = m_xlxOverrideLocal; xlxHostsFileUrl = m_xlxHostsFileUrl; } -void CIRCDDBGatewayConfig::setXLX(bool xlxEnabled, bool xlxOverrideLocal, wxString xlxHostsFileUrl) +void CIRCDDBGatewayConfig::setXLX(bool xlxEnabled, wxString xlxHostsFileUrl) { m_xlxEnabled = xlxEnabled; - m_xlxOverrideLocal = xlxOverrideLocal; m_xlxHostsFileUrl = xlxHostsFileUrl; } @@ -2419,7 +2410,6 @@ bool CIRCDDBGatewayConfig::write() m_config->Write(m_name + KEY_CCS_ENABLED, m_ccsEnabled); m_config->Write(m_name + KEY_CCS_HOST, m_ccsHost); m_config->Write(m_name + KEY_XLX_ENABLED, m_xlxEnabled); - m_config->Write(m_name + KEY_XLX_OVERRIDE_LOCAL, m_xlxOverrideLocal); m_config->Write(m_name + KEY_XLX_HOSTS_FILE_URL, m_xlxHostsFileUrl); m_config->Write(m_name + KEY_STARNET_BAND1, m_starNet1Band); m_config->Write(m_name + KEY_STARNET_CALLSIGN1, m_starNet1Callsign); @@ -2630,7 +2620,6 @@ bool CIRCDDBGatewayConfig::write() buffer.Printf(wxT("%s=%d"), KEY_CCS_ENABLED.c_str(), m_ccsEnabled ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_CCS_HOST.c_str(), m_ccsHost.c_str()); file.AddLine(buffer); buffer.Printf(wxT("%s=%d"), KEY_XLX_ENABLED.c_str(), m_xlxEnabled ? 1 : 0); file.AddLine(buffer); - buffer.Printf(wxT("%s=%d"), KEY_XLX_OVERRIDE_LOCAL.c_str(), m_xlxOverrideLocal ? 1 : 0); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_XLX_HOSTS_FILE_URL.c_str(), m_xlxHostsFileUrl.c_str()); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_STARNET_BAND1.c_str(), m_starNet1Band.c_str()); file.AddLine(buffer); buffer.Printf(wxT("%s=%s"), KEY_STARNET_CALLSIGN1.c_str(), m_starNet1Callsign.c_str()); file.AddLine(buffer); diff --git a/Common/IRCDDBGatewayConfig.h b/Common/IRCDDBGatewayConfig.h index b3a1dc9..962ae31 100644 --- a/Common/IRCDDBGatewayConfig.h +++ b/Common/IRCDDBGatewayConfig.h @@ -71,8 +71,8 @@ public: void getDCS(bool& dcsEnabled, bool& ccsEnabled, wxString& ccsHost) const; void setDCS(bool dcsEnabled, bool ccsEnabled, const wxString& ccsHost); - void getXLX(bool& xlxEnabled, bool& xlxOverrideLocal, wxString& xlxHostsFileUrl); - void setXLX(bool xlxEnabled, bool xlxOverrideLocal, wxString xlxHostsFileUrl); + void getXLX(bool& xlxEnabled, wxString& xlxHostsFileUrl); + void setXLX(bool xlxEnabled, wxString xlxHostsFileUrl); #if defined(DEXTRA_LINK) || defined(DCS_LINK) void getStarNet1(wxString& band, wxString& callsign, wxString& logoff, wxString& info, wxString& permanent, unsigned int& userTimeout, unsigned int& groupTimeout, STARNET_CALLSIGN_SWITCH& callsignSwitch, bool& txMsgSwitch, wxString& reflector) const; diff --git a/Common/Logger.cpp b/Common/Logger.cpp index 9931f33..abe3da9 100644 --- a/Common/Logger.cpp +++ b/Common/Logger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002,2003,2009,2011,2012 by Jonathan Naylor G4KLX + * Copyright (C) 2002,2003,2009,2011,2012,2019 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -66,11 +66,10 @@ CLogger::~CLogger() delete m_file; } -void CLogger::DoLog(wxLogLevel level, const wxChar* msg, time_t timestamp) +void CLogger::DoLogRecord(wxLogLevel level, const wxString& msg, const wxLogRecordInfo& info) { wxASSERT(m_file != NULL); wxASSERT(m_file->IsOpened()); - wxASSERT(msg != NULL); wxString letter; @@ -94,15 +93,15 @@ void CLogger::DoLog(wxLogLevel level, const wxChar* msg, time_t timestamp) } wxString message; - message.Printf(wxT("%s: %04d-%02d-%02d %02d:%02d:%02d: %s\n"), letter.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, msg); + message.Printf(wxT("%s: %04d-%02d-%02d %02d:%02d:%02d: %s\n"), letter.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, msg.c_str()); - DoLogString(message.c_str(), timestamp); + writeLog(message.c_str(), info.timestamp); if (level == wxLOG_FatalError) ::abort(); } -void CLogger::DoLogString(const wxChar* msg, time_t timestamp) +void CLogger::writeLog(const wxChar* msg, time_t timestamp) { wxASSERT(m_file != NULL); wxASSERT(m_file->IsOpened()); diff --git a/Common/Logger.h b/Common/Logger.h index 8c5c6e3..e95ea32 100644 --- a/Common/Logger.h +++ b/Common/Logger.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002,2003,2009,2011,2012 by Jonathan Naylor G4KLX + * Copyright (C) 2002,2003,2009,2011,2012,2019 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -28,8 +28,7 @@ public: CLogger(const wxString& directory, const wxString& name); virtual ~CLogger(); - virtual void DoLog(wxLogLevel level, const wxChar* msg, time_t timestamp); - virtual void DoLogString(const wxChar* msg, time_t timestamp); + virtual void DoLogRecord(wxLogLevel level, const wxString& msg, const wxLogRecordInfo& info); virtual void DoLogRecord(wxLogLevel level, const wxString& msg, const wxLogRecordInfo& info); @@ -38,6 +37,8 @@ private: wxFFile* m_file; wxFileName m_fileName; int m_day; + + void writeLog(const wxChar* msg, time_t timestamp); }; #endif diff --git a/Common/Makefile b/Common/Makefile index 8643148..e215ea2 100644 --- a/Common/Makefile +++ b/Common/Makefile @@ -4,19 +4,25 @@ OBJECTS = AMBEData.o AnnouncementUnit.o APRSCollector.o APRSWriter.o APRSWriterT DPlusAuthenticator.o DPlusHandler.o DPlusProtocolHandler.o DPlusProtocolHandlerPool.o DRATSServer.o DTMF.o \ DummyRepeaterProtocolHandler.o DVTOOLFileReader.o EchoUnit.o G2Handler.o G2ProtocolHandler.o GatewayCache.o \ HBRepeaterProtocolHandler.o HeaderData.o HeaderLogger.o HeardData.o HostFile.o IcomRepeaterProtocolHandler.o IRCDDBGatewayConfig.o \ - LogEvent.o Logger.o PollData.o RemoteHandler.o RemoteLinkData.o RemoteProtocolHandler.o RemoteRepeaterData.o RemoteStarNetGroup.o \ + LogEvent.o Logger.o NatTraversalHandler.o PollData.o RemoteHandler.o RemoteLinkData.o RemoteProtocolHandler.o RemoteRepeaterData.o RemoteStarNetGroup.o \ RemoteStarNetUser.o RepeaterCache.o RepeaterHandler.o SHA256.o SlowDataEncoder.o StarNetHandler.o StatusData.o \ TCPReaderWriterClient.o TCPReaderWriterServer.o TextCollector.o TextData.o Timer.o UDPReaderWriter.o UserCache.o Utils.o \ VersionUnit.o XLXHostsFileDownloader.o +.PHONY: all all: Common.a -Common.a: $(OBJECTS) +Common.a: $(OBJECTS) ../ircDDB/IRCDDB.a $(AR) rcs Common.a $(OBJECTS) +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../ircDDB -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../ircDDB $< > $*.d +.PHONY: clean clean: $(RM) Common.a *.o *.d *.bak *~ +../ircDDB/IRCDDB.a: diff --git a/Common/NatTraversalHandler.cpp b/Common/NatTraversalHandler.cpp new file mode 100644 index 0000000..8ee9ac0 --- /dev/null +++ b/Common/NatTraversalHandler.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if defined(ENABLE_NAT_TRAVERSAL) + +#include "NatTraversalHandler.h" + +const unsigned int CACHE_SIZE = 500U; + +CNatTraversalHandler::CNatTraversalHandler() : +m_g2cache(CACHE_SIZE), +m_g2Handler(NULL) +{ + +} + +CNatTraversalHandler::~CNatTraversalHandler() +{ + for (CNatTraversalCache_t::iterator it = m_g2cache.begin(); it != m_g2cache.end(); ++it) + delete it->second; +} + +void CNatTraversalHandler::setG2Handler(CG2ProtocolHandler * handler) +{ + m_g2Handler = handler; +} + +void CNatTraversalHandler::traverseNatG2(const wxString& address) +{ + if(m_g2Handler != NULL){ + CNatTraversalRecord* record = m_g2cache[address]; + + if(record == NULL) { + record = new CNatTraversalRecord(address); + m_g2cache[address] = record; + } + + std::time_t currentTime = std::time(NULL); + if(currentTime - record->getTimestamp() > G2_TRAVERSAL_TIMEOUT) { + record->setTimestamp(currentTime); + m_g2Handler->traverseNat(address); + } + } +} + +#endif \ No newline at end of file diff --git a/Common/NatTraversalHandler.h b/Common/NatTraversalHandler.h new file mode 100644 index 0000000..0069fea --- /dev/null +++ b/Common/NatTraversalHandler.h @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2010,2011,2012,2013,2014,2015,2016,2017,2018 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#if defined(ENABLE_NAT_TRAVERSAL) +#ifndef NatTraversalHandler_H +#define NatTraversalHandler_H + +#define G2_TRAVERSAL_TIMEOUT 29 //seconds + +#include "G2ProtocolHandler.h" + +#include +#include + +enum NAT_TRAVERSAL_TYPE { + NTT_G2, + //NTT_DEXTRA + //NTT_DCS + //NTT_DPLUS +}; + +class CNatTraversalRecord { +public: + CNatTraversalRecord(const wxString& address) : + m_address(address), + m_timestamp(0) + { + } + + std::time_t getTimestamp() const + { + return m_timestamp; + } + + void setTimestamp(std::time_t timestamp) + { + m_timestamp = timestamp; + } + +private: + wxString m_address; + std::time_t m_timestamp; +}; + +WX_DECLARE_STRING_HASH_MAP(CNatTraversalRecord*, CNatTraversalCache_t); + +/* +* This keeps track of when we UDP punched to one destination so to avoid unnecessary traffic on each ircddb reporting +*/ +class CNatTraversalHandler { +public: + CNatTraversalHandler(); + ~CNatTraversalHandler(); + + void setG2Handler(CG2ProtocolHandler* handler); + void traverseNatG2(const wxString& address); + +private: + CNatTraversalCache_t m_g2cache; + CG2ProtocolHandler* m_g2Handler; +}; + +#endif + +#endif \ No newline at end of file diff --git a/Common/RepeaterHandler.cpp b/Common/RepeaterHandler.cpp index 215e0dd..6f883fb 100644 --- a/Common/RepeaterHandler.cpp +++ b/Common/RepeaterHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2015 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2015,2018,2019 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -95,6 +95,7 @@ m_flag1(0x00U), m_flag2(0x00U), m_flag3(0x00U), m_restricted(false), +m_fastData(false), m_frames(0U), m_silence(0U), m_errors(0U), @@ -582,6 +583,9 @@ void CRepeaterHandler::processRepeater(CHeaderData& header) m_silence = 0U; m_errors = 0U; + // Assume voice mode + m_fastData = false; + // An RF header resets the reconnect timer m_linkReconnectTimer.start(); @@ -736,32 +740,42 @@ void CRepeaterHandler::processRepeater(CAMBEData& data) unsigned char buffer[DV_FRAME_MAX_LENGTH_BYTES]; data.getData(buffer, DV_FRAME_MAX_LENGTH_BYTES); - if (::memcmp(buffer, NULL_AMBE_DATA_BYTES, VOICE_FRAME_LENGTH_BYTES) == 0) - m_silence++; + // Check for the fast data signature + if (!m_fastData) { + unsigned char slowDataType = (buffer[VOICE_FRAME_LENGTH_BYTES] ^ SCRAMBLER_BYTE1) & SLOW_DATA_TYPE_MASK; + if (slowDataType == SLOW_DATA_TYPE_FAST_DATA1 || slowDataType == SLOW_DATA_TYPE_FAST_DATA2) + m_fastData = true; + } - // Don't do DTMF decoding or blanking if off and not on crossband either - if (m_dtmfEnabled && m_g2Status != G2_XBAND) { - bool pressed = m_dtmf.decode(buffer, data.isEnd()); - if (pressed) { - // Replace the DTMF with silence - ::memcpy(buffer, NULL_AMBE_DATA_BYTES, VOICE_FRAME_LENGTH_BYTES); - data.setData(buffer, DV_FRAME_LENGTH_BYTES); - } + // Don't do AMBE processing when in Fast Data mode + if (!m_fastData) { + if (::memcmp(buffer, NULL_AMBE_DATA_BYTES, VOICE_FRAME_LENGTH_BYTES) == 0) + m_silence++; - bool dtmfDone = m_dtmf.hasCommand(); - if (dtmfDone) { - wxString command = m_dtmf.translate(); + // Don't do DTMF decoding or blanking if off and not on crossband either + if (m_dtmfEnabled && m_g2Status != G2_XBAND) { + bool pressed = m_dtmf.decode(buffer, data.isEnd()); + if (pressed) { + // Replace the DTMF with silence + ::memcpy(buffer, NULL_AMBE_DATA_BYTES, VOICE_FRAME_LENGTH_BYTES); + data.setData(buffer, DV_FRAME_LENGTH_BYTES); + } - // Only process the DTMF command if the your call is CQCQCQ and not a restricted user - if (!m_restricted && m_yourCall.Left(4U).IsSameAs(wxT("CQCQ"))) { - if (command.IsEmpty()) { - // Do nothing - } else if (isCCSCommand(command)) { - ccsCommandHandler(command, m_myCall1, wxT("DTMF")); - } else if (command.IsSameAs(wxT(" I"))) { - m_infoNeeded = true; - } else { - reflectorCommandHandler(command, m_myCall1, wxT("DTMF")); + bool dtmfDone = m_dtmf.hasCommand(); + if (dtmfDone) { + wxString command = m_dtmf.translate(); + + // Only process the DTMF command if the your call is CQCQCQ and not a restricted user + if (!m_restricted && m_yourCall.Left(4U).IsSameAs(wxT("CQCQ"))) { + if (command.IsEmpty()) { + // Do nothing + } else if (isCCSCommand(command)) { + ccsCommandHandler(command, m_myCall1, wxT("DTMF")); + } else if (command.IsSameAs(wxT(" I"))) { + m_infoNeeded = true; + } else { + reflectorCommandHandler(command, m_myCall1, wxT("DTMF")); + } } } } diff --git a/Common/RepeaterHandler.h b/Common/RepeaterHandler.h index 5871775..05baca2 100644 --- a/Common/RepeaterHandler.h +++ b/Common/RepeaterHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2015 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2015,2018 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -208,6 +208,7 @@ private: unsigned char m_flag2; unsigned char m_flag3; bool m_restricted; + bool m_fastData; // Statistics unsigned int m_frames; diff --git a/Common/Version.h b/Common/Version.h index a65d9b2..36c6527 100644 --- a/Common/Version.h +++ b/Common/Version.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2015,2018 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2015,2018,2019 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,9 +24,9 @@ const wxString VENDOR_NAME = wxT("G4KLX"); #if defined(__WXDEBUG__) -const wxString VERSION = wxT("20180719 - DEBUG"); +const wxString VERSION = wxT("20190402 - DEBUG"); #else -const wxString VERSION = wxT("20180719"); +const wxString VERSION = wxT("20190402"); #endif #endif diff --git a/Common/XLXHostsFileDownloader.cpp b/Common/XLXHostsFileDownloader.cpp index aab4016..09c6be8 100644 --- a/Common/XLXHostsFileDownloader.cpp +++ b/Common/XLXHostsFileDownloader.cpp @@ -67,8 +67,8 @@ wxString CXLXHostsFileDownloader::Download(const wxString & xlxHostsFileURL) return wxEmptyString; } - wxInputStream* in = NULL; - if((in = http.GetInputStream(path)) && in->IsOk()) { + wxInputStream* in = http.GetInputStream(path); + if(in != NULL && in->IsOk()) { wxFile file; wxString xlxHostsFileName = wxFileName::CreateTempFileName(_T("XLX_Hosts_"), &file); wxLogMessage(_T("Created temporary file %s"), xlxHostsFileName); diff --git a/Common/XLXHostsFileDownloader.h b/Common/XLXHostsFileDownloader.h index 7fba376..b7212a9 100644 --- a/Common/XLXHostsFileDownloader.h +++ b/Common/XLXHostsFileDownloader.h @@ -19,9 +19,13 @@ #ifndef XLXHostsFileDownloader_H #define XLXHostsFileDownloader_H -#define XLX_USE_WGET + #include +#if !defined (__WINDOWS__) +#define XLX_USE_WGET //for some reason libwx is missing the net stuff on some distros, therefore always use wget if we are not compiling under windows +#endif + class CXLXHostsFileDownloader { public: static wxString Download(const wxString & xlxHostsFileURL); diff --git a/Data/DCS_Hosts.txt b/Data/DCS_Hosts.txt index 6937b10..f4da4f2 100644 --- a/Data/DCS_Hosts.txt +++ b/Data/DCS_Hosts.txt @@ -1,89 +1,104 @@ -# DCS_Hosts.txt downloaded from http://www.pistar.uk/downloads/DCS_Hosts.txt -# DCS Hosts resolved from xreflector.net DNS, with additional hosts -# sourced from http://xlxapi.rlx.lu/api.php?do=GetReflectorHostname -# Please report issues at https://www.facebook.com/groups/pistar/ -# File created at Tuesday 10th of July 2018 08:13:04 PM BST +# Prepared at ar-dns.net - Sun, 19 May 2019 12:38:05 GMT DCS000 23.111.174.198 -DCS001 176.10.105.252 -DCS002 195.225.116.201 -DCS003 176.10.105.254 -DCS004 77.243.52.148 -DCS005 87.117.229.174 L -DCS006 24.233.213.165 L -DCS007 80.69.86.234 -DCS008 87.106.84.53 -DCS009 89.185.97.35 -DCS010 85.197.129.86 L -DCS011 81.95.126.168 -DCS012 194.38.140.205 L -DCS013 195.159.104.200 -DCS014 52.63.223.130 -DCS015 213.202.228.119 -DCS016 75.99.228.34 -DCS017 81.169.228.115 L -DCS018 212.237.50.28 -DCS019 31.7.247.58 -DCS020 75.76.90.90 -DCS021 183.177.205.142 -DCS022 157.7.142.179 -DCS023 77.85.192.94 -DCS024 75.151.47.163 -DCS025 87.229.30.227 -DCS026 65.175.188.230 -DCS027 128.199.57.19 -DCS028 172.104.63.79 L -DCS029 74.210.135.144 +DCS001 dcs001.xreflector.net +DCS002 dcs002.xreflector.net +DCS003 dcs003.xreflector.net +DCS004 dcs004.xreflector.net +DCS005 dcs.bm-dmr.uk +DCS006 dcs006.xreflector.net +DCS006 146.168.196.187 +DCS007 dcs007.xreflector.net +DCS008 dcs008.xreflector.net +DCS009 dcs009.xreflector.net +DCS010 85.197.129.86 +DCS010 dcs010.xreflector.net +DCS011 dcs011.xreflector.net +DCS012 194.38.140.205 +DCS012 dcs012.xreflector.net +DCS013 dcs013.xreflector.net +DCS014 dcs014.xreflector.net +DCS015 dcs015.xreflector.net +DCS016 dcs016.xreflector.net +DCS017 dcs017.xreflector.net +DCS018 dcs018.xreflector.net +DCS019 dcs019.xreflector.net +DCS020 3.208.40.45 +DCS021 dcs021.xreflector.net +DCS022 dcs022.xreflector.net +DCS023 dcs023.xreflector.net +DCS024 dcs024.xreflector.net +DCS025 dcs025.xreflector.net +DCS026 dcs026.xreflector.net +DCS027 dcs027.xreflector.net +DCS028 xlx028.org +DCS029 dcs029.xreflector.net DCS030 194.59.177.44 -DCS032 158.64.26.140 -DCS033 51.255.35.215 +DCS032 dcs032.xreflector.net +DCS033 dcs033.xreflector.net DCS035 45.79.94.184 DCS036 151.12.36.112 +DCS038 5.249.151.111 DCS039 31.14.142.119 DCS040 109.71.45.29 -DCS044 77.243.52.148 +DCS041 45.62.226.137 +DCS044 dcs044.xreflector.net +DCS045 64.137.172.60 DCS046 176.10.140.161 -DCS047 121.94.194.251 +DCS047 202.171.147.58 DCS049 212.71.234.224 +DCS050 80.211.155.206 DCS051 93.186.254.219 -DCS052 121.119.96.205 -DCS053 91.214.62.136 +DCS052 121.116.69.175 +DCS053 5.133.99.12 DCS054 52.86.180.251 DCS055 52.80.4.154 -DCS057 173.216.181.178 -DCS058 115.162.207.228 +DCS057 74.193.217.15 +DCS058 150.66.16.176 DCS059 18.219.32.21 DCS060 212.237.36.181 -DCS061 68.115.205.110 -DCS062 70.88.145.163 +DCS061 208.71.169.83 +DCS062 72.17.20.173 DCS064 122.222.1.50 -DCS066 80.116.203.88 +DCS066 79.55.195.190 +DCS067 95.60.130.176 DCS068 92.222.145.202 +DCS069 89.36.214.120 DCS071 211.60.41.185 +DCS072 75.60.237.17 +DCS073 114.224.6.211 DCS074 212.237.211.82 DCS075 5.135.162.136 DCS076 203.137.116.117 -DCS077 5.249.151.111 -DCS078 109.10.128.221 -DCS079 184.23.183.98 -DCS080 121.85.175.69 -DCS081 121.84.13.151 -DCS085 27.92.11.123 -DCS086 220.133.89.28 +DCS077 216.21.9.156 +DCS078 109.15.57.11 +DCS079 121.162.91.31 +DCS080 121.81.128.207 +DCS081 121.82.151.243 +DCS082 110.232.113.108 +DCS083 185.205.210.217 +DCS084 45.79.93.167 +DCS085 113.150.26.8 +DCS086 52.80.139.252 +DCS087 44.137.36.209 DCS088 194.109.192.235 DCS089 194.109.192.236 DCS090 91.92.136.252 -DCS092 212.237.30.36 +DCS092 104.200.25.53 +DCS093 185.177.59.221 DCS095 203.137.76.53 -DCS098 111.169.16.250 +DCS097 80.211.154.173 +DCS098 203.136.233.165 DCS099 80.211.27.75 -DCS101 45.62.213.101 +DCS100 45.62.234.223 +DCS101 64.137.236.164 DCS102 23.111.174.196 DCS103 64.137.224.126 DCS104 23.111.174.197 DCS105 51.254.99.78 -DCS109 182.168.101.180 +DCS109 115.179.53.132 DCS110 150.7.164.10 DCS111 61.195.96.160 +DCS112 94.177.235.81 DCS113 151.12.36.103 DCS114 5.135.188.16 DCS115 217.182.128.3 @@ -92,23 +107,37 @@ DCS118 5.249.148.252 DCS119 125.129.207.86 DCS120 81.150.10.63 DCS121 174.37.249.156 -DCS122 83.137.45.100 +DCS122 83.137.45.126 DCS124 211.14.169.234 DCS125 213.181.208.52 -DCS129 219.116.28.227 +DCS127 190.112.228.107 +DCS128 153.248.144.11 +DCS129 111.64.166.200 DCS130 194.59.177.45 DCS131 80.127.118.226 DCS132 91.203.55.87 DCS134 159.89.176.86 +DCS135 74.208.214.69 +DCS140 95.211.211.145 +DCS142 44.168.48.8 DCS145 178.59.23.138 +DCS146 213.7.197.202 DCS147 46.41.1.127 DCS150 80.211.10.212 +DCS153 210.189.104.236 +DCS155 18.235.96.93 +DCS158 150.66.16.176 +DCS160 61.195.109.179 DCS170 210.178.113.173 -DCS171 121.162.91.45 +DCS171 210.178.113.123 +DCS175 162.248.92.25 DCS180 192.241.240.7 +DCS185 89.106.108.151 +DCS190 190.194.12.53 DCS199 153.126.179.214 +DCS200 185.203.119.158 DCS202 148.251.122.251 -DCS204 185.85.18.162 +DCS204 85.214.126.111 DCS206 193.190.240.227 DCS208 151.80.155.39 DCS210 64.137.224.107 @@ -119,8 +148,9 @@ DCS216 74.214.25.135 DCS220 124.41.83.11 DCS222 212.43.96.84 DCS224 203.137.99.97 -DCS226 94.176.6.37 -DCS228 188.60.43.206 +DCS226 2.226.183.226 +DCS227 89.33.44.100 +DCS228 85.6.171.146 DCS229 194.191.4.54 DCS230 80.250.3.114 DCS232 89.185.97.35 @@ -129,188 +159,309 @@ DCS238 172.104.239.219 DCS241 151.80.158.227 DCS242 73.14.84.43 DCS246 172.93.48.159 +DCS255 142.91.158.199 +DCS257 47.157.82.87 +DCS258 75.60.237.19 +DCS261 44.144.0.23 +DCS262 87.139.70.67 DCS263 85.214.193.146 DCS264 52.2.131.118 +DCS265 212.237.51.82 DCS266 212.237.51.82 DCS268 194.38.140.204 DCS270 158.64.26.132 +DCS272 177.194.25.234 +DCS274 75.115.207.48 +DCS280 87.19.134.242 DCS282 210.188.25.17 DCS284 95.158.165.32 -DCS290 94.176.6.45 +DCS285 91.92.93.15 +DCS287 43.245.172.2 +DCS288 121.75.75.200 +DCS290 44.182.7.20 DCS291 101.143.242.189 -DCS295 64.137.160.185 -DCS298 119.238.135.207 -DCS299 125.236.227.43 -DCS300 45.62.244.43 +DCS295 45.62.224.93 +DCS298 122.131.152.80 +DCS299 203.86.194.92 +DCS300 45.62.247.43 DCS302 144.217.241.23 +DCS303 75.70.52.143 +DCS305 145.239.116.57 DCS307 72.21.76.154 DCS310 52.11.207.121 +DCS311 46.41.0.214 +DCS312 192.241.160.183 DCS313 34.213.108.164 DCS315 65.101.7.50 DCS317 44.48.8.15 DCS321 31.207.110.45 DCS328 212.237.33.114 +DCS329 114.181.139.32 +DCS330 18.222.199.205 DCS332 188.213.168.99 DCS333 194.116.29.73 DCS334 96.47.95.121 DCS335 185.206.145.2 DCS336 23.226.233.133 +DCS338 122.116.216.47 DCS339 198.98.53.247 DCS345 45.62.237.34 -DCS357 52.39.82.54 +DCS352 35.230.162.146 +DCS357 93.152.167.4 +DCS358 93.152.167.4 DCS359 94.156.172.213 DCS360 222.229.25.105 +DCS364 159.65.231.53 DCS365 59.139.141.204 +DCS367 xrf367.ad6dm.net +DCS367 18.216.66.72 DCS370 188.213.168.24 DCS371 212.237.8.77 -DCS373 101.143.25.116 +DCS373 119.229.134.1 DCS374 61.195.108.146 DCS376 75.145.119.225 +DCS377 186.159.96.100 +DCS379 104.218.36.162 DCS380 160.16.65.39 -DCS382 211.131.185.61 +DCS382 211.131.3.119 DCS388 138.197.67.52 -DCS389 106.70.187.224 +DCS389 106.71.212.36 +DCS389 xlxdmr.duckdns.org DCS390 149.7.214.253 +DCS393 139.91.200.186 +DCS395 5.249.151.111 +DCS398 45.62.243.153 +DCS399 185.227.110.247 DCS400 13.58.192.185 DCS404 91.229.143.187 -DCS410 166.78.156.246 +DCS410 166.78.145.146 +DCS411 82.171.119.45 DCS412 61.195.107.113 +DCS420 174.138.113.116 +DCS421 118.189.181.236 DCS431 61.195.98.225 DCS433 217.160.22.17 DCS434 51.254.128.134 -DCS440 114.161.161.90 +DCS438 80.211.189.236 +DCS440 153.176.140.229 DCS441 203.137.99.110 DCS444 188.68.37.51 DCS449 159.89.183.117 DCS450 64.137.224.233 -DCS454 221.125.255.216 +DCS454 218.250.250.21 +DCS455 208.71.169.83 +DCS456 xrf456.de DCS456 54.37.204.187 +DCS460 183.53.66.145 DCS464 52.192.129.174 DCS470 104.49.29.243 DCS477 139.162.213.89 +DCS479 198.58.106.10 DCS486 51.255.172.249 +DCS487 93.66.214.109 DCS499 203.137.76.22 -DCS500 172.104.32.192 +DCS500 58.96.21.253 +DCS501 198.211.98.63 DCS502 190.148.222.28 -DCS505 110.141.219.161 +DCS505 45.248.50.37 +DCS506 121.200.19.211 DCS508 185.188.4.15 -DCS511 84.52.159.10 -DCS515 133.130.114.45 +DCS510 110.141.219.161 +DCS511 213.172.232.13 +DCS515 203.137.78.35 DCS518 176.9.1.168 -DCS519 167.114.104.65 -DCS520 119.59.125.192 +DCS519 149.56.165.76 +DCS520 xlx.dtdxa.com DCS521 150.129.184.54 DCS522 14.102.146.160 -DCS525 176.65.95.90 -DCS538 133.218.172.211 -DCS544 210.131.32.240 -DCS550 94.177.240.69 +DCS523 175.142.199.32 +DCS525 80.211.68.38 +DCS530 116.251.193.99 +DCS534 208.71.169.83 +DCS538 131.129.217.94 +DCS544 202.218.152.66 +DCS550 89.36.222.146 +DCS551 140.227.198.45 +DCS553 45.79.92.86 DCS554 52.35.183.178 -DCS555 64.137.186.11 +DCS555 xlx555.dtdxa.com DCS567 212.91.156.69 DCS569 203.137.111.98 -DCS583 116.70.242.224 -DCS595 175.179.56.111 +DCS570 172.104.13.31 +DCS573 216.189.148.204 +DCS583 116.70.240.104 +DCS587 68.32.126.21 +DCS595 220.146.24.34 +DCS599 203.137.118.190 DCS600 13.69.14.204 DCS601 51.141.52.193 DCS602 212.56.100.200 -DCS603 216.10.169.35 +DCS603 216.246.155.99 +DCS604 139.162.241.24 +DCS605 183.76.179.238 DCS608 219.122.253.83 +DCS609 219.122.253.83 DCS610 89.186.80.81 -DCS626 202.137.244.157 -DCS634 61.199.25.130 +DCS613 198.50.202.39 +DCS619 167.99.168.82 +DCS626 45.77.234.162 +DCS627 121.75.75.200 +DCS630 61.195.125.81 +DCS634 222.148.104.64 +DCS647 217.182.168.54 +DCS651 198.96.90.144 DCS655 146.64.235.19 -DCS666 54.144.216.63 +DCS666 86.153.215.35 +DCS672 180.27.223.252 DCS673 180.147.243.178 DCS684 212.237.17.83 DCS689 97.107.128.47 -DCS698 85.197.129.86 +DCS695 155.254.33.145 +DCS698 203.137.123.89 DCS699 82.102.5.239 -DCS700 78.47.222.93 +DCS700 2.29.27.21 DCS701 61.195.107.77 DCS703 61.195.98.254 +DCS704 150.66.34.110 DCS706 93.186.255.126 DCS707 90.145.156.196 -DCS708 202.218.37.62 +DCS708 150.66.20.222 DCS709 212.237.34.32 DCS711 212.237.18.27 -DCS712 180.11.74.19 -DCS714 85.214.119.76 +DCS712 153.215.181.34 +DCS713 218.251.63.99 +DCS714 81.169.140.163 DCS717 44.137.70.100 DCS722 80.211.2.161 -DCS724 66.55.64.14 -DCS730 186.64.123.59 +DCS723 45.33.118.112 +DCS724 xlx.dvbrazil.com.br +DCS724 75.99.228.35 +DCS725 172.245.9.180 +DCS730 190.14.50.165 DCS732 190.159.68.105 DCS733 45.56.117.158 +DCS734 181.208.254.236 DCS735 104.131.81.32 DCS737 195.130.75.246 -DCS740 173.208.200.180 +DCS738 210.171.151.238 +DCS740 104.167.114.230 +DCS741 203.137.78.41 DCS746 178.254.34.44 -DCS747 87.147.133.4 +DCS747 93.209.44.227 DCS748 64.137.197.36 +DCS749 45.77.102.203 +DCS750 203.86.206.49 +DCS751 203.118.145.79 DCS752 66.154.105.195 DCS755 178.22.148.229 +DCS757 43.229.63.42 +DCS762 129.21.36.65 DCS766 201.62.48.61 -DCS773 94.177.175.230 +DCS768 80.211.199.231 +DCS770 153.126.173.9 +DCS773 89.46.75.166 DCS775 149.202.61.17 -DCS776 218.221.163.75 +DCS776 182.168.37.205 DCS777 194.182.66.76 DCS781 101.143.242.199 +DCS782 153.221.123.92 DCS787 46.41.1.96 +DCS788 192.168.0.96 DCS789 45.33.119.142 DCS794 101.143.242.95 +DCS800 87.252.188.119 DCS801 213.47.71.17 -DCS803 77.117.38.125 -DCS806 92.105.198.59 +DCS803 77.117.21.251 +DCS806 92.107.25.23 +DCS807 153.167.124.196 DCS808 18.220.252.27 -DCS810 64.137.238.189 +DCS809 78.46.11.69 +DCS810 71.41.121.228 +DCS811 64.137.238.189 DCS812 203.145.233.141 DCS813 97.76.81.165 +DCS817 18.235.96.93 +DCS818 120.79.155.116 +DCS825 51.75.252.197 DCS828 195.225.116.244 +DCS833 78.226.112.146 DCS844 137.226.79.122 +DCS847 162.243.4.29 DCS850 88.198.94.77 -DCS860 80.81.9.242 +DCS852 42.2.140.44 +DCS858 54.227.203.214 +DCS859 54.227.203.214 +DCS860 24.134.86.93 +DCS861 66.175.218.63 +DCS865 45.32.212.226 +DCS866 93.233.182.237 +DCS867 51.254.115.5 DCS870 103.3.234.95 +DCS871 182.245.190.200 DCS878 203.137.123.113 -DCS883 153.185.38.99 +DCS880 176.10.105.211 +DCS883 153.179.224.224 DCS886 118.163.103.178 DCS887 118.163.103.177 -DCS888 95.239.164.147 -DCS893 103.235.127.147 +DCS888 46.18.142.169 +DCS889 130.149.36.93 +DCS893 104.223.59.212 +DCS897 212.237.2.183 DCS900 94.177.237.192 DCS903 80.211.29.226 +DCS904 211.14.169.215 DCS906 212.237.11.53 -DCS907 88.11.249.48 +DCS907 176.84.63.187 DCS908 92.222.23.124 DCS909 216.86.147.198 DCS910 94.177.207.26 -DCS911 5.196.73.89 +DCS911 xlx911.patrweb.com DCS912 80.211.1.143 +DCS915 72.28.30.93 DCS919 80.211.232.174 +DCS920 81.150.10.62 DCS921 44.143.184.83 DCS922 81.150.10.62 DCS925 90.255.232.101 DCS929 158.69.166.132 DCS930 94.177.160.5 -DCS931 71.120.181.98 +DCS931 68.131.30.206 DCS933 164.132.104.167 DCS935 188.213.166.199 DCS940 202.218.37.121 DCS944 202.218.34.210 -DCS945 155.94.147.186 +DCS945 213.202.229.40 +DCS946 212.227.174.45 DCS950 158.64.26.134 +DCS951 18.188.166.109 +DCS956 192.99.245.120 +DCS959 203.137.98.121 DCS964 52.173.142.244 -DCS972 46.121.158.50 +DCS965 47.23.66.19 +DCS966 203.150.19.24 +DCS967 95.158.165.32 +DCS969 142.93.46.36 +DCS970 157.7.221.186 +DCS972 109.226.48.53 DCS973 211.14.169.43 DCS974 94.177.217.52 DCS975 176.31.161.9 -DCS986 81.89.102.160 +DCS976 212.237.36.71 +DCS979 217.162.36.91 +DCS980 80.211.84.249 +DCS986 194.59.205.218 DCS987 185.32.183.148 +DCS988 80.211.236.189 DCS989 50.27.131.75 DCS990 35.164.237.63 -DCS991 2.237.27.66 -DCS995 158.69.201.255 +DCS991 80.211.19.121 +DCS992 149.28.243.165 +DCS993 97.64.20.63 +DCS994 35.177.233.106 +DCS995 118.27.30.92 DCS996 47.104.177.248 DCS997 94.177.187.40 DCS998 44.140.236.20 DCS999 94.177.173.53 +DSC034 dcs034.xreflector.net +# EOF - Sun, 19 May 2019 12:38:05 GMT diff --git a/Data/DExtra_Hosts.txt b/Data/DExtra_Hosts.txt index 95bd1bd..11df3ce 100644 --- a/Data/DExtra_Hosts.txt +++ b/Data/DExtra_Hosts.txt @@ -1,374 +1,747 @@ +# Prepared at ar-dns.net - Sun, 19 May 2019 12:35:55 GMT +XRF000 23.111.174.198 XRF000 000.xreflector.org +XRF001 77.57.24.143 XRF001 xlx001.homepc.it +XRF002 140.82.62.162 XRF002 xrf002.dstar.club +XRF003 173.199.124.183 XRF003 xlx003.xrefl.net +XRF004 44.103.34.3 XRF004 xrf004.kb8zgl.net -XRF005 216.16.240.236 +XRF005 50.116.62.225 +XRF005 ve3tnk.homelinux.net +XRF006 34.213.176.201 XRF006 xrf006.xrefl.net -XRF007 82.223.18.138 -XRF008 xrf008.kingsofdigital.net -XRF009 www.hamtalk.net +XRF007 82.223.18.138 +XRF008 45.77.153.132 +XRF008 xrf008.kingsofdigital.net +XRF009 118.150.164.96 +XRF009 www.hamtalk.net XRF010 85.197.129.86 +XRF010 xlx010.n8qq.com XRF011 81.95.126.168 -XRF012 xrf012.papasys.com +XRF011 xlx011.warn.org +XRF012 52.26.161.5 +XRF012 xrf012.papasys.com XRF013 34.213.176.201 +XRF013 xrf013.perform2themax.com XRF014 xrf014.iz0rin.it -XRF015 213.202.228.119 +XRF015 194.59.205.228 +XRF015 xrf015.theapplecore.me XRF016 xrf016.ampr.at XRF017 92.177.212.64 -XRF018 99.167.129.166 -XRF019 46.28.108.233 -XRF020 xlx020.iz7auh.net -XRF021 44.103.32.250 -XRF022 xrf022.tms-it.net -XRF023 xlx023.dtdns.net -XRF024 xrf024.dstar.at +XRF018 flatcap.badweather.net +XRF019 46.28.108.233 +XRF019 xlx019.ok2it.com +XRF020 xrf020.k2dls.net +XRF021 44.103.34.4 +XRF022 83.137.45.98 +XRF022 xrf022.tms-it.net +XRF023 185.177.59.166 +XRF023 xlx023.dtdns.net +XRF024 94.199.173.123 +XRF024 xrf024.dstar.at XRF025 89.38.150.252 +XRF025 025.ham-digital.es XRF026 65.175.188.230 -XRF027 194.116.29.78 -XRF028 stn028.dstar.be +XRF027 194.116.29.78 +XRF028 172.104.63.79 +XRF028 stn028.dstar.be XRF029 80.123.238.76 -XRF030 xrf030.oe3xht.at +XRF029 xrf029.tms-it.net +XRF030 194.59.177.44 +XRF030 xrf030.oe3xht.at +XRF031 83.241.141.245 +XRF031 xlx031.ddns.net +XRF032 158.64.26.140 XRF032 xlx032.epf.lu -XRF033 46.226.178.81 -XRF035 xrf035.wa7dre.org -XRF036 xlx036.macasoft.it +XRF033 46.226.178.81 +XRF034 xrf034.dynu.net +XRF035 45.79.94.184 +XRF035 xrf035.wa7dre.org +XRF036 151.12.36.112 +XRF036 xlx036.macasoft.it XRF037 185.58.193.163 -XRF038 66.6.171.228 +XRF038 44.103.34.19 XRF039 31.14.142.119 +XRF040 109.71.45.29 XRF040 xrf040.dyndns.org -XRF041 167.88.37.80 +XRF041 167.88.37.80 XRF042 xrf042.luthienstar.fr -XRF044 82.1.185.173 +XRF043 xrf043.aotnet.it +XRF044 82.1.185.173 XRF045 45.62.233.223 +XRF046 176.10.140.161 XRF046 xlx.c4fm.se -XRF047 xlx047.ddns.net +XRF047 202.171.147.58 +XRF047 xlx047.ddns.net XRF048 xrf048.n5uxt.org -XRF049 212.71.234.224 -XRF050 dstar.emcomspain.xreflector.es +XRF049 212.71.234.224 +XRF050 80.211.155.206 +XRF050 dstar.emcomspain.xreflector.es XRF051 93.186.254.219 -XRF052 xrf052.dip.jp +XRF052 121.119.96.205 +XRF052 xrf052.dip.jp +XRF053 185.97.120.120 XRF053 xlx.grvdc.eu XRF054 52.86.180.251 +XRF054 xrf054.metro-uhf.org +XRF055 52.80.4.154 XRF055 dstar.zzux.com XRF056 xrf056.homepc.it +XRF057 74.193.217.15 XRF057 xlx057.ddns.net -XRF058 xrf058.dip.jp +XRF058 133.208.235.3 +XRF058 xrf058.dip.jp XRF059 18.219.32.21 -XRF060 212.237.36.181 +XRF060 212.237.36.181 XRF061 68.115.205.110 +XRF062 72.17.20.173 XRF062 xlx.maryland-dstar.net XRF063 162.248.141.148 +XRF064 122.222.1.50 XRF064 xrf064.owari.biz -XRF065 212.237.53.67 +XRF065 212.237.53.67 +XRF066 87.7.192.18 XRF066 xlx066.homepc.it +XRF067 95.60.130.176 +XRF067 xrf067.f5kav.org +XRF068 92.222.145.202 XRF068 xrf068.ircddb.it -XRF070 xrf070.iptime.org +XRF069 xrf069.sustrai.org +XRF070 xrf070.iptime.org +XRF071 211.60.41.185 XRF071 xrf.elechomebrew.com -XRF073 147.102.7.34 +XRF072 75.60.237.17 +XRF072 xrf072.dv.or.kr +XRF073 147.102.7.34 +XRF074 212.237.211.82 XRF074 xrf074.dyndns.org XRF075 5.135.162.136 +XRF075 xrf075.ir9bs.it +XRF076 203.137.116.117 XRF076 xrf076.xreflector-jp.org -XRF077 xrf077.duckdns.org -XRF078 xlx.grvdc.eu -XRF079 xlx079.dvham.com +XRF077 216.21.9.156 +XRF077 xrf077.duckdns.org +XRF078 109.15.57.11 +XRF078 xlx.grvdc.eu +XRF079 184.23.183.98 +XRF079 xlx079.dvham.com +XRF080 121.81.128.207 XRF080 jr3vh.dip.jp +XRF081 121.82.151.243 XRF081 jr3vh.dip.jp +XRF082 110.232.113.108 +XRF082 xlx082.pungsan.com +XRF083 185.205.210.217 +XRF083 xlx083.pungsan.com +XRF084 45.79.93.167 +XRF085 113.150.26.8 XRF085 jr1ofp.dip.jp XRF086 52.80.139.252 +XRF087 44.137.36.209 +XRF088 194.109.192.235 XRF088 xrf088.pa4tw.nl XRF089 194.109.192.236 +XRF089 xlx089.pa4tw.nl XRF090 91.92.136.252 -XRF092 212.237.30.36 -XRF095 xrf095.xreflector-jp.org +XRF091 89.36.219.197 +XRF092 104.200.25.53 +XRF093 185.177.59.221 +XRF094 157.7.221.186 +XRF095 203.137.76.53 +XRF095 xrf095.xreflector-jp.org +XRF097 80.211.154.173 +XRF098 203.136.233.165 XRF098 xrf098.dip.jp +XRF099 80.211.27.75 XRF099 xlx099.iz7auh.net +XRF100 45.62.233.223 XRF100 xlx100.xlxreflector.org +XRF101 45.62.213.101 XRF101 xlx101.xlxreflector.org +XRF102 23.111.174.196 XRF102 xlx102.xlxreflector.org +XRF103 64.137.224.126 XRF103 xlx103.xlxreflector.org +XRF104 23.111.174.197 XRF104 xlx104.xlxreflector.org -XRF105 51.254.99.78 -XRF109 xrf109.tokyo -XRF110 xrf110.xreflector-jp.org -XRF111 xrf111.xreflector-jp.org +XRF105 51.254.99.78 +XRF105 xrf105.xlxreflector.org +XRF109 182.168.128.138 +XRF109 xrf109.tokyo +XRF110 150.7.164.10 +XRF110 xrf110.xreflector-jp.org +XRF111 61.195.96.160 +XRF111 xrf111.xreflector-jp.org +XRF112 94.177.235.81 XRF112 112.xreflector.es -XRF113 212.227.202.198 +XRF113 212.227.202.198 +XRF113 xlx113.homepc.it XRF114 5.135.188.16 +XRF115 217.182.128.3 XRF115 reflector-xlx.hb9vd.ch XRF116 31.185.101.211 +XRF118 5.249.148.252 XRF118 xlx118.ns0.it +XRF119 125.129.207.86 XRF119 xlx119.dvham.com XRF120 81.150.10.63 XRF121 174.37.249.156 -XRF123 213.126.90.100 +XRF122 83.137.45.126 +XRF122 xrf.vpn4ham.com +XRF123 213.126.90.100 +XRF124 211.14.169.234 XRF124 xrf124.xreflector-jp.org -XRF125 xlx125.dyndns.hu -XRF129 guwgw.cir-ins.com +XRF125 213.181.208.52 +XRF125 xlx125.dyndns.hu +XRF127 190.112.228.107 +XRF127 pj2man.hopto.org +XRF128 153.147.157.213 +XRF129 220.209.106.220 +XRF129 guwgw.cir-ins.com XRF130 194.59.177.45 -XRF131 xlx131.pe1er.nl -XRF132 xrf132.dstar.radom.pl +XRF131 80.127.118.226 +XRF131 xlx131.pe1er.nl +XRF132 91.203.55.87 +XRF132 xrf132.dstar.radom.pl XRF133 xrf133.gb7de.co.uk -XRF134 159.89.176.86 +XRF134 159.89.176.86 +XRF135 74.208.214.69 +XRF140 95.211.211.145 XRF145 178.59.23.138 +XRF146 213.7.90.5 XRF146 xlx146.ddns.net XRF147 46.41.1.127 XRF150 80.211.10.212 -XRF170 dvham.mooo.com +XRF150 argentina.mmdvm.es +XRF153 210.189.104.236 +XRF155 18.235.96.93 +XRF158 150.66.16.176 +XRF160 61.195.109.179 +XRF164 122.222.1.50 +XRF168 xrf168.duckdns.org +XRF170 210.178.113.173 +XRF170 dvham.mooo.com +XRF171 210.178.113.123 XRF171 xrf171.dvham.com -XRF180 xlx180.warn.org +XRF175 162.248.92.25 +XRF177 xlx177.webandcloud.net +XRF180 192.241.240.7 +XRF180 xlx180.warn.org +XRF181 122.19.214.143 +XRF185 89.106.108.151 +XRF190 190.194.12.53 XRF199 153.126.179.214 -XRF200 185.203.119.158 +XRF200 185.203.119.158 +XRF200 xrf200.theapplecore.me XRF202 148.251.122.251 +XRF204 85.214.126.111 XRF204 xlx204.ph0dv.nl XRF206 193.190.240.227 +XRF208 151.80.155.39 XRF208 xlx208.f5kav.org +XRF210 64.137.224.107 XRF210 210.xreflector.org +XRF212 52.38.90.188 XRF212 xlx212.dstar.club +XRF214 185.47.129.230 XRF214 xlx214.sustrai.org XRF215 185.87.96.172 XRF216 74.214.25.135 -XRF220 xlx220.sapotech.com +XRF220 124.41.83.11 +XRF220 xlx220.sapotech.com XRF222 212.43.96.84 +XRF222 xlx222.webandcloud.net XRF223 208.73.201.157 +XRF223 xrf223.parkerradio.org +XRF224 203.137.99.97 XRF224 xrf224.xreflector-jp.org +XRF226 2.226.183.226 XRF226 xrf226.hamnet.ro -XRF228 212.237.33.114 -XRF229 194.191.4.54 +XRF227 89.33.44.100 +XRF228 212.237.33.114 +XRF229 194.191.4.54 +XRF229 dstar.hamnet.xyz +XRF230 80.250.3.114 XRF230 ref.dstar.cz +XRF232 89.185.97.35 XRF232 xrf232.tms-it.net -XRF233 xlx233.f1smf.com +XRF233 xlx233.f1smf.com XRF235 5.150.254.97 -XRF238 172.104.239.219 -XRF241 151.80.158.227 -XRF242 xrf242.k7edw.com -XRF246 xlx.mkagawa.com -XRF248 xrf248.dyndns.org +XRF235 xlx235.duckdns.org +XRF238 172.104.239.219 +XRF238 xlx.brandmeister.digital +XRF241 151.80.158.227 +XRF242 73.14.84.43 +XRF242 xrf242.k7edw.com +XRF246 172.93.48.159 +XRF246 xlx.mkagawa.com +XRF248 xrf248.dyndns.org XRF250 xrf250.dstar.su XRF252 je7zbu.jpn.ph +XRF255 142.91.158.199 XRF255 xrf255.reflector.up4dar.de +XRF257 47.157.82.87 +XRF258 75.60.237.19 +XRF261 44.144.0.23 +XRF262 92.201.84.2 XRF262 xrf262.reflector.up4dar.de XRF263 85.214.193.146 XRF264 52.2.131.118 XRF265 51.255.43.60 -XRF266 212.237.51.82 +XRF266 212.237.51.82 XRF268 194.38.140.204 +XRF270 158.64.26.132 XRF270 xrf270.reflector.up4dar.de -XRF275 xrf275.dyndns.org -XRF277 xlx277.dyndns.org -XRF282 xrf282.dip.jp -XRF284 95.158.165.32 -XRF288 99.108.210.100 -XRF290 94.176.6.45 +XRF272 200.231.36.188 +XRF275 xrf275.dyndns.org +XRF277 xlx277.dyndns.org +XRF280 95.234.119.44 +XRF282 210.188.25.17 +XRF282 xrf282.dip.jp +XRF284 95.158.165.32 +XRF285 91.92.93.15 +XRF287 43.245.172.2 +XRF288 99.108.210.100 +XRF290 44.182.7.20 +XRF291 101.143.242.189 XRF291 xrf291.xreflector-jp.org -XRF295 xrf295.dyndns.org -XRF298 xrf298.dip.jp -XRF299 xlx299.zl2ro.nz +XRF295 45.62.224.93 +XRF295 xrf295.dyndns.org +XRF298 220.144.59.222 +XRF298 xrf298.dip.jp +XRF299 203.86.194.92 +XRF299 xlx299.zl2ro.nz +XRF300 45.62.244.43 XRF300 300.xreflector.org +XRF302 144.217.241.23 XRF302 xlx302.hopto.org +XRF303 75.70.52.143 +XRF305 145.239.116.57 +XRF307 72.21.76.154 XRF307 xlx307.ddns.net +XRF310 52.11.207.121 XRF310 xrf310.xrefl.net -XRF311 xrf311.ernix.de +XRF311 46.41.0.214 +XRF311 xrf311.ernix.de +XRF312 192.241.160.183 +XRF312 xrf312.xrefl.net +XRF313 34.213.108.164 XRF313 xlx313.openstd.net -XRF315 65.101.7.50 +XRF314 162.248.10.154 +XRF315 65.101.7.50 XRF317 44.48.8.15 +XRF317 xrf317.crossroadsdmr.org +XRF318 xrf318.xrefl.net +XRF321 31.207.110.45 XRF321 vps.makeitrad.com -XRF328 cisarbasel.ddns.net +XRF328 212.237.33.114 +XRF328 cisarbasel.ddns.net +XRF329 114.181.139.32 +XRF330 18.222.199.205 XRF332 188.213.168.99 -XRF333 xrf333.f1smf.com +XRF333 194.116.29.73 +XRF333 xrf333.f1smf.com XRF334 96.47.95.121 -XRF335 185.206.145.2 +XRF335 185.206.145.2 XRF336 23.226.233.133 +XRF336 xrf336.mawcg.org +XRF338 122.116.216.47 +XRF339 198.98.53.247 XRF339 xlx339.avarc.ca +XRF345 45.62.237.34 XRF345 xrf345.dyndns.org +XRF350 350.opendstar.eu +XRF352 35.230.162.146 XRF353 94.173.206.53 +XRF356 93.152.167.4 +XRF357 93.152.167.4 XRF357 xlx357.w6kd.com +XRF358 93.152.167.4 XRF359 94.156.172.213 -XRF360 xrf360.dip.jp +XRF360 222.229.25.105 +XRF360 xrf360.dip.jp +XRF364 159.65.231.53 +XRF365 59.139.141.204 XRF365 xrf365.dip.jp -XRF370 xrf370.selfip.com -XRF371 xlx371.selfip.com -XRF373 101.143.25.116 -XRF374 xrf374.xreflector-jp.org +XRF367 18.216.66.72 +XRF367 xrf367.ad6dm.net +XRF370 188.213.168.24 +XRF370 xrf370.selfip.com +XRF371 212.237.8.77 +XRF371 xlx371.selfip.com +XRF373 119.229.134.1 +XRF373 xrf73.dip.jp +XRF374 61.195.108.146 +XRF374 xrf374.xreflector-jp.org XRF376 75.145.119.225 -XRF379 184.23.183.98 -XRF380 kdk.ddns.net +XRF377 186.159.96.100 +XRF379 104.218.36.162 +XRF380 160.16.65.39 +XRF380 kdk.ddns.net +XRF382 211.131.19.200 XRF382 xrf382.pgw.jp -XRF387 195.130.59.77 +XRF387 195.130.59.77 XRF388 138.197.67.52 -XRF389 106.71.83.168 +XRF389 106.70.187.224 +XRF389 xlxdmr.duckdns.org XRF390 149.7.214.253 -XRF398 104.167.117.71 -XRF400 xlx400.iz7auh.net +XRF390 xrf390.aotnet.it +XRF393 139.91.200.186 +XRF395 5.249.151.111 +XRF398 104.167.117.71 +XRF399 185.227.110.247 +XRF400 13.58.192.185 +XRF400 xlx400.iz7auh.net +XRF404 91.229.143.187 XRF404 xlx.bendiksverden.net -XRF410 166.78.156.246 -XRF412 xrf412.dip.jp +XRF410 xlx.n5amd.com +XRF411 82.171.119.45 +XRF412 61.195.107.113 +XRF412 xrf412.dip.jp +XRF420 174.138.113.116 XRF420 kc9qen.com +XRF421 118.189.181.236 XRF423 4ix.hacktic.de -XRF431 xrf431.xreflector-jp.org +XRF431 61.195.98.225 +XRF431 xrf431.xreflector-jp.org +XRF433 217.160.22.17 XRF433 xrf433.de -XRF434 51.254.128.134 -XRF438 80.211.189.236 +XRF434 51.254.128.134 +XRF438 80.211.189.236 +XRF440 153.133.72.142 XRF440 xrf440.e-kyushu.net +XRF441 203.137.99.110 XRF441 xrf441.xreflector-jp.org XRF443 xrf443.arisondrio.it -XRF444 xlx444.pa3dfn.nl -XRF449 159.89.183.117 -XRF450 450.xreflector.org -XRF454 42.2.222.178 -XRF456 xrf456.de +XRF444 188.68.37.51 +XRF444 xlx444.pa3dfn.nl +XRF446 78.226.112.146 +XRF449 159.89.183.117 +XRF450 64.137.224.233 +XRF450 450.xreflector.org +XRF454 218.250.250.21 +XRF455 208.71.169.83 +XRF456 54.37.204.187 +XRF456 xrf456.de +XRF460 183.53.66.145 XRF464 52.192.129.174 XRF470 104.49.29.243 +XRF473 104.49.29.243 XRF477 139.162.213.89 +XRF479 198.58.106.10 +XRF486 51.255.172.249 XRF486 xlx486.iz8gur.it +XRF487 93.66.214.109 +XRF490 xrf490.dyndns.org +XRF499 203.137.76.22 XRF499 xrf499.xreflector-jp.org -XRF500 125.63.57.138 -XRF501 104.130.72.187 +XRF500 125.63.57.138 +XRF500 xrf500.org +XRF501 104.130.72.187 XRF502 74.208.88.137 XRF505 110.141.219.161 +XRF506 121.200.19.211 XRF508 185.188.4.15 XRF510 xrf510.s56g.net -XRF511 xlx511.ddns.net -XRF515 133.130.114.45 -XRF518 xrf518.n18.de +XRF511 213.172.232.13 +XRF511 xlx511.ddns.net +XRF515 203.137.78.35 +XRF515 shounandstar.dip.jp +XRF518 176.9.1.168 +XRF518 xrf518.n18.de XRF519 24.55.196.105 -XRF520 119.59.125.192 +XRF519 xrf519.ve3zin.com +XRF520 xlx.dtdxa.com XRF521 150.129.184.54 -XRF523 175.141.51.82 -XRF525 176.65.95.90 +XRF522 14.102.146.160 +XRF523 175.142.199.32 +XRF525 80.211.68.38 +XRF530 116.251.193.99 +XRF534 208.71.169.83 +XRF538 124.41.76.58 XRF538 xrf538.dip.jp +XRF544 202.218.152.66 XRF544 xlx544.ddns.net +XRF550 89.36.222.146 XRF550 550.xreflector.es +XRF551 140.227.198.45 +XRF553 45.79.92.86 XRF554 52.35.183.178 -XRF555 xrf555.w6kd.com -XRF556 xrf556.w6kd.com +XRF555 xlx555.dtdxa.com +XRF556 xrf556.w6kd.com +XRF559 98.239.113.175 XRF567 212.91.156.69 +XRF569 203.137.111.98 XRF569 xlxreflector.jpn.ph XRF570 104.128.230.153 XRF573 216.189.148.204 -XRF580 67.20.31.79 -XRF583 183.76.149.117 +XRF580 67.20.31.79 +XRF583 116.70.240.104 XRF587 68.32.126.21 +XRF595 220.146.23.42 XRF595 hamradio.dip.jp XRF599 203.137.118.190 -XRF600 xrf600.gb7de.co.uk +XRF599 xrf599.n5wls.net +XRF600 13.69.14.204 +XRF600 xrf600.gb7de.co.uk XRF601 51.141.52.193 XRF602 212.56.100.200 +XRF603 216.246.155.99 XRF603 xlx603.cnharc.org -XRF608 xrf608.dip.jp -XRF610 xrf610.vkradio.com +XRF604 139.162.241.24 +XRF605 183.76.179.238 +XRF608 219.122.253.83 +XRF608 xrf608.dip.jp +XRF609 219.122.253.83 +XRF610 89.186.80.81 +XRF610 xrf610.vkradio.com +XRF613 198.50.202.39 +XRF619 167.99.168.82 +XRF626 45.77.234.162 XRF626 626.nz -XRF634 xrf634.dip.jp -XRF655 146.64.235.19 -XRF666 vpngrf.webandcloud.net +XRF627 121.75.75.200 +XRF630 61.195.125.81 +XRF634 180.46.54.237 +XRF634 xrf634.dip.jp +XRF647 217.182.168.54 +XRF651 66.240.165.26 +XRF655 146.64.235.19 +XRF666 86.186.35.158 +XRF666 vpngrf.webandcloud.net +XRF673 180.147.243.178 XRF673 xrf673.xreflector-jp.org -XRF684 212.237.17.83 +XRF678 xrf678.ddns.net +XRF684 212.237.17.83 XRF689 97.107.128.47 +XRF695 155.254.33.145 +XRF698 203.137.123.89 +XRF699 82.102.5.239 XRF699 xlx.tekniksnack.se -XRF700 xrf700.d-star.se -XRF701 xrf701.xreflector-jp.org +XRF700 78.47.222.93 +XRF700 xrf700.d-star.se +XRF701 61.195.107.77 +XRF701 xrf701.xreflector-jp.org XRF703 61.195.98.254 -XRF706 xlx706.iz0rin.it +XRF704 150.66.34.110 +XRF706 93.186.255.126 +XRF706 xlx706.iz0rin.it +XRF707 90.145.156.196 XRF707 xrf707.openquad.net +XRF708 202.218.37.62 XRF708 xrf708.xreflector-jp.org XRF709 212.237.34.32 -XRF710 oe7mfi.ddns.net +XRF709 xlx.dvmega.co.uk +XRF710 oe7mfi.ddns.net XRF711 212.237.18.27 -XRF712 180.11.74.19 +XRF712 153.215.181.34 +XRF712 xrf712.ddo.jp +XRF713 218.251.63.99 XRF714 85.214.119.76 +XRF714 xrf714.ea3hkb.com XRF715 xlx715.ea3hkb.net XRF716 xlx716.duckdns.org -XRF717 44.137.70.100 +XRF717 44.137.70.100 XRF719 199.227.117.121 +XRF720 23.237.16.149 XRF720 xrf720.freestar.us -XRF722 722.xreflector.es +XRF722 80.211.2.161 +XRF722 722.xreflector.es +XRF723 45.33.118.112 +XRF724 189.20.209.70 XRF724 xlx.dvbrazil.com.br -XRF727 w4icy.inerrantenergy.com -XRF730 186.64.123.59 -XRF732 xlx.hk4km.co -XRF733 45.56.117.158 +XRF725 172.245.9.180 +XRF727 108.33.72.83 +XRF727 w4icy.inerrantenergy.com +XRF730 186.64.123.59 +XRF732 190.159.68.105 +XRF732 xlx.hk4km.co +XRF733 45.56.117.158 +XRF733 xlx733.ddns.net XRF735 104.131.81.32 XRF737 195.130.75.246 +XRF738 210.171.151.238 XRF740 104.167.114.230 +XRF740 imagewell.duckdns.org +XRF741 203.137.78.41 XRF746 178.254.34.44 +XRF747 87.147.142.9 XRF747 xrf747.de +XRF748 64.137.197.36 XRF748 xrf748.dyndns.org -XRF752 xlx752.zl2wl.nz +XRF749 45.77.102.203 +XRF750 203.86.206.49 +XRF751 203.118.145.79 +XRF752 66.154.105.195 +XRF752 xlx752.zl2wl.nz +XRF755 178.22.148.229 XRF755 xlx.radioamateur.tk +XRF757 43.229.63.42 XRF757 xrf757.openquad.net +XRF762 129.21.36.65 +XRF766 201.62.48.61 XRF766 xlx.amrase.org.br XRF767 xrf767.de +XRF768 80.211.199.231 +XRF770 153.126.173.9 +XRF773 94.177.175.230 XRF773 xrf773.iz0rin.it -XRF775 149.202.61.17 -XRF776 xlx776.tokyo -XRF777 112.218.40.91 +XRF775 149.202.61.17 +XRF776 218.221.181.241 +XRF776 xlx776.tokyo +XRF777 112.218.40.91 +XRF780 96.53.97.22 +XRF781 101.143.242.199 XRF781 xrf781.xreflector-jp.org +XRF782 122.16.56.210 +XRF787 46.41.1.96 XRF787 xrf787.de +XRF788 192.168.0.96 XRF789 45.33.119.142 -XRF794 xrf794.xreflector-jp.org +XRF789 xrf789.dstarxlx.com.br +XRF794 101.143.242.95 +XRF794 xrf794.xreflector-jp.org +XRF800 87.252.188.119 +XRF801 213.47.71.17 XRF801 f4hin.fr -XRF803 77.117.77.117 -XRF806 92.105.198.59 +XRF803 77.117.21.251 +XRF806 92.107.25.23 +XRF807 122.18.165.164 XRF807 hajikko.iobb.net -XRF808 xrf808.n5wls.net -XRF810 810.xreflector.org +XRF808 18.220.252.27 +XRF808 xrf808.n5wls.net +XRF809 78.46.11.69 +XRF810 64.137.238.189 +XRF810 810.xreflector.org +XRF811 64.137.238.189 +XRF812 203.145.233.141 XRF812 xrf812.xreflector-jp.org +XRF813 97.76.81.165 XRF813 xlx.inerrantenergy.com +XRF817 18.235.96.93 +XRF818 120.79.155.116 +XRF825 51.75.252.197 +XRF828 195.225.116.244 XRF828 xlx828.ddnss.de +XRF833 78.226.112.146 XRF844 137.226.79.122 +XRF847 162.243.4.29 +XRF850 88.198.94.77 XRF850 xrf850.xrfmaster.net -XRF851 xrf851.rsdt.de +XRF851 xrf851.rsdt.de +XRF852 42.2.140.44 XRF858 xrf858.ke0lmx.net +XRF859 54.227.203.214 +XRF859 xlx859.ke0lmx.net +XRF860 24.134.86.93 XRF860 xrf.njpaasterisk.org -XRF870 xrf870.ddns.net -XRF878 xrf878.xreflector-jp.org +XRF861 66.175.218.63 +XRF865 45.32.212.226 +XRF866 93.233.176.219 +XRF867 51.254.115.5 +XRF870 103.3.234.95 +XRF870 xrf870.ddns.net +XRF871 222.172.252.56 +XRF878 203.137.123.113 +XRF878 xrf878.xreflector-jp.org XRF880 176.10.105.211 -XRF883 xrf883.dip.jp +XRF883 153.179.226.85 +XRF883 xrf883.dip.jp +XRF886 118.163.103.178 XRF886 xrf886.metropit.net XRF887 118.163.103.177 +XRF888 46.18.142.169 XRF888 xlx888.ns0.it -XRF893 103.235.127.147 -XRF900 94.177.237.192 +XRF889 130.149.36.93 +XRF893 104.223.59.212 +XRF897 92.222.23.124 +XRF900 94.177.237.192 XRF901 xrf901.dyndns.org XRF902 xrf902.dyndns.org -XRF903 80.211.29.226 -XRF905 199.212.121.20 +XRF903 80.211.29.226 +XRF904 211.14.169.215 +XRF905 199.212.121.20 +XRF906 212.237.11.53 XRF906 xrf906.radioclubveleta.es -XRF907 xlx907.ddns.net -XRF908 92.222.23.124 -XRF909 www.ealink.es +XRF907 88.3.75.162 +XRF907 xlx907.ddns.net +XRF908 92.222.23.124 +XRF909 216.86.147.198 +XRF909 www.ealink.es XRF910 92.177.212.64 -XRF911 5.196.73.89 +XRF911 xlx911.patrweb.com XRF912 80.211.1.143 +XRF915 72.28.30.93 XRF919 80.211.232.174 XRF920 xrf920.oe7xxr.ampr.at +XRF921 44.143.184.83 XRF921 xlx921.oe7xxr.ampr.at -XRF922 xrf922.mb6er.com +XRF922 81.150.10.62 +XRF922 xrf922.mb6er.com XRF925 90.255.232.101 +XRF929 158.69.166.132 XRF929 xrf929.ddns.net +XRF930 94.177.160.5 XRF930 xreflector.ddns.net +XRF931 68.131.30.206 XRF931 xref.kw4yb.com XRF933 164.132.104.167 -XRF935 xlx935.ddns.net -XRF940 xrf940.xreflector-jp.org -XRF944 xrf944.xreflector-jp.org -XRF945 xlx945.xreflector.es +XRF935 188.213.166.199 +XRF935 xlx935.ddns.net +XRF940 202.218.37.121 +XRF940 xrf940.xreflector-jp.org +XRF944 202.218.34.210 +XRF944 xrf944.xreflector-jp.org +XRF945 213.202.229.40 +XRF945 xlx945.xreflector.es +XRF946 212.227.174.45 +XRF950 158.64.26.134 XRF950 xlx950.epf.lu +XRF951 18.188.166.109 +XRF956 192.99.245.120 +XRF959 203.137.98.121 XRF960 80.211.226.89 XRF964 52.173.142.244 +XRF965 47.23.66.19 +XRF966 203.150.19.24 +XRF967 95.158.165.32 +XRF967 xlx967.uk.to +XRF969 142.93.46.36 +XRF970 157.7.221.186 XRF972 46.121.158.50 -XRF973 xrf973.xreflector-jp.org -XRF974 xlx974.dynu.net -XRF975 176.31.161.9 -XRF976 212.237.36.71 +XRF973 211.14.169.43 +XRF973 xrf973.xreflector-jp.org +XRF974 94.177.217.52 +XRF974 xlx974.dynu.net +XRF975 176.31.161.9 +XRF976 212.237.36.71 +XRF977 977.opendstar.eu +XRF978 74.104.179.159 +XRF978 978.opendstar.eu +XRF979 217.162.36.91 +XRF981 153.210.14.45 XRF986 81.89.102.160 +XRF987 185.32.183.148 XRF987 xrf987.metro-uhf.org -XRF988 988.xreflector.es -XRF989 xrf989.bbhill.net +XRF988 80.211.236.189 +XRF988 988.xreflector.es +XRF989 50.27.131.75 +XRF989 xrf989.bbhill.net XRF990 35.164.237.63 -XRF991 91.92.136.118 +XRF991 91.92.136.118 +XRF993 97.64.20.63 +XRF994 35.177.233.106 +XRF995 118.27.30.92 XRF995 xlx995.ddns.net -XRF996 47.104.177.248 +XRF996 47.104.177.248 +XRF997 94.177.187.40 XRF997 xrf997.iw2gob.it +XRF998 44.140.236.20 XRF998 xlx.sm7.hamnet.nu +XRF999 94.177.173.53 XRF999 xrf999.no-ip.org +XRFWDX 47.149.178.211 +XRFWDX worldwidedx.com +# EOF - Sun, 19 May 2019 12:35:55 GMT diff --git a/Data/DPlus_Hosts.txt b/Data/DPlus_Hosts.txt index d1bb121..2cedcd3 100644 --- a/Data/DPlus_Hosts.txt +++ b/Data/DPlus_Hosts.txt @@ -1,966 +1,96 @@ -# DPlus_Hosts.txt downloaded from http://www.pistar.uk/downloads/DPlus_Hosts.txt -# DPlus Hosts resolved from dstargateway.org DNS, with additional hosts -# sourced from http://xlxapi.rlx.lu/api.php?do=GetReflectorHostname -# Please report issues at https://www.facebook.com/groups/pistar/ -# File created at Tuesday 10th of July 2018 08:12:16 PM BST -REF000 23.111.174.198 -REF001 104.237.157.7 -REF002 129.93.2.132 -REF003 203.194.18.195 -REF004 74.204.50.19 -REF005 192.3.202.53 -REF006 78.158.56.61 -REF007 208.111.3.180 -REF008 58.12.161.10 -REF009 204.89.198.18 -REF010 12.178.74.6 -REF011 195.78.217.101 -REF012 209.112.244.26 -REF013 109.69.104.195 -REF014 64.250.229.185 -REF015 109.69.104.196 -REF016 67.210.212.136 -REF017 80.69.86.233 -REF018 187.50.254.20 -REF019 209.242.228.27 -REF020 50.199.88.20 -REF021 192.3.202.54 -REF022 52.32.64.78 -REF023 103.1.213.18 -REF024 69.41.0.15 -REF025 107.161.29.191 -REF026 206.12.104.8 -REF027 194.116.29.72 -REF028 193.190.240.229 -REF029 129.123.3.6 -REF030 18.221.55.237 -REF031 79.136.93.241 -REF032 95.160.56.46 -REF033 208.67.255.202 -REF034 74.81.71.218 -REF035 146.129.247.243 -REF036 195.194.238.109 -REF037 208.111.3.181 -REF038 66.6.171.227 -REF039 208.93.191.20 -REF040 94.46.216.197 -REF041 129.105.15.195 -REF042 151.249.104.38 -REF043 176.10.140.189 -REF044 208.43.162.89 -REF045 195.251.201.214 -REF046 208.111.3.182 -REF047 157.7.142.13 -REF048 208.88.66.244 -REF049 72.249.9.66 -REF050 75.147.26.195 -REF051 50.57.153.17 -REF052 12.5.239.46 -REF053 216.243.174.245 -REF054 52.86.120.0 -REF055 207.251.62.205 -REF056 45.56.113.164 -REF057 173.216.181.178 -REF058 131.204.255.253 -REF059 104.131.247.122 -REF060 50.194.6.1 -REF061 204.152.199.103 -REF062 70.88.145.165 -REF063 66.207.131.4 -REF064 61.195.99.81 -REF065 162.255.169.90 -REF066 173.255.196.45 -REF067 44.34.128.167 -REF068 92.222.145.197 -REF069 70.91.220.113 -REF070 44.10.10.20 -REF071 61.195.97.218 -REF072 96.92.65.12 -REF073 68.67.124.145 -REF074 68.67.124.146 -REF075 51.254.220.4 -REF076 203.137.112.200 -REF077 173.247.7.23 -REF078 204.15.204.154 -REF079 62.255.210.254 -REF080 82.223.13.53 -REF081 172.104.92.125 -REF082 106.240.237.114 -REF083 168.235.103.26 -REF084 51.254.120.143 -REF085 203.74.132.35 -REF086 216.126.220.245 -REF088 194.109.192.235 -REF089 194.109.192.236 -REF090 91.92.136.252 -REF092 212.237.30.36 -REF095 203.137.76.53 -REF098 111.169.16.250 -REF099 80.211.27.75 -REF101 45.62.213.101 -REF102 23.111.174.196 -REF103 64.137.224.126 -REF104 23.111.174.197 -REF105 51.254.99.78 -REF109 182.168.101.180 -REF110 150.7.164.10 -REF111 61.195.96.160 -REF113 151.12.36.103 -REF114 5.135.188.16 -REF115 217.182.128.3 -REF116 31.185.101.211 -REF118 5.249.148.252 -REF119 125.129.207.86 -REF120 81.150.10.63 -REF121 174.37.249.156 -REF122 83.137.45.100 -REF124 211.14.169.234 -REF125 213.181.208.52 -REF129 219.116.28.227 -REF130 194.59.177.45 -REF131 80.127.118.226 -REF132 91.203.55.87 -REF134 159.89.176.86 -REF145 178.59.23.138 -REF147 46.41.1.127 -REF150 80.211.10.212 -REF170 210.178.113.173 -REF171 121.162.91.45 -REF180 192.241.240.7 -REF199 153.126.179.214 -REF202 148.251.122.251 -REF204 185.85.18.162 -REF206 193.190.240.227 -REF208 151.80.155.39 -REF210 64.137.224.107 -REF212 52.38.90.188 -REF214 185.47.129.230 -REF215 185.87.96.172 -REF216 74.214.25.135 -REF220 124.41.83.11 -REF222 212.43.96.84 -REF224 203.137.99.97 -REF226 94.176.6.37 -REF228 188.60.43.206 -REF229 194.191.4.54 -REF230 80.250.3.114 -REF232 89.185.97.35 -REF235 5.150.254.97 -REF238 172.104.239.219 -REF241 151.80.158.227 -REF242 73.14.84.43 -REF246 172.93.48.159 -REF263 85.214.193.146 -REF264 52.2.131.118 -REF266 212.237.51.82 -REF268 194.38.140.204 -REF270 158.64.26.132 -REF282 210.188.25.17 -REF284 95.158.165.32 -REF290 94.176.6.45 -REF291 101.143.242.189 -REF295 64.137.160.185 -REF298 119.238.135.207 -REF299 125.236.227.43 -REF300 45.62.244.43 -REF302 144.217.241.23 -REF307 72.21.76.154 -REF310 52.11.207.121 -REF313 34.213.108.164 -REF315 65.101.7.50 -REF317 44.48.8.15 -REF321 31.207.110.45 -REF328 212.237.33.114 -REF332 188.213.168.99 -REF333 194.116.29.73 -REF334 96.47.95.121 -REF335 185.206.145.2 -REF336 23.226.233.133 -REF339 198.98.53.247 -REF345 45.62.237.34 -REF357 52.39.82.54 -REF359 94.156.172.213 -REF360 222.229.25.105 -REF365 59.139.141.204 -REF370 188.213.168.24 -REF371 212.237.8.77 -REF373 101.143.25.116 -REF374 61.195.108.146 -REF376 75.145.119.225 -REF380 160.16.65.39 -REF382 211.131.185.61 -REF388 138.197.67.52 -REF389 106.70.187.224 -REF390 149.7.214.253 -REF400 13.58.192.185 -REF404 91.229.143.187 -REF410 166.78.156.246 -REF412 61.195.107.113 -REF431 61.195.98.225 -REF433 217.160.22.17 -REF434 51.254.128.134 -REF440 114.161.161.90 -REF441 203.137.99.110 -REF444 188.68.37.51 -REF449 159.89.183.117 -REF450 64.137.224.233 -REF454 221.125.255.216 -REF456 54.37.204.187 -REF464 52.192.129.174 -REF470 104.49.29.243 -REF477 139.162.213.89 -REF486 51.255.172.249 -REF499 203.137.76.22 -REF500 172.104.32.192 -REF502 190.148.222.28 -REF505 45.248.50.37 -REF508 185.188.4.15 -REF511 84.52.159.10 -REF515 133.130.114.45 -REF518 176.9.1.168 -REF519 167.114.104.65 -REF520 119.59.125.192 -REF521 150.129.184.54 -REF522 14.102.146.160 -REF525 176.65.95.90 -REF538 133.218.172.211 -REF544 210.131.32.240 -REF550 94.177.240.69 -REF554 52.35.183.178 -REF555 64.137.186.11 -REF567 212.91.156.69 -REF569 203.137.111.98 -REF583 116.70.242.224 -REF595 175.179.56.111 -REF600 13.69.14.204 -REF601 51.141.52.193 -REF602 212.56.100.200 -REF603 216.10.169.35 -REF608 219.122.253.83 -REF610 89.186.80.81 -REF626 202.137.244.157 -REF634 61.199.25.130 -REF655 146.64.235.19 -REF666 54.144.216.63 -REF673 180.147.243.178 -REF684 212.237.17.83 -REF689 97.107.128.47 -REF698 85.197.129.86 -REF699 82.102.5.239 -REF700 78.47.222.93 -REF701 61.195.107.77 -REF703 61.195.98.254 -REF706 93.186.255.126 -REF707 90.145.156.196 -REF708 202.218.37.62 -REF709 212.237.34.32 -REF711 212.237.18.27 -REF712 180.11.74.19 -REF714 85.214.119.76 -REF717 44.137.70.100 -REF722 80.211.2.161 -REF724 75.99.228.35 -REF730 186.64.123.59 -REF732 190.159.68.105 -REF733 45.56.117.158 -REF735 104.131.81.32 -REF737 195.130.75.246 -REF740 173.208.200.180 -REF746 178.254.34.44 -REF747 87.147.133.4 -REF748 64.137.197.36 -REF752 66.154.105.195 -REF755 178.22.148.229 -REF766 201.62.48.61 -REF773 94.177.175.230 -REF775 149.202.61.17 -REF776 218.221.163.75 -REF777 194.182.66.76 -REF781 101.143.242.199 -REF787 46.41.1.96 -REF789 45.33.119.142 -REF794 101.143.242.95 -REF801 213.47.71.17 -REF803 77.117.38.125 -REF806 92.105.198.59 -REF808 18.220.252.27 -REF810 64.137.238.189 -REF812 203.145.233.141 -REF813 97.76.81.165 -REF828 195.225.116.244 -REF844 137.226.79.122 -REF850 88.198.94.77 -REF860 80.81.9.242 -REF870 103.3.234.95 -REF878 203.137.123.113 -REF883 153.185.38.99 -REF886 118.163.103.178 -REF887 118.163.103.177 -REF888 95.239.164.147 -REF893 103.235.127.147 -REF900 94.177.237.192 -REF903 80.211.29.226 -REF906 212.237.11.53 -REF907 88.11.249.48 -REF908 92.222.23.124 -REF909 216.86.147.198 -REF910 94.177.207.26 -REF911 5.196.73.89 -REF912 80.211.1.143 -REF919 80.211.232.174 -REF921 44.143.184.83 -REF922 81.150.10.62 -REF925 90.255.232.101 -REF929 158.69.166.132 -REF930 94.177.160.5 -REF931 71.120.181.98 -REF933 164.132.104.167 -REF935 188.213.166.199 -REF940 202.218.37.121 -REF944 202.218.34.210 -REF945 155.94.147.186 -REF950 158.64.26.134 -REF964 52.173.142.244 -REF972 46.121.158.50 -REF973 211.14.169.43 -REF974 94.177.217.52 -REF975 176.31.161.9 -REF986 81.89.102.160 -REF987 185.32.183.148 -REF989 50.27.131.75 -REF990 35.164.237.63 -REF991 2.237.27.66 -REF995 158.69.201.255 -REF996 47.104.177.248 -REF997 94.177.187.40 -REF998 44.140.236.20 -REF999 94.177.173.53 -W5DRA 75.66.21.213 -4O0LPG 89.188.45.102 -9A0DOS 77.217.166.68 -9A0DRI 83.184.125.202 -9A0DST 83.178.253.62 -9A0DZG 78.134.209.194 -AA4PP 208.54.85.173 -BR2SY 223.100.16.100 -CQ0DAM 94.63.182.214 -CQ0DCH 2.83.253.219 -CQ0DLR 213.13.57.41 -CQ0DPF 95.94.111.92 -CQ0DSE 37.28.237.153 -CQ0DTV 2.82.184.21 -CQ0DVI 94.132.206.63 -CQ1DAH 95.69.107.146 -DB0AB 188.194.155.4 -DB0AFZ 92.50.67.6 -DB0AMK 217.235.18.26 -DB0BLB 91.35.33.79 -DB0BS 134.19.115.94 -DB0CI 79.249.33.248 -DB0DAM 194.94.26.157 -DB0DB 185.70.220.35 -DB0DBN 91.21.102.204 -DB0DJ 217.92.28.60 -DB0DLR 109.41.80.150 -DB0DOS 131.173.32.247 -DB0DRB 88.207.202.202 -DB0EAT 92.210.130.60 -DB0EIS 88.152.157.186 -DB0ERZ 46.227.221.228 -DB0ESS 80.81.9.242 -DB0FIB 78.111.116.226 -DB0GM 91.19.211.133 -DB0GZL 62.226.86.193 -DB0HAA 79.201.23.3 -DB0HAS 84.189.32.49 -DB0HE 109.91.59.80 -DB0HEW 89.15.236.164 -DB0HFD 178.208.98.198 -DB0HFT 194.94.26.189 -DB0HGW 87.151.235.12 -DB0HRR 84.171.15.17 -DB0HUS 79.204.32.126 -DB0IZ 87.122.244.143 -DB0KOE 212.17.239.121 -DB0LBX 185.156.156.157 -DB0LJ 87.139.70.67 -DB0LY 176.9.53.177 -DB0MDX 137.248.151.45 -DB0MOT 94.249.222.90 -DB0NIC 188.194.116.23 -DB0OAL 212.125.105.177 -DB0OX 77.21.170.9 -DB0PBS 192.26.179.90 -DB0POB 87.151.203.58 -DB0REU 93.236.57.36 -DB0RKD 212.17.239.126 -DB0RTV 87.191.151.162 -DB0SIF 134.176.128.63 -DB0SLF 91.35.62.133 -DB0SN 134.76.247.241 -DB0SOB 91.61.226.84 -DB0TVM 129.187.5.189 -DB0UHC 194.97.35.190 -DB0VA 178.4.188.175 -DB0VOX 141.75.245.244 -DB0VS 185.75.164.30 -DB0WA 137.226.79.113 -DB0WBD 91.38.82.249 -DB0WO 194.94.26.157 -DB0WTV 93.223.111.117 -DB0WZ 80.147.61.209 -DB0ZKA 84.128.215.222 -DF0MHR 134.91.90.124 -DM0BAM 84.186.217.60 -DM0GER 87.178.171.3 -DM0HEI 87.151.254.73 -DM0HHW 90.187.26.49 -DM0HMB 141.22.12.147 -DM0IZH 217.91.66.171 -DM0LEI 178.14.70.174 -DM0MW 141.55.128.102 -DM0NOR 77.20.218.106 -DM0SAT 84.146.238.31 -DM0SL 79.204.32.126 -DM0TR 31.16.39.90 -DO0SRE 62.143.16.216 -DO0TPB 195.122.157.243 -E24DK 110.77.235.11 -E25CD 124.122.29.190 -ED1YBK 213.60.194.98 -ED1YBL 213.60.194.98 -ED1ZAJ 81.169.133.171 -ED1ZAM 91.117.67.25 -ED2YAA 77.209.144.230 -ED2YAO 95.60.102.67 -ED2ZAC 83.48.116.61 -ED4ZAD 87.217.220.177 -ED5ZAB 158.42.97.21 -ED5ZAC 89.39.47.83 -ED5ZAG 62.14.178.43 -ED6ZAB 37.152.91.23 -ED7ZAC 195.57.121.189 -ED7ZAD 46.37.89.21 -ED7ZAE 85.137.220.39 -F1ZBU 80.251.102.117 -F1ZCD 88.187.220.2 -F1ZCK 86.248.115.2 -F1ZDF 78.203.212.22 -F1ZDI 92.129.98.93 -F1ZDZ 82.231.84.133 -F1ZEM 86.248.79.161 -F1ZEU 86.248.79.161 -F1ZFG 195.154.33.170 -F1ZGK 90.101.58.185 -F1ZHY 92.171.228.145 -F1ZID 92.188.81.63 -F1ZII 88.164.2.51 -F1ZJH 46.227.22.53 -F1ZJO 37.168.76.85 -F1ZJP 82.64.16.222 -F1ZJR 90.56.60.45 -F1ZKP 2.6.241.54 -F1ZKR 90.41.75.178 -F1ZLX 78.204.173.219 -F1ZWB 77.136.204.53 -F1ZYH 90.63.172.220 -F5ZCV 90.100.204.201 -F5ZFY 80.14.94.180 -F5ZJQ 80.119.102.44 -F5ZKE 78.239.80.131 -F5ZKN 176.134.142.251 -F5ZKO 90.70.0.138 -F5ZKP 82.255.165.128 -F5ZKQ 93.9.3.192 -F5ZLB 92.184.101.43 -F5ZLC 83.196.12.10 -F5ZLG 82.225.216.39 -F5ZLK 79.83.11.55 -F5ZLM 88.121.60.200 -F5ZML 109.214.64.172 -F5ZQH 80.119.102.44 -F5ZSS 86.74.95.58 -GB3WL 81.149.15.21 -GB7CD 194.80.132.179 -GB7DC 81.174.242.218 -GB7DM 94.175.78.230 -GB7DN 86.157.42.132 -GB7HZ 92.28.227.216 -GB7JD 212.56.100.200 -GB7KH 85.119.82.151 -GB7SM 86.133.136.170 -GB7SO 109.145.76.188 -GB7TP 82.31.87.63 -GB7WT 185.49.92.226 -HB9BO 213.202.33.211 -HB9CSR 188.60.43.206 -HB9DR 178.193.253.23 -HB9DS 194.29.11.9 -HB9VD 51.254.122.59 -HB9ZRH 77.57.117.248 -IR0AAB 87.17.208.105 -IR0CJ 185.82.114.251 -IR0DV 94.39.94.213 -IR0K 185.78.18.13 -IR0UBT 78.15.153.11 -IR0UEZ 185.82.114.253 -IR1CT 2.40.23.41 -IR1DC 88.149.181.240 -IR1UAW 79.30.54.193 -IR1UBR 81.30.11.81 -IR1UBY 79.44.127.10 -IR1UFV 151.16.215.69 -IR1UGO 82.50.132.89 -IR1UIM 151.16.108.239 -IR1UIV 217.19.159.207 -IR1UIW 2.235.33.50 -IR2AY 79.21.171.25 -IR2UDW 91.142.66.115 -IR2UEZ 78.134.30.121 -IR3EE 213.21.185.184 -IR3EF 79.6.136.177 -IR3UBK 46.19.235.134 -IR3UBZ 79.6.136.178 -IR3UG 95.142.180.57 -IR3UIB 79.6.136.179 -IR3UJ 79.6.136.181 -IR4MO 80.17.240.27 -IR4UCJ 31.3.184.38 -IR5AF 79.20.189.118 -IR5AN 62.48.40.65 -IR5AR 95.239.125.53 -IR5AY 79.35.129.25 -IR5UBM 46.226.178.80 -IR5UBO 93.188.115.147 -IR5UBS 46.226.178.83 -IR5UCK 46.226.176.11 -IR5UCL 79.53.51.208 -IR5UCM 91.214.61.109 -IR5UCQ 188.13.250.107 -IR5UDB 46.226.178.84 -IR6UCX 95.247.183.177 -IR6UDO 185.47.96.11 -IR7UBL 87.1.250.55 -IR7UBP 213.45.9.196 -IR7UBX 2.237.73.137 -IR7UE 87.11.254.122 -IR9P 87.11.163.158 -IR9UBM 5.170.220.181 -IR9UBQ 185.152.140.1 -IR9UBV 151.54.10.175 -JE4YLP 122.20.168.4 -JH3ZMD 180.145.113.1 -JL3ZBS 111.64.21.179 -JL3ZDF 125.207.29.216 -JQ1ZBD 122.249.235.110 -JQ1ZKF 180.50.81.49 -JQ1ZKG 118.243.253.222 -JQ1ZOR 118.241.159.202 -JQ1ZRY 221.27.66.171 -K0PRA 72.1.108.245 -K1MRA 207.180.168.249 -K1RFI 173.166.94.77 -K2BWK 24.213.133.213 -K3AWS 76.190.233.121 -K3CR 146.186.33.234 -K4BRK 73.20.208.61 -K4HPT 68.225.85.83 -K5PSA 24.54.146.202 -K6CLX 72.134.1.68 -K6PUW 162.219.58.134 -K7EVR 72.201.150.71 -K7LWH 63.226.225.249 -K7YI 67.22.175.38 -KB1TIX 71.255.118.133 -KB1UVD 73.47.74.3 -KB1UVE 72.65.115.44 -KB1WUW 71.184.97.85 -KB3KWD 199.193.59.214 -KB5DRP 52.144.103.54 -KB8EOC 192.180.5.104 -KC1ACI 68.185.127.105 -KC1AZZ 108.7.32.84 -KC1EGN 71.181.20.21 -KC2TGB 73.226.52.46 -KC3BIY 184.89.158.48 -KC3BMB 71.58.65.44 -KC3FHC 71.244.175.15 -KC4UG 64.91.93.185 -KC8ARJ 174.84.8.3 -KD0PKU 67.55.181.66 -KD0QPG 162.255.157.234 -KD0YLG 199.17.47.23 -KD0ZSA 71.37.237.68 -KD2DIP 74.88.18.162 -KD2FET 174.224.139.213 -KD2GBR 70.13.94.158 -KD2LWX 71.7.10.101 -KD2LYO 66.243.219.222 -KD2MNA 67.241.251.13 -KD5RCA 173.185.79.204 -KD8SWP 76.189.143.248 -KD8TUZ 74.140.148.77 -KD9AKF 158.222.16.101 -KD9CVF 69.174.171.8 -KD9IPR 97.83.196.212 -KE0KKN 24.111.240.142 -KE0MVE 156.98.131.33 -KE0MVG 69.76.160.34 -KE5YAP 71.97.89.126 -KE8AOQ 168.215.61.3 -KE8BUO 98.29.31.4 -KE8EVF 68.61.246.212 -KF5MMX 47.32.251.186 -KF7CLD 70.89.134.123 -KF7NOD 73.193.45.223 -KF7NPL 63.225.171.156 -KF7VJO 67.169.255.93 -KG5JPJ 98.172.10.197 -KG5OXR 24.49.102.111 -KG5RED 24.182.107.171 -KG7QPU 66.235.18.176 -KG7WZG 168.103.142.41 -KJ6KTV 98.150.91.5 -KK4IQW 68.47.133.52 -KK4PGE 74.131.186.40 -KK4QXJ 173.214.218.208 -KK4WIB 73.184.164.110 -KK4YOE 71.91.69.74 -KK6GIZ 76.178.49.69 -KK6JA 73.70.240.127 -KM4LNN 216.221.204.103 -KN4BDJ 74.137.13.22 -KN4BOF 64.234.50.153 -KR7ST 204.89.198.102 -KS1R 73.119.107.231 -KY4HS 71.28.168.77 -LD1XB 46.46.205.177 -LD2EM 82.148.173.251 -LD2HT 84.214.96.91 -LD4FH 91.149.30.230 -LD4LA 46.66.178.25 -LD5BG 93.184.115.59 -LD7FF 148.252.102.235 -LD8BS 89.162.85.130 -LD8LK 81.167.105.194 -LD8MM 88.89.35.121 -LD8NA 193.212.207.139 -LD8NN 85.166.209.165 -LD8SA 89.162.67.118 -LU5FB 179.60.235.222 -LX0DML 78.141.137.66 -LX0DRD 213.135.244.146 -LX0DRH 88.207.174.219 -LX0DRJ 78.141.137.66 -LX0DRN 213.135.244.146 -LX0DRV 88.207.202.202 -LX0RL 146.0.189.212 -LX9EPF 158.64.26.2 -LZ0DAA 78.83.103.163 -LZ0DAD 213.16.55.2 -LZ0DAH 95.158.175.90 -LZ0DAM 151.237.6.74 -LZ0DAO 212.39.89.30 -LZ0DAR 212.73.131.203 -LZ0DAV 213.16.49.230 -LZ0DBS 185.18.57.21 -LZ0DVB 62.176.87.194 -LZ0SUN 151.237.49.30 -MB6AB 81.98.206.178 -MB6AF 213.121.3.16 -MB6BA 80.6.17.181 -MB6CA 81.151.69.117 -MB6CE 90.195.155.188 -MB6CY 86.143.115.28 -MB6EG 176.24.39.74 -MB6EY 86.184.9.11 -MB6FG 147.147.164.234 -MB6HU 86.168.101.171 -MB6IOG 86.145.6.185 -MB6JD 212.56.100.200 -MB6LY 86.142.208.37 -MB6NK 188.29.164.237 -N0CXX 65.103.49.196 -N1HIT 73.249.54.16 -N4ARG 71.41.121.229 -N7JN 192.231.186.217 -N7RDS 72.250.209.84 -NE1DV 198.0.181.254 -NJ2MC 174.225.6.77 -NR7SS 74.95.68.73 -NU7TS 72.250.210.9 -NW7DR 192.231.186.5 -OE1XDS 80.109.80.41 -OE1XIK 178.115.227.153 -OE3XWW 194.166.53.142 -OE5XKL 193.33.210.138 -OE5XOL 185.16.114.90 -OH0DST 79.133.3.134 -OK0BAF 84.16.107.229 -OK0BCA 151.249.105.57 -OK0BRQ 88.102.142.95 -OK0DIT 88.146.217.109 -OK0DJ 37.221.252.37 -OK0DPL 85.207.84.124 -OK0DRB 89.235.49.32 -OK0DRO 85.13.109.61 -OK0DV 37.221.252.37 -OK0EB 92.62.226.10 -ON0CPS 81.245.76.160 -ON0CVH 91.183.117.199 -ON0DP 84.198.145.44 -ON0DST 5.135.58.242 -ON0LB 188.210.92.86 -ON0LGE 44.144.12.194 -ON0LUS 87.64.154.241 -ON0OS 178.116.123.86 -ON0TB 78.94.50.214 -OZ0EVA 85.202.72.96 -OZ0REA 87.58.212.152 -OZ0RED 80.251.196.244 -OZ0REF 93.178.152.206 -OZ0REH 109.57.28.210 -OZ1DHS 212.112.154.128 -OZ1REC 109.59.28.68 -OZ1REJ 80.62.116.137 -OZ2REE 176.21.189.181 -OZ2REG 87.49.146.167 -OZ2REM 212.98.114.58 -OZ3DSR 212.112.156.53 -OZ3REQ 130.225.2.2 -OZ3REY 80.62.117.65 -OZ4REN 83.90.173.65 -OZ6DST 77.68.172.7 -OZ7DSD 62.242.112.138 -OZ7REL 62.44.134.179 -OZ9AFZ 185.109.76.192 -OZ9RET 87.55.118.187 -PI1CJP 83.87.195.38 -PI1DHD 94.211.247.46 -PI1DSE 88.159.83.58 -PI1HGD 83.85.108.198 -PI1MEP 44.137.69.19 -PI1RYS 44.137.37.37 -PI1SHA 84.83.171.182 -PI1SNK 145.129.86.235 -PI1UTR 44.137.72.10 -PJ2A 190.112.246.172 -PT2DV 201.87.243.130 -PT2MTD 200.96.200.110 -PY1CEU 179.55.35.114 -PY1EGR 189.82.114.34 -PY2KBH 189.92.85.70 -PY2KJP 189.28.159.114 -PY2KPE 177.38.42.86 -S55DLJ 90.157.180.200 -S55DMX 164.8.106.109 -S55DZA 88.200.95.123 -SE0O 80.216.190.189 -SE0S 193.150.254.146 -SE3XCH 80.170.3.193 -SG0AHH 2.248.47.171 -SG4UOF 77.53.38.251 -SG4UZM 44.140.128.254 -SG4VBO 155.4.32.228 -SG5EWE 77.218.246.190 -SG5TAH 90.224.101.245 -SG6JWU 176.10.223.2 -SG7HTP 46.162.115.187 -SG7IKJ 213.66.79.158 -SG7WDL 94.255.137.118 -SG7WSE 83.184.191.161 -SI9AM 44.140.102.134 -SK0AI 5.150.225.10 -SK0RMT 44.140.13.5 -SK2AT 88.83.52.159 -SK3GY 90.236.23.43 -SK3LH 46.230.233.3 -SK3RHU 95.143.207.93 -SK3XX 80.170.4.42 -SK4BW 44.140.128.254 -SK5UM 78.71.198.202 -SK6BA 78.72.45.233 -SK6DZ 31.31.161.42 -SK6EP 31.208.231.214 -SK6IF 2.64.169.90 -SK6MA 2.68.144.73 -SK6SA 90.144.170.73 -SK7BS 44.140.236.21 -SK7DS 77.107.16.191 -SK7RDS 46.230.239.7 -SK7RGM 46.195.13.179 -SK7RNQ 85.30.164.129 -SK7RRV 81.170.157.133 -SK7RSR 46.162.115.29 -SL2ZA 44.140.236.90 -SR1UVH 178.238.252.12 -SR1UVS 185.71.241.179 -SR2UVG 178.182.231.10 -SR2UVO 77.91.9.87 -SR2UVV 193.188.198.80 -SR2VVV 193.188.198.121 -SR3UVL 89.68.2.48 -SR3ZX 31.179.247.147 -SR4MR 89.229.112.15 -SR4UBI 109.231.36.129 -SR4UVD 213.73.1.97 -SR4UVM 213.73.1.96 -SR4UVN 82.160.168.159 -SR5RK 212.2.124.66 -SR5UOS 194.50.158.122 -SR5UVA 185.28.103.77 -SR5UVR 193.111.146.160 -SR5WC 195.137.246.150 -SR6DMR 79.190.47.27 -SR6UKB 46.231.77.40 -SR6UPK 192.162.98.59 -SR6UVO 79.162.252.86 -SR6UVW 94.254.131.164 -SR6UVX 213.199.207.199 -SR7LDZ 217.113.226.137 -SR7ULM 217.113.226.137 -SR7USC 93.105.207.178 -SR7UVK 46.45.109.210 -SR8UVC 95.160.212.234 -SR8UVL 46.21.222.34 -SR8UVP 212.2.124.234 -SR8UWD 94.246.175.66 -SR9CZ 193.93.90.190 -SR9KR 37.47.68.144 -SR9SZ 79.175.232.17 -SR9UV 89.174.117.157 -SR9UVK 194.187.236.178 -SR9UVP 85.190.240.120 -SR9UVZ 178.23.105.134 -SR9VVO 89.234.226.126 -SV1P 79.130.76.190 -SV2Q 80.106.24.223 -SV3G 83.212.248.94 -SV8S 94.66.26.109 -SV9K 85.72.39.67 -SW1I 178.59.23.138 -SW2A 109.242.193.199 -T79DV 77.242.223.46 -TF3RPI 194.144.104.195 -UR0HUA 193.200.175.69 -V53W 41.182.6.211 -VA2LX 45.42.113.14 -VA2REX 207.35.36.178 -VA2RKA 199.91.244.166 -VA2RKB 23.178.1.126 -VA2RVO 207.253.107.5 -VA2XNY 206.47.252.157 -VA3ITL 174.117.156.18 -VA3ODG 64.179.223.221 -VA3RDD 142.114.102.68 -VA3SNR 70.76.12.11 -VA3SRG 216.223.75.148 -VA3WDG 216.8.148.24 -VA5DR 128.233.238.66 -VA6ACW 68.147.27.52 -VA6MEO 70.73.156.104 -VA6SRG 199.126.180.49 -VA7REF 24.86.6.163 -VE1DNR 47.55.201.14 -VE2CSA 142.116.210.109 -VE2CST 192.99.111.170 -VE2FCT 173.177.48.60 -VE2QE 70.50.46.246 -VE2REX 209.226.17.162 -VE2RHH 70.27.229.10 -VE2RIO 192.81.14.31 -VE2RKI 104.245.152.243 -VE2RQT 132.203.129.20 -VE2RTO 148.59.220.178 -VE2RVI 104.192.17.255 -VE2SEW 207.253.181.227 -VE2SKG 74.210.140.143 -VE2VPS 66.159.41.113 -VE3DSL 208.114.128.164 -VE3EBX 99.228.74.129 -VE3FCD 99.237.33.210 -VE3NMN 97.107.59.241 -VE3RIG 108.161.115.76 -VE3RSB 184.151.178.34 -VE3STP 104.245.3.63 -VE3XBT 50.100.78.137 -VE3YRK 66.159.121.4 -VE5MBX 24.72.17.36 -VE6IPG 70.73.156.94 -VE6JKB 108.173.190.73 -VE6KM 69.196.80.40 -VE6MHD 198.53.218.88 -VE6WRE 70.73.93.106 -VE7RMR 216.13.198.52 -VK1RWN 43.225.61.4 -VK2RAG 202.182.150.242 -VK2RBV 202.182.133.44 -VK2RWN 112.213.33.196 -VK3RMM 120.157.89.133 -VK4RBD 110.141.198.177 -VK4RBX 203.201.137.251 -VK4RDK 123.211.29.67 -VK4RUS 103.102.229.98 -VK7RAA 118.208.246.183 -VK7RCR 120.29.244.4 -VK7RRR 118.208.244.133 -VY1RDS 174.90.251.92 -VY2CFB 96.30.171.235 -VY2DSR 96.30.161.195 -W0CDS 66.109.218.67 -W0QEY 129.82.254.231 -W0ZWY 184.169.107.74 -W1BCG 199.241.247.2 -W1CNH 65.175.188.230 -W1MRA 173.48.14.233 -W2ECA 163.151.247.12 -W2XRX 174.224.132.162 -W3DHS 69.140.91.192 -W3DRA 69.242.93.85 -W4BRM 108.18.217.86 -W4GSO 98.101.176.110 -W4GWM 64.234.103.45 -W4IAX 70.145.51.143 -W4VLD 192.119.238.197 -W5AW 208.68.71.94 -W5DRA 75.66.21.213 -W5SUL 173.216.181.178 -W5TC 129.15.109.18 -W5WIN 24.162.194.195 -W6CX 208.80.118.218 -W7AI 75.146.134.20 -W7NPC 97.113.104.185 -W7NPG 50.47.138.52 -W7RNK 70.89.121.130 -W8HEQ 74.218.95.46 -W8ORG 162.195.36.251 -W8RNL 74.218.136.51 -W8RTL 72.9.63.207 -W9WDX 74.126.231.228 -WA0RC 204.77.163.64 -WA2EMO 72.230.162.224 -WA4KIK 71.82.31.66 -WA7HJR 44.24.241.133 -WA7VC 64.91.53.130 -WB1GOF 108.7.45.17 -WB4KOG 44.34.128.175 -WB6BA 64.135.177.146 -WD1CRS 73.126.7.192 -WI8DX 24.209.195.47 -WI9WIN 216.246.177.7 -WR0AEN 66.109.209.220 -WR5FM 67.61.81.83 -WR7KCR 69.55.219.9 -WW9RS 216.222.190.20 -WX4PCA 107.141.141.203 -WX8GRR 96.36.57.251 -WX9NC 76.29.59.178 -XE2ITZ 189.237.150.227 -XE2NL 187.138.65.97 -YO6K 86.125.103.6 -YO6U 193.254.231.124 -ZL1CCT 131.203.124.1 -ZL1IBD 202.36.75.248 -ZL1TPD 222.154.227.90 -ZS6VTS 146.64.235.18 -ZU9DBI 154.73.157.17 +# Prepared at ar-dns.net - Sun, 19 May 2019 12:38:29 GMT +REF001 ref001.dstargateway.org +REF002 ref002.dstargateway.org +REF003 ref003.dstargateway.org +REF004 ref004.dstargateway.org +REF005 ref005.dstargateway.org +REF006 ref006.dstargateway.org +REF007 ref007.dstargateway.org +REF008 ref008.dstargateway.org +REF009 ref009.dstargateway.org +REF010 ref010.dstargateway.org +REF011 ref011.dstargateway.org +REF012 ref012.dstargateway.org +REF013 ref013.dstargateway.org +REF014 ref014.dstargateway.org +REF015 ref015.dstargateway.org +REF016 ref016.dstargateway.org +REF017 ref017.dstargateway.org +REF018 ref018.dstargateway.org +REF019 ref019.dstargateway.org +REF020 ref020.dstargateway.org +REF021 ref021.dstargateway.org +REF022 ref022.dstargateway.org +REF023 ref023.dstargateway.org +REF024 ref024.dstargateway.org +REF025 ref025.dstargateway.org +REF026 ref026.dstargateway.org +REF027 ref027.dstargateway.org +REF028 ref028.dstargateway.org +REF029 ref029.dstargateway.org +REF030 ref030.dstargateway.org +REF031 ref031.dstargateway.org +REF032 ref032.dstargateway.org +REF033 ref033.dstargateway.org +REF034 ref034.dstargateway.org +REF035 ref035.dstargateway.org +REF036 ref036.dstargateway.org +REF037 ref037.dstargateway.org +REF038 ref038.dstargateway.org +REF039 ref039.dstargateway.org +REF040 ref040.dstargateway.org +REF041 ref041.dstargateway.org +REF042 ref042.dstargateway.org +REF043 ref043.dstargateway.org +REF044 ref044.dstargateway.org +REF045 ref045.dstargateway.org +REF046 ref046.dstargateway.org +REF047 ref047.dstargateway.org +REF048 ref048.dstargateway.org +REF049 ref049.dstargateway.org +REF050 ref050.dstargateway.org +REF051 ref051.dstargateway.org +REF052 ref052.dstargateway.org +REF053 ref053.dstargateway.org +REF054 ref054.dstargateway.org +REF055 ref055.dstargateway.org +REF056 ref056.dstargateway.org +REF057 ref057.dstargateway.org +REF058 ref058.dstargateway.org +REF059 ref059.dstargateway.org +REF060 ref060.dstargateway.org +REF061 ref061.dstargateway.org +REF062 ref062.dstargateway.org +REF063 ref063.dstargateway.org +REF064 ref064.dstargateway.org +REF065 ref065.dstargateway.org +REF066 ref066.dstargateway.org +REF067 ref067.dstargateway.org +REF068 ref068.dstargateway.org +REF069 ref069.dstargateway.org +REF070 ref070.dstargateway.org +REF071 ref071.dstargateway.org +REF072 ref072.dstargateway.org +REF073 ref073.dstargateway.org +REF074 ref074.dstargateway.org +REF075 ref075.dstargateway.org +REF076 ref076.dstargateway.org +REF077 ref077.dstargateway.org +REF078 ref078.dstargateway.org +REF079 ref079.dstargateway.org +REF080 ref080.dstargateway.org +REF081 ref081.dstargateway.org +REF082 ref082.dstargateway.org +REF083 ref083.dstargateway.org +REF084 ref084.dstargateway.org +REF085 ref085.dstargateway.org +REF086 ref086.dstargateway.org +REF087 ref087.dstargateway.org +REF088 ref088.dstargateway.org +REF089 ref089.dstargateway.org +REF367 xrf367.ad6dm.net +REF425 xlx425.xlx.ar-dns.net +REF520 xlx.dtdxa.com +REF555 xlx555.dtdxa.com +REF911 xlx911.patrweb.com +# EOF - Sun, 19 May 2019 12:38:29 GMT diff --git a/Data/Makefile b/Data/Makefile index 4350c30..c115445 100644 --- a/Data/Makefile +++ b/Data/Makefile @@ -1,3 +1,4 @@ +.PHONY: install install: install -d -g bin -o root -m 0775 $(DATADIR) install -g bin -o root -m 0664 CCS_Hosts.txt $(DATADIR) diff --git a/GUICommon/DCSSet.cpp b/GUICommon/DCSSet.cpp index 6339de8..9bc22b2 100644 --- a/GUICommon/DCSSet.cpp +++ b/GUICommon/DCSSet.cpp @@ -109,12 +109,13 @@ bool CDCSSet::Validate() if (n == wxNOT_FOUND) return false; - n = m_ccsEnabled->GetCurrentSelection(); - if (n == wxNOT_FOUND) - return false; + bool ccsEnabled = m_ccsEnabled->GetCurrentSelection() == 1; + bool ccsHostSelected = m_ccsHosts->GetCurrentSelection() != wxNOT_FOUND; - if (m_ccsHosts->GetCurrentSelection() == wxNOT_FOUND) + if (ccsEnabled && !ccsHostSelected) { + wxMessageBox(_("CCS is enabled and no CCS host has been selected. Either disable CCS or select a CCS host.")); return false; + } return true; } diff --git a/GUICommon/GUICommon.vcxproj b/GUICommon/GUICommon.vcxproj index b04a02c..fa1aa10 100644 --- a/GUICommon/GUICommon.vcxproj +++ b/GUICommon/GUICommon.vcxproj @@ -77,6 +77,10 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) + + + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) @@ -139,6 +143,7 @@ + @@ -155,6 +160,7 @@ + diff --git a/GUICommon/GUICommon.vcxproj.filters b/GUICommon/GUICommon.vcxproj.filters index 479d80d..1e65ef7 100644 --- a/GUICommon/GUICommon.vcxproj.filters +++ b/GUICommon/GUICommon.vcxproj.filters @@ -53,6 +53,9 @@ Source Files + + Source Files + @@ -97,5 +100,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/GUICommon/Makefile b/GUICommon/Makefile index 4a837a3..c3cb0a0 100644 --- a/GUICommon/Makefile +++ b/GUICommon/Makefile @@ -1,14 +1,20 @@ -OBJECTS = AddressTextCtrl.o CallsignTextCtrl.o DCSSet.o DescriptionTextCtrl.o DExtraSet.o DPlusSet.o DPRSSet.o PortTextCtrl.o RemoteSet.o \ +OBJECTS = AddressTextCtrl.o CallsignTextCtrl.o DCSSet.o DescriptionTextCtrl.o DExtraSet.o DPlusSet.o DPRSSet.o MobileGPSSet.o PortTextCtrl.o RemoteSet.o \ RepeaterDataSet.o RepeaterInfoSet.o RestrictedTextCtrl.o StarNetSet.o XLXSet.o +.PHONY: all all: GUICommon.a -GUICommon.a: $(OBJECTS) +GUICommon.a: $(OBJECTS) ../Common/Common.a $(AR) rcs GUICommon.a $(OBJECTS) +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common $< > $*.d +.PHONY: clean clean: $(RM) GUICommon.a *.o *.d *.bak *~ +../Common/Common.a: diff --git a/GUICommon/MobileGPSSet.cpp b/GUICommon/MobileGPSSet.cpp new file mode 100644 index 0000000..ce67cb4 --- /dev/null +++ b/GUICommon/MobileGPSSet.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2018 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "MobileGPSSet.h" + +const unsigned int CONTROL_WIDTH1 = 130U; +const unsigned int CONTROL_WIDTH2 = 80U; + +const unsigned int ADDRESS_LENGTH = 15U; +const unsigned int PORT_LENGTH = 5U; + +const unsigned int BORDER_SIZE = 5U; + +CMobileGPSSet::CMobileGPSSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, unsigned int port) : +wxPanel(parent, id), +m_title(title), +m_enabled(NULL), +m_address(NULL), +m_port(NULL) +{ + wxFlexGridSizer* sizer = new wxFlexGridSizer(2); + + wxStaticText* enabledLabel = new wxStaticText(this, -1, _("Mobile GPS")); + sizer->Add(enabledLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); + + m_enabled = new wxChoice(this, -1, wxDefaultPosition, wxSize(CONTROL_WIDTH1, -1)); + m_enabled->Append(_("Disabled")); + m_enabled->Append(_("Enabled")); + sizer->Add(m_enabled, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); + m_enabled->SetSelection(enabled ? 1 : 0); + + wxStaticText* addressLabel = new wxStaticText(this, -1, _("Address")); + sizer->Add(addressLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); + + m_address = new CAddressTextCtrl(this, -1, address, wxDefaultPosition, wxSize(CONTROL_WIDTH1, -1)); + m_address->SetMaxLength(ADDRESS_LENGTH); + sizer->Add(m_address, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); + + wxStaticText* portLabel = new wxStaticText(this, -1, _("Port")); + sizer->Add(portLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); + + wxString buffer; + buffer.Printf(wxT("%u"), port); + + m_port = new CPortTextCtrl(this, -1, buffer, wxDefaultPosition, wxSize(CONTROL_WIDTH2, -1)); + m_port->SetMaxLength(PORT_LENGTH); + sizer->Add(m_port, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); + + SetAutoLayout(true); + + SetSizer(sizer); +} + + +CMobileGPSSet::~CMobileGPSSet() +{ +} + +bool CMobileGPSSet::Validate() +{ + if (m_enabled->GetCurrentSelection() == wxNOT_FOUND) + return false; + + wxString address = getAddress(); + + if (address.IsEmpty()) { + wxMessageDialog dialog(this, _("The Mobile GPS Address is not valid"), m_title + _(" Error"), wxICON_ERROR); + dialog.ShowModal(); + return false; + } + + unsigned int port = getPort(); + + if (port == 0U || port > 65535U) { + wxMessageDialog dialog(this, _("The Mobile GPS Port is not valid"), m_title + _(" Error"), wxICON_ERROR); + dialog.ShowModal(); + return false; + } + + return true; +} + +bool CMobileGPSSet::getEnabled() const +{ + int c = m_enabled->GetCurrentSelection(); + if (c == wxNOT_FOUND) + return false; + + return c == 1; +} + +wxString CMobileGPSSet::getAddress() const +{ + return m_address->GetValue(); +} + +unsigned int CMobileGPSSet::getPort() const +{ + unsigned long n; + m_port->GetValue().ToULong(&n); + + return n; +} diff --git a/GUICommon/MobileGPSSet.h b/GUICommon/MobileGPSSet.h new file mode 100644 index 0000000..b9813e1 --- /dev/null +++ b/GUICommon/MobileGPSSet.h @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2018 by Jonathan Naylor G4KLX + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef MobileGPSSet_H +#define MobileGPSSet_H + +#include "AddressTextCtrl.h" +#include "PortTextCtrl.h" +#include "Defs.h" + +#include + +class CMobileGPSSet: public wxPanel { +public: + CMobileGPSSet(wxWindow* parent, int id, const wxString& title, bool enabled, const wxString& address, unsigned int port); + virtual ~CMobileGPSSet(); + + virtual bool Validate(); + + virtual bool getEnabled() const; + virtual wxString getAddress() const; + virtual unsigned int getPort() const; + +private: + wxString m_title; + wxChoice* m_enabled; + CAddressTextCtrl* m_address; + CPortTextCtrl* m_port; +}; + +#endif diff --git a/GUICommon/XLXSet.cpp b/GUICommon/XLXSet.cpp index 616e6c0..7d04f98 100644 --- a/GUICommon/XLXSet.cpp +++ b/GUICommon/XLXSet.cpp @@ -20,6 +20,8 @@ #include "XLXSet.h" #include "Defs.h" +#include + // TODO F4FXL try to figure out why below symbols are not found under ubuntu //#include @@ -34,11 +36,10 @@ BEGIN_EVENT_TABLE(CXLXSet, wxPanel) END_EVENT_TABLE() -CXLXSet::CXLXSet(wxWindow* parent, int id, const wxString& title, bool xlxEnabled, bool xlxOverrideLocal, const wxString& xlxHostsFileUrl) : +CXLXSet::CXLXSet(wxWindow* parent, int id, const wxString& title, bool xlxEnabled, const wxString& xlxHostsFileUrl) : wxPanel(parent, id), m_title(title), m_xlxEnabled(NULL), -m_xlxOverrideLocal(NULL), m_xlxHostsFileUrl(NULL) { wxFlexGridSizer* sizer = new wxFlexGridSizer(2); @@ -51,15 +52,6 @@ m_xlxHostsFileUrl(NULL) m_xlxEnabled->Append(_("Enabled")); sizer->Add(m_xlxEnabled, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); m_xlxEnabled->SetSelection(xlxEnabled ? 1 : 0); - - wxStaticText* xlxOverrideLocalLabel = new wxStaticText(this, -1, _("Override local hosts files")); - sizer->Add(xlxOverrideLocalLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); - - m_xlxOverrideLocal = new wxChoice(this, CHOICE_ENABLED, wxDefaultPosition, wxSize(CONTROL_WIDTH, -1)); - m_xlxOverrideLocal->Append(_("No")); - m_xlxOverrideLocal->Append(_("Yes")); - sizer->Add(m_xlxOverrideLocal, 0, wxALL | wxALIGN_LEFT, BORDER_SIZE); - m_xlxOverrideLocal->SetSelection(xlxOverrideLocal ? 1 : 0); wxStaticText* xlxHostsFileUrlLabel = new wxStaticText(this, -1, _("Hosts file URL")); sizer->Add(xlxHostsFileUrlLabel, 0, wxALL | wxALIGN_RIGHT, BORDER_SIZE); @@ -88,28 +80,22 @@ bool CXLXSet::Validate() int n = m_xlxEnabled->GetCurrentSelection(); if (n == wxNOT_FOUND) return false; - - n = m_xlxOverrideLocal->GetCurrentSelection(); - if (n == wxNOT_FOUND) - return false; +#if defined(__WINDOWS__) // TODO F4FXL try to figure out why below symbols are not found under ubuntu - /*wxString value = m_xlxHostsFileUrl->GetValue(); + wxString value = m_xlxHostsFileUrl->GetValue(); wxURL url(value); - if (url.GetError() != wxURL_NOERR) - return false;*/ + if (url.GetError() == wxURL_NOERR) + return true; + wxMessageDialog dialog(this, _("The XLX host file URL is not valid"), m_title + _(" Error"), wxICON_ERROR); + dialog.ShowModal(); + return false; +#else return true; +#endif } -bool CXLXSet::getXLXOverrideLocal() const -{ - int c = m_xlxEnabled->GetCurrentSelection(); - if (c == wxNOT_FOUND) - return false; - - return c == 1; -} bool CXLXSet::getXLXEnabled() const { @@ -124,13 +110,16 @@ wxString CXLXSet::getXLXHostsFileUrl() const { wxString value = m_xlxHostsFileUrl->GetValue(); - +#if defined(__WINDOWS__) // TODO F4FXL try to figure out why below symbols are not found under ubuntu - //wxURL url(value); - //if (url.GetError() == wxURL_NOERR) - // return value; - + wxURL url(value); + if (url.GetError() == wxURL_NOERR) + return value; + return wxEmptyString; +#else + return value; +#endif } void CXLXSet::onEnabled(wxCommandEvent &event) diff --git a/GUICommon/XLXSet.h b/GUICommon/XLXSet.h index f765b55..fee249f 100644 --- a/GUICommon/XLXSet.h +++ b/GUICommon/XLXSet.h @@ -23,13 +23,12 @@ class CXLXSet : public wxPanel { public: - CXLXSet(wxWindow* parent, int id, const wxString& title, bool xlxEnabled, bool xlxOverrideLocal, const wxString& xlxHostsFileUrl); + CXLXSet(wxWindow* parent, int id, const wxString& title, bool xlxEnabled, const wxString& xlxHostsFileUrl); virtual ~CXLXSet(); virtual bool Validate(); virtual bool getXLXEnabled() const; - virtual bool getXLXOverrideLocal() const; virtual wxString getXLXHostsFileUrl() const; virtual void onEnabled(wxCommandEvent& event); @@ -37,7 +36,6 @@ public: private: wxString m_title; wxChoice* m_xlxEnabled; - wxChoice* m_xlxOverrideLocal; wxTextCtrl* m_xlxHostsFileUrl; DECLARE_EVENT_TABLE() diff --git a/Makefile b/Makefile index 979fa73..634093f 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,14 @@ +ifeq ($(TARGET), opendv) +export DATADIR := "/usr/share/opendv" +export LOGDIR := "/var/log/opendv" +export CONFDIR := "/etc" +export BINDIR := "/usr/sbin" +else export DATADIR := "/usr/share/ircddbgateway" export LOGDIR := "/var/log" export CONFDIR := "/etc" export BINDIR := "/usr/bin" +endif # Add -DDCS_LINK to the end of the CFLAGS line below to add DCS linking to StarNet # Add -DDEXTRA_LINK to the end of the CFLAGS line below to add DExtra linking to StarNet @@ -9,49 +16,63 @@ export BINDIR := "/usr/bin" export CXX := $(shell wx-config --cxx) export CFLAGS := -O2 -Wall $(shell wx-config --cxxflags) -DLOG_DIR='$(LOGDIR)' -DCONF_DIR='$(CONFDIR)' -DDATA_DIR='$(DATADIR)' export GUILIBS := $(shell wx-config --libs adv,core,base) -export LIBS := $(shell wx-config --libs base) +export LIBS := $(shell wx-config --libs base,net) export LDFLAGS := +.PHONY: all all: ircDDBGateway/ircddbgatewayd ircDDBGatewayConfig/ircddbgatewayconfig APRSTransmit/aprstransmitd RemoteControl/remotecontrold \ StarNetServer/starnetserverd TextTransmit/texttransmitd TimerControl/timercontrold TimeServer/timeserverd VoiceTransmit/voicetransmitd -ircDDBGateway/ircddbgatewayd: Common/Common.a ircDDB/IRCDDB.a +ircDDBGateway/ircddbgatewayd: Common/Common.a ircDDB/IRCDDB.a force $(MAKE) -C ircDDBGateway -ircDDBGatewayConfig/ircddbgatewayconfig: GUICommon/GUICommon.a Common/Common.a +ircDDBGatewayConfig/ircddbgatewayconfig: GUICommon/GUICommon.a Common/Common.a force $(MAKE) -C ircDDBGatewayConfig -APRSTransmit/aprstransmitd: Common/Common.a +APRSTransmit/aprstransmitd: Common/Common.a force $(MAKE) -C APRSTransmit -RemoteControl/remotecontrold: Common/Common.a +RemoteControl/remotecontrold: Common/Common.a force $(MAKE) -C RemoteControl -StarNetServer/starnetserverd: Common/Common.a ircDDB/IRCDDB.a +StarNetServer/starnetserverd: Common/Common.a ircDDB/IRCDDB.a force $(MAKE) -C StarNetServer -TextTransmit/texttransmitd: Common/Common.a +TextTransmit/texttransmitd: Common/Common.a force $(MAKE) -C TextTransmit -TimerControl/timercontrold: Common/Common.a GUICommon/GUICommon.a +TimerControl/timercontrold: Common/Common.a GUICommon/GUICommon.a force $(MAKE) -C TimerControl -TimeServer/timeserverd: Common/Common.a GUICommon/GUICommon.a +TimeServer/timeserverd: Common/Common.a GUICommon/GUICommon.a force $(MAKE) -C TimeServer -VoiceTransmit/voicetransmitd: Common/Common.a +VoiceTransmit/voicetransmitd: Common/Common.a force $(MAKE) -C VoiceTransmit -GUICommon/GUICommon.a: +GUICommon/GUICommon.a: force $(MAKE) -C GUICommon -Common/Common.a: +Common/Common.a: force $(MAKE) -C Common -ircDDB/IRCDDB.a: +ircDDB/IRCDDB.a: force $(MAKE) -C ircDDB +.PHONY: install install: all +ifeq ($(TARGET), opendv) + useradd --user-group -M --system opendv --shell /bin/false || true + + # Add the opendv user to the audio group so that it can open audio + # devices when using the audio based drivers such as the Sound Card + # one. Maybe this should be moved to DStarRepeater instead ... + usermod --groups audio --append opendv || true + usermod --groups dialout --append opendv || true + usermod --groups gpio --append opendv || true + mkdir /var/log/opendv || true + chown opendv:opendv /var/log/opendv +endif $(MAKE) -C Data install $(MAKE) -C APRSTransmit install $(MAKE) -C ircDDBGateway install @@ -63,6 +84,7 @@ install: all $(MAKE) -C VoiceTransmit install $(MAKE) -C ircDDBGatewayConfig install +.PHONY: clean clean: $(MAKE) -C Common clean $(MAKE) -C ircDDB clean @@ -76,3 +98,8 @@ clean: $(MAKE) -C TimeServer clean $(MAKE) -C VoiceTransmit clean $(MAKE) -C ircDDBGatewayConfig clean + +.PHONY: force +force : + @true + diff --git a/MakefileGUI b/MakefileGUI index af13d02..ca8a81b 100644 --- a/MakefileGUI +++ b/MakefileGUI @@ -1,7 +1,14 @@ +ifeq ($(TARGET), opendv) +export DATADIR := "/usr/share/opendv" +export LOGDIR := "/var/log/opendv" +export CONFDIR := "/etc" +export BINDIR := "/usr/sbin" +else export DATADIR := "/usr/share/ircddbgateway" export LOGDIR := "/var/log" export CONFDIR := "/etc" export BINDIR := "/usr/bin" +endif # Add -DDCS_LINK to the end of the CFLAGS line below to add DCS linking to StarNet # Add -DDEXTRA_LINK to the end of the CFLAGS line below to add DExtra linking to StarNet @@ -9,48 +16,50 @@ export BINDIR := "/usr/bin" export CXX := $(shell wx-config --cxx) export CFLAGS := -O2 -Wall $(shell wx-config --cxxflags) -DLOG_DIR='$(LOGDIR)' -DCONF_DIR='$(CONFDIR)' -DDATA_DIR='$(DATADIR)' export GUILIBS := $(shell wx-config --libs adv,core,base) -export LIBS := $(shell wx-config --libs base) +export LIBS := $(shell wx-config --libs base,net) export LDFLAGS := +.PHONY: all all: ircDDBGateway/ircddbgateway ircDDBGatewayConfig/ircddbgatewayconfig APRSTransmit/aprstransmitd RemoteControl/remotecontrol \ StarNetServer/starnetserver TextTransmit/texttransmitd TimerControl/timercontrol TimeServer/timeserver VoiceTransmit/voicetransmitd -ircDDBGateway/ircddbgateway: GUICommon/GUICommon.a Common/Common.a ircDDB/IRCDDB.a +ircDDBGateway/ircddbgateway: GUICommon/GUICommon.a Common/Common.a ircDDB/IRCDDB.a force $(MAKE) -C ircDDBGateway -f MakefileGUI -ircDDBGatewayConfig/ircddbgatewayconfig: GUICommon/GUICommon.a Common/Common.a +ircDDBGatewayConfig/ircddbgatewayconfig: GUICommon/GUICommon.a Common/Common.a force $(MAKE) -C ircDDBGatewayConfig -APRSTransmit/aprstransmitd: Common/Common.a +APRSTransmit/aprstransmitd: Common/Common.a force $(MAKE) -C APRSTransmit -RemoteControl/remotecontrol: Common/Common.a +RemoteControl/remotecontrol: Common/Common.a force $(MAKE) -C RemoteControl -f MakefileGUI -StarNetServer/starnetserver: Common/Common.a ircDDB/IRCDDB.a +StarNetServer/starnetserver: Common/Common.a ircDDB/IRCDDB.a force $(MAKE) -C StarNetServer -f MakefileGUI -TextTransmit/texttransmitd: Common/Common.a +TextTransmit/texttransmitd: Common/Common.a force $(MAKE) -C TextTransmit -TimerControl/timercontrol: Common/Common.a GUICommon/GUICommon.a +TimerControl/timercontrol: Common/Common.a GUICommon/GUICommon.a force $(MAKE) -C TimerControl -f MakefileGUI -TimeServer/timeserver: Common/Common.a GUICommon/GUICommon.a +TimeServer/timeserver: Common/Common.a GUICommon/GUICommon.a force $(MAKE) -C TimeServer -f MakefileGUI -VoiceTransmit/voicetransmitd: Common/Common.a +VoiceTransmit/voicetransmitd: Common/Common.a force $(MAKE) -C VoiceTransmit -GUICommon/GUICommon.a: +GUICommon/GUICommon.a: force $(MAKE) -C GUICommon -Common/Common.a: +Common/Common.a: force $(MAKE) -C Common -ircDDB/IRCDDB.a: +ircDDB/IRCDDB.a: force $(MAKE) -C ircDDB +.PHONY: install install: all $(MAKE) -C Data install $(MAKE) -C APRSTransmit install @@ -63,6 +72,7 @@ install: all $(MAKE) -C VoiceTransmit install $(MAKE) -C ircDDBGatewayConfig install +.PHONY: clean clean: $(MAKE) -C Common clean $(MAKE) -C ircDDB clean @@ -76,3 +86,7 @@ clean: $(MAKE) -C TimeServer -f MakefileGUI clean $(MAKE) -C VoiceTransmit clean $(MAKE) -C ircDDBGatewayConfig clean + +.PHONY: force +force: + true; diff --git a/README.md b/README.md index d099084..a90b421 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This is the ircDDB Gateway. It allows a D-Star Repeater to interface into callsi * XLX reflectors. * CCS7 routing. * D-RATS data transfers. -* Gateway DPRS data to aprs.fi. +* Gateway DPRS data to APRS-IS. * Full multi lingual text and voice announcements. * DTMF or UR call control. * Remote control interface. @@ -22,3 +22,24 @@ There are many external programs that allow for inserting voice or text messages They all build on 32-bit and 64-bit Linux as well as on Windows using Visual Studio 2017 on x86 and x64. This software is licenced under the GPL v2. + +# Build and installing +## Regular build +```shell +make +make -f MakefileGUI #only required if you want to build the GUI programs +sudo make install +``` +## Drop-in replacement for dl5di OpenDV packages +This will conpile the program to be used as a drop in replacement for the no longer maintained DL5DI OpenDV packages. Systemd files to run ircddbgatewayd as daemon will also be installed. +```shell +export TARGET=opendv +make +make -f MakefileGUI #only required if you want to build the GUI programs +sudo make install +``` +Now you should edit the configuration in the file /etc/ircddbgateway to match your needs. +```shell +sudo systemctl enable ircddbgatewayd.service #enable service +sudo service ircddbgatewayd start +``` diff --git a/RemoteControl/Makefile b/RemoteControl/Makefile index 48a2a54..a4c399a 100644 --- a/RemoteControl/Makefile +++ b/RemoteControl/Makefile @@ -1,17 +1,24 @@ OBJECTS = RemoteControlAppD.o RemoteControlCallsignData.o RemoteControlConfig.o RemoteControlLinkData.o RemoteControlRemoteControlHandler.o \ RemoteControlRepeaterData.o RemoteControlStarNetGroup.o RemoteControlStarNetUser.o +.PHONY: all all: remotecontrold -remotecontrold: $(OBJECTS) +remotecontrold: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o remotecontrold +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 remotecontrold $(BINDIR) +.PHONY: clean clean: $(RM) remotecontrold *.o *.d *.bak *~ +../Common/Common.a: diff --git a/RemoteControl/MakefileGUI b/RemoteControl/MakefileGUI index 316607f..ed75ed9 100644 --- a/RemoteControl/MakefileGUI +++ b/RemoteControl/MakefileGUI @@ -2,17 +2,25 @@ OBJECTS = RemoteControlApp.o RemoteControlCallsignData.o RemoteControlConfig.o R RemoteControlPreferences.o RemoteControlRemoteControlHandler.o RemoteControlRemoteSet.o RemoteControlRepeaterData.o \ RemoteControlRepeaterPanel.o RemoteControlStarNetGroup.o RemoteControlStarNetPanel.o RemoteControlStarNetUser.o +.PHONY: all all: remotecontrol -remotecontrol: $(OBJECTS) +remotecontrol: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(LDFLAGS) $(GUILIBS) -o remotecontrol +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common -I../GUICommon $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 remotecontrol $(BINDIR) +.PHONY: clean clean: $(RM) remotecontrol *.o *.d *.bak *~ +../GUICommon/GUICommon.a: +../Common/Common.a: diff --git a/RemoteControl/RemoteControl.vcxproj b/RemoteControl/RemoteControl.vcxproj index ba4020a..fcca2ca 100644 --- a/RemoteControl/RemoteControl.vcxproj +++ b/RemoteControl/RemoteControl.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/StarNetServer/Makefile b/StarNetServer/Makefile index f49f112..a08a3b6 100644 --- a/StarNetServer/Makefile +++ b/StarNetServer/Makefile @@ -1,16 +1,24 @@ OBJECTS = StarNetServerAppD.o StarNetServerConfig.o StarNetServerThread.o StarNetServerThreadHelper.o +.PHONY: all all: starnetserverd -starnetserverd: $(OBJECTS) +starnetserverd: $(OBJECTS) ../Common/Common.a ../ircDDB/IRCDDB.a $(CXX) $(OBJECTS) ../Common/Common.a ../ircDDB/IRCDDB.a $(LDFLAGS) $(LIBS) -o starnetserverd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -I../ircDDB -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common -I../ircDDB $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 starnetserverd $(BINDIR) +.PHONY: clean clean: $(RM) starnetserverd *.o *.d *.bak *~ +../Common/Common.a: +../ircDDB/IRCDDB.a: diff --git a/StarNetServer/MakefileGUI b/StarNetServer/MakefileGUI index 9073dab..61fe271 100644 --- a/StarNetServer/MakefileGUI +++ b/StarNetServer/MakefileGUI @@ -2,17 +2,25 @@ OBJECTS = StarNetServerApp.o StarNetServerCallsignSet.o StarNetServerConfig.o St StarNetServerLogRedirect.o StarNetServerMiscellaneousSet.o StarNetServerPreferences.o StarNetServerThread.o \ StarNetServerThreadHelper.o +.PHONY: all all: starnetserver -starnetserver: $(OBJECTS) +starnetserver: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a ../ircDDB/IRCDDB.a $(LDFLAGS) $(GUILIBS) -o starnetserver +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -I../ircDDB -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common -I../GUICommon -I../ircDDB $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 starnetserver $(BINDIR) +.PHONY: clean clean: $(RM) starnetserver *.o *.d *.bak *~ +../GUICommon/GUICommon.a: +../Common/Common.a: diff --git a/StarNetServer/StarNetServer.vcxproj b/StarNetServer/StarNetServer.vcxproj index 4c7a44c..6dbfc4b 100644 --- a/StarNetServer/StarNetServer.vcxproj +++ b/StarNetServer/StarNetServer.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/TextTransmit/Makefile b/TextTransmit/Makefile index c4e70bc..a059e2e 100644 --- a/TextTransmit/Makefile +++ b/TextTransmit/Makefile @@ -1,16 +1,23 @@ OBJECTS = TextTransmit.o +.PHONY: all all: texttransmitd -texttransmitd: $(OBJECTS) +texttransmitd: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o texttransmitd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 texttransmitd $(BINDIR) +.PHONY: clean clean: $(RM) texttransmitd *.o *.d *.bak *~ +../Common/Common.a: diff --git a/TextTransmit/TextTransmit.vcxproj b/TextTransmit/TextTransmit.vcxproj index 9f636d8..b9df38e 100644 --- a/TextTransmit/TextTransmit.vcxproj +++ b/TextTransmit/TextTransmit.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/TimeServer/Makefile b/TimeServer/Makefile index 69b2339..eca5c6a 100644 --- a/TimeServer/Makefile +++ b/TimeServer/Makefile @@ -1,16 +1,23 @@ OBJECTS = TimeServerD.o TimeServerConfig.o TimeServerThread.o TimeServerThreadHelper.o +.PHONY: all all: timeserverd -timeserverd: $(OBJECTS) +timeserverd: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o timeserverd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 timeserverd $(BINDIR) +.PHONY: clean clean: $(RM) timeserverd *.o *.d *.bak *~ +../Common/Common.a: diff --git a/TimeServer/MakefileGUI b/TimeServer/MakefileGUI index 9ac2e11..9982b46 100644 --- a/TimeServer/MakefileGUI +++ b/TimeServer/MakefileGUI @@ -1,17 +1,25 @@ OBJECTS = TimeServerApp.o TimeServerAnnouncementsSet.o TimeServerConfig.o TimeServerFrame.o TimeServerGatewaySet.o TimeServerLogRedirect.o \ TimeServerPreferences.o TimeServerThread.o TimeServerThreadHelper.o +.PHONY: all all: timeserver -timeserver: $(OBJECTS) +timeserver: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(LDFLAGS) $(GUILIBS) -o timeserver +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common -I../GUICommon $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 timeserver $(BINDIR) +.PHONY: clean clean: $(RM) timeserver *.o *.d *.bak *~ +../GUICommon/GUICommon.a: +../Common/Common.a: diff --git a/TimeServer/TimeServer.vcxproj b/TimeServer/TimeServer.vcxproj index ff96b71..1dda959 100644 --- a/TimeServer/TimeServer.vcxproj +++ b/TimeServer/TimeServer.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/TimerControl/Makefile b/TimerControl/Makefile index 53877ff..823e32c 100644 --- a/TimerControl/Makefile +++ b/TimerControl/Makefile @@ -1,17 +1,25 @@ OBJECTS = TimerControlAppD.o TimerControlConfig.o TimerControlItemFile.o TimerControlRemoteControlHandler.o TimerControlThread.o \ TimerControlThreadHelper.o +.PHONY: all all: timercontrold -timercontrold: $(OBJECTS) +timercontrold: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o timercontrold +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 timercontrold $(BINDIR) +.PHONY: clean clean: $(RM) timercontrold *.o *.d *.bak *~ +../Common/Common.a: + diff --git a/TimerControl/MakefileGUI b/TimerControl/MakefileGUI index 0012a10..fdcccc0 100644 --- a/TimerControl/MakefileGUI +++ b/TimerControl/MakefileGUI @@ -2,17 +2,25 @@ OBJECTS = TimerControlApp.o TimerControlConfig.o TimerControlFrame.o TimerContro TimerControlRemoteControlHandler.o TimerControlRemoteSet.o TimerControlRepeaterPanel.o TimerControlThread.o \ TimerControlThreadHelper.o +.PHONY: all all: timercontrol -timercontrol: $(OBJECTS) +timercontrol: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(LDFLAGS) $(GUILIBS) -o timercontrol +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common -I../GUICommon $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 timercontrol $(BINDIR) +.PHONY: clean clean: $(RM) timercontrol *.o *.d *.bak *~ +../GUICommon/GUICommon.a: +../Common/Common.a: diff --git a/TimerControl/TimerControl.vcxproj b/TimerControl/TimerControl.vcxproj index 96779de..246e3b1 100644 --- a/TimerControl/TimerControl.vcxproj +++ b/TimerControl/TimerControl.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/VoiceTransmit/Makefile b/VoiceTransmit/Makefile index 71cb8ef..a81f4be 100644 --- a/VoiceTransmit/Makefile +++ b/VoiceTransmit/Makefile @@ -1,16 +1,23 @@ OBJECTS = VoiceStore.o VoiceTransmit.o +.PHONY: all all: voicetransmitd -voicetransmitd: $(OBJECTS) +voicetransmitd: $(OBJECTS) ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a $(LDFLAGS) $(LIBS) -o voicetransmitd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 voicetransmitd $(BINDIR) +.PHONY: clean clean: $(RM) voicetransmitd *.o *.d *.bak *~ +../Common/Common.a: diff --git a/VoiceTransmit/VoiceTransmit.vcxproj b/VoiceTransmit/VoiceTransmit.vcxproj index c0af277..a866dad 100644 --- a/VoiceTransmit/VoiceTransmit.vcxproj +++ b/VoiceTransmit/VoiceTransmit.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/ircDDB/Makefile b/ircDDB/Makefile index b841a5e..5a6602c 100644 --- a/ircDDB/Makefile +++ b/ircDDB/Makefile @@ -1,14 +1,19 @@ OBJECTS = IRCClient.o IRCDDBApp.o IRCDDBClient.o IRCDDB.o IRCDDBMultiClient.o IRCMessage.o IRCMessageQueue.o IRCProtocol.o IRCReceiver.o \ IRCutils.o +.PHONY: all all: IRCDDB.a IRCDDB.a: $(OBJECTS) $(AR) rcs IRCDDB.a $(OBJECTS) +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) $< > $*.d +.PHONY: clean clean: $(RM) IRCDDB.a *.o *.d *.bak *~ diff --git a/ircDDB/ircDDB.vcxproj b/ircDDB/ircDDB.vcxproj index 75e4f54..a94f278 100644 --- a/ircDDB/ircDDB.vcxproj +++ b/ircDDB/ircDDB.vcxproj @@ -77,6 +77,10 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) + + + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/ircDDBGateway/IRCDDBGatewayApp.cpp b/ircDDBGateway/IRCDDBGatewayApp.cpp index 7c50b4b..1101563 100644 --- a/ircDDBGateway/IRCDDBGatewayApp.cpp +++ b/ircDDBGateway/IRCDDBGatewayApp.cpp @@ -171,8 +171,10 @@ int CIRCDDBGatewayApp::OnExit() wxLogInfo(APPLICATION_NAME + wxT(" is exiting")); - //m_thread->kill(); - wxGetApp().GetTopWindow()->Close(); + m_thread->kill(); + wxWindow * topWin = wxGetApp().GetTopWindow(); + if (topWin != NULL) + topWin->Close(); delete m_config; @@ -887,10 +889,9 @@ void CIRCDDBGatewayApp::createThread() wxLogInfo(wxT("DCS enabled: %d, CCS enabled: %d, server: %s"), int(dcsEnabled), int(ccsEnabled), ccsHost.c_str()); bool xlxEnabled; - bool xlxOverrideLocal; wxString xlxHostsFileUrl; - m_config->getXLX(xlxEnabled, xlxOverrideLocal, xlxHostsFileUrl); - wxLogInfo(wxT("XLX enabled: %d, Override Local %d, Hosts file url: %s"), int(xlxEnabled), int(xlxOverrideLocal), xlxHostsFileUrl.c_str()); + m_config->getXLX(xlxEnabled, xlxHostsFileUrl); + wxLogInfo(wxT("XLX enabled: %d, Hosts file url: %s"), int(xlxEnabled), xlxHostsFileUrl.c_str()); if (repeaterBand1.Len() > 1U || repeaterBand2.Len() > 1U || repeaterBand3.Len() > 1U || repeaterBand4.Len() > 1U) { @@ -960,7 +961,7 @@ void CIRCDDBGatewayApp::createThread() thread->setDExtra(dextraEnabled, dextraMaxDongles); thread->setDCS(dcsEnabled); thread->setCCS(ccsEnabled, ccsHost); - thread->setXLX(xlxEnabled, xlxOverrideLocal, xlxEnabled ? CXLXHostsFileDownloader::Download(xlxHostsFileUrl) : wxString(wxEmptyString)); + thread->setXLX(xlxEnabled, xlxEnabled ? CXLXHostsFileDownloader::Download(xlxHostsFileUrl) : wxString(wxEmptyString)); thread->setInfoEnabled(infoEnabled); thread->setEchoEnabled(echoEnabled); thread->setDTMFEnabled(dtmfEnabled); diff --git a/ircDDBGateway/IRCDDBGatewayAppD.cpp b/ircDDBGateway/IRCDDBGatewayAppD.cpp index ba06b19..5dcaa61 100644 --- a/ircDDBGateway/IRCDDBGatewayAppD.cpp +++ b/ircDDBGateway/IRCDDBGatewayAppD.cpp @@ -880,10 +880,9 @@ bool CIRCDDBGatewayAppD::createThread() wxLogInfo(wxT("DCS enabled: %d, CCS enabled: %d, server: %s"), int(dcsEnabled), int(ccsEnabled), ccsHost.c_str()); bool xlxEnabled; - bool xlxOverrideLocal; wxString xlxHostsFileUrl; - config.getXLX(xlxEnabled, xlxOverrideLocal, xlxHostsFileUrl); - wxLogInfo(wxT("XLX enabled: %d, Override Local %d, Hosts file url: %s"), int(xlxEnabled), int(xlxOverrideLocal), xlxHostsFileUrl.c_str()); + config.getXLX(xlxEnabled, xlxHostsFileUrl); + wxLogInfo(wxT("XLX enabled: %d, Override Local %d, Hosts file url: %s"), int(xlxEnabled), xlxHostsFileUrl.c_str()); if (repeaterBand1.Len() > 1U || repeaterBand2.Len() > 1U || repeaterBand3.Len() > 1U || repeaterBand4.Len() > 1U) { @@ -952,7 +951,7 @@ bool CIRCDDBGatewayAppD::createThread() m_thread->setDExtra(dextraEnabled, dextraMaxDongles); m_thread->setDCS(dcsEnabled); m_thread->setCCS(ccsEnabled, ccsHost); - m_thread->setXLX(xlxEnabled, xlxOverrideLocal, xlxEnabled ? CXLXHostsFileDownloader::Download(xlxHostsFileUrl): wxString(wxEmptyString)); + m_thread->setXLX(xlxEnabled, xlxEnabled ? CXLXHostsFileDownloader::Download(xlxHostsFileUrl): wxString(wxEmptyString)); m_thread->setInfoEnabled(infoEnabled); m_thread->setEchoEnabled(echoEnabled); m_thread->setDTMFEnabled(dtmfEnabled); diff --git a/ircDDBGateway/IRCDDBGatewayThread.cpp b/ircDDBGateway/IRCDDBGatewayThread.cpp index 630da5e..301bc4e 100644 --- a/ircDDBGateway/IRCDDBGatewayThread.cpp +++ b/ircDDBGateway/IRCDDBGatewayThread.cpp @@ -72,6 +72,9 @@ m_dextraPool(NULL), m_dplusPool(NULL), m_dcsPool(NULL), m_g2Handler(NULL), +#if defined(ENABLE_NAT_TRAVERSAL) +m_natTraversal(NULL), +#endif m_aprsWriter(NULL), m_irc(NULL), m_cache(), @@ -217,6 +220,13 @@ void CIRCDDBGatewayThread::run() m_g2Handler = NULL; } +#if defined(ENABLE_NAT_TRAVERSAL) + if(m_g2Handler != NULL) { + m_natTraversal = new CNatTraversalHandler(); + m_natTraversal->setG2Handler(m_g2Handler); + } +#endif + // Wait here until we have the essentials to run while (!m_killed && (m_dextraPool == NULL || m_dplusPool == NULL || m_dcsPool == NULL || m_g2Handler == NULL || (m_icomRepeaterHandler == NULL && m_hbRepeaterHandler == NULL && m_dummyRepeaterHandler == NULL) || m_gatewayCallsign.IsEmpty())) ::wxMilliSleep(500UL); // 1/2 sec @@ -573,11 +583,10 @@ void CIRCDDBGatewayThread::setDCS(bool enabled) m_dcsEnabled = enabled; } -void CIRCDDBGatewayThread::setXLX(bool enabled, bool overrideLocal, const wxString& xlxHostsFileName) +void CIRCDDBGatewayThread::setXLX(bool enabled, const wxString& xlxHostsFileName) { m_xlxEnabled = enabled; m_xlxHostsFileName = xlxHostsFileName; - m_xlxOverrideLocal = overrideLocal; } void CIRCDDBGatewayThread::setCCS(bool enabled, const wxString& host) @@ -719,7 +728,9 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!address.IsEmpty()) { wxLogInfo(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); +#if defined(ENABLE_NAT_TRAVERSAL) + m_natTraversal->traverseNatG2(address); +#endif } else { wxLogInfo(wxT("USER: %s NOT FOUND"), user.c_str()); } @@ -736,7 +747,9 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!address.IsEmpty()) { wxLogInfo(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); +#if defined(ENABLE_NAT_TRAVERSAL) + m_natTraversal->traverseNatG2(address); +#endif } else { wxLogMessage(wxT("REPEATER: %s NOT FOUND"), repeater.c_str()); } @@ -754,7 +767,9 @@ void CIRCDDBGatewayThread::processIrcDDB() if (!address.IsEmpty()) { wxLogInfo(wxT("GATEWAY: %s %s"), gateway.c_str(), address.c_str()); m_cache.updateGateway(gateway, address, DP_DEXTRA, false, false); - m_g2Handler->punchUDPHole(address); +#if defined(ENABLE_NAT_TRAVERSAL) + m_natTraversal->traverseNatG2(address); +#endif } else { wxLogMessage(wxT("GATEWAY: %s NOT FOUND"), gateway.c_str()); } @@ -1102,9 +1117,8 @@ void CIRCDDBGatewayThread::loadGateways() void CIRCDDBGatewayThread::loadReflectors() { - if(m_xlxEnabled && !m_xlxOverrideLocal) { + if (m_xlxEnabled) loadXLXReflectors(); - } if (m_dplusEnabled) { wxFileName fileName(wxFileName::GetHomeDir(), DPLUS_HOSTS_FILE_NAME); @@ -1147,10 +1161,6 @@ void CIRCDDBGatewayThread::loadReflectors() if (fileName.IsFileReadable()) loadDCSReflectors(fileName.GetFullPath()); } - - if(m_xlxEnabled && m_xlxOverrideLocal) { - loadXLXReflectors(); - } } void CIRCDDBGatewayThread::loadDExtraReflectors(const wxString& fileName) @@ -1252,6 +1262,10 @@ void CIRCDDBGatewayThread::loadXLXReflectors() CHostFile hostFile = CHostFile(m_xlxHostsFileName, true); for (unsigned int i = 0U; i < hostFile.getCount(); i++) { wxString reflector = hostFile.getName(i); + + if (!reflector.StartsWith(wxT("XLX"))) + continue; + in_addr address = CUDPReaderWriter::lookup(hostFile.getAddress(i)); bool lock = hostFile.getLock(i); @@ -1268,10 +1282,10 @@ void CIRCDDBGatewayThread::loadXLXReflectors() reflector.Truncate(LONG_CALLSIGN_LENGTH - 1U); reflector.Append(wxT("G")); - if(m_dcsEnabled && reflector.StartsWith(wxT("DCS"))) + //if (m_dcsEnabled && reflector.StartsWith(wxT("DCS"))) m_cache.updateGateway(reflector, addrText, DP_DCS, lock, true); - else if(m_dextraEnabled && reflector.StartsWith(wxT("XRF"))) - m_cache.updateGateway(reflector, addrText, DP_DEXTRA, lock, true); + //else if (m_dextraEnabled && reflector.StartsWith(wxT("XRF"))) + // m_cache.updateGateway(reflector, addrText, DP_DEXTRA, lock, true); count++; } diff --git a/ircDDBGateway/IRCDDBGatewayThread.h b/ircDDBGateway/IRCDDBGatewayThread.h index e3cc863..f89361b 100644 --- a/ircDDBGateway/IRCDDBGatewayThread.h +++ b/ircDDBGateway/IRCDDBGatewayThread.h @@ -35,6 +35,9 @@ #include "IRCDDB.h" #include "Timer.h" #include "Defs.h" +#if defined(ENABLE_NAT_TRAVERSAL) +#include "NatTraversalHandler.h" +#endif #include @@ -58,7 +61,7 @@ public: virtual void setDExtra(bool enabled, unsigned int maxDongles); virtual void setDPlus(bool enabled, unsigned int maxDongles, const wxString& login); virtual void setDCS(bool enabled); - virtual void setXLX(bool enabled, bool overrideLocal, const wxString& fileName); + virtual void setXLX(bool enabled, const wxString& fileName); virtual void setCCS(bool enabled, const wxString& host); virtual void setLog(bool enabled); virtual void setAPRSWriter(CAPRSWriter* writer); @@ -92,6 +95,9 @@ private: CDPlusProtocolHandlerPool* m_dplusPool; CDCSProtocolHandlerPool* m_dcsPool; CG2ProtocolHandler* m_g2Handler; +#if defined(ENABLE_NAT_TRAVERSAL) + CNatTraversalHandler* m_natTraversal; +#endif CAPRSWriter* m_aprsWriter; CIRCDDB* m_irc; CCacheManager m_cache; @@ -103,7 +109,6 @@ private: wxString m_dplusLogin; bool m_dcsEnabled; bool m_xlxEnabled; - bool m_xlxOverrideLocal; wxString m_xlxHostsFileName; bool m_ccsEnabled; wxString m_ccsHost; diff --git a/ircDDBGateway/Makefile b/ircDDBGateway/Makefile index 3bf974e..73efe6a 100644 --- a/ircDDBGateway/Makefile +++ b/ircDDBGateway/Makefile @@ -1,16 +1,29 @@ OBJECTS = IRCDDBGatewayAppD.o IRCDDBGatewayStatusData.o IRCDDBGatewayThread.o IRCDDBGatewayThreadHelper.o +.PHONY: all all: ircddbgatewayd -ircddbgatewayd: $(OBJECTS) +ircddbgatewayd: $(OBJECTS) ../ircDDB/IRCDDB.a ../Common/Common.a $(CXX) $(OBJECTS) ../Common/Common.a ../ircDDB/IRCDDB.a $(LDFLAGS) $(LIBS) -o ircddbgatewayd +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) -DwxUSE_GUI=0 $(CFLAGS) -I../Common -I../ircDDB -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common -I../ircDDB $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 ircddbgatewayd $(BINDIR) + cp ircddbgateway-emptyconfig $(CONFDIR)/ircddbgateway +ifeq ($(TARGET), opendv) + cp ../debian/ircddbgatewayd.ircddbgatewayd.service /lib/systemd/system/ircddbgatewayd.service +endif +.PHONY: clean clean: $(RM) ircddbgatewayd *.o *.d *.bak *~ +../Common/Common.a: +../ircDDB/IRCDDB.a: + diff --git a/ircDDBGateway/MakefileGUI b/ircDDBGateway/MakefileGUI index 8ebf8fa..f9e2bb5 100644 --- a/ircDDBGateway/MakefileGUI +++ b/ircDDBGateway/MakefileGUI @@ -1,17 +1,26 @@ OBJECTS = IRCDDBGatewayApp.o IRCDDBGatewayFrame.o IRCDDBGatewayLogRedirect.o IRCDDBGatewayStatusData.o IRCDDBGatewayThread.o \ IRCDDBGatewayThreadHelper.o +.PHONY: all all: ircddbgateway -ircddbgateway: $(OBJECTS) +ircddbgateway: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a ../ircDDB/IRCDDB.a $(LDFLAGS) $(GUILIBS) -o ircddbgateway +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -I../ircDDB -c -o $@ $< + $(CXX) -MM $(CFLAGS) -I../Common -I../GUICommon -I../ircDDB $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 ircddbgateway $(BINDIR) +.PHONY: clean clean: $(RM) ircddbgateway *.o *.d *.bak *~ +../GUICommon/GUICommon.a: +../Common/Common.a: + diff --git a/ircDDBGateway/ircDDBGateway.vcxproj b/ircDDBGateway/ircDDBGateway.vcxproj index 991b1d1..c41edff 100644 --- a/ircDDBGateway/ircDDBGateway.vcxproj +++ b/ircDDBGateway/ircDDBGateway.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath) diff --git a/ircDDBGateway/ircddbgateway-emptyconfig b/ircDDBGateway/ircddbgateway-emptyconfig new file mode 100644 index 0000000..1a79b95 --- /dev/null +++ b/ircDDBGateway/ircddbgateway-emptyconfig @@ -0,0 +1,183 @@ +gatewayType=0 +gatewayCallsign= +gatewayAddress=0.0.0.0 +icomAddress=172.16.0.20 +icomPort=20000 +hbAddress=127.0.0.1 +hbPort=20010 +latitude= +longitude= +description1= +description2= +url= +repeaterCall1= +repeaterBand1=B +repeaterType1=0 +repeaterAddress1=127.0.0.1 +repeaterPort1=20011 +reflector1= +atStartup1=0 +reconnect1=0 +frequency1=434.00000 +offset1=0.0000 +rangeKms1=0.000 +latitude1=0.000000 +longitude1=0.000000 +agl1=0.000 +description1_1= +description1_2= +url1= +band1_1=0 +band1_2=0 +band1_3=0 +repeaterCall2= +repeaterBand2= +repeaterType2=0 +repeaterAddress2=127.0.0.1 +repeaterPort2=20012 +reflector2= +atStartup2=0 +reconnect2=0 +frequency2=0.00000 +offset2=0.0000 +rangeKms2=0.000 +latitude2=0.000000 +longitude2=0.000000 +agl2=0.000 +description2_1= +description2_2= +url2= +band2_1=0 +band2_2=0 +band2_3=0 +repeaterCall3= +repeaterBand3= +repeaterType3=0 +repeaterAddress3=127.0.0.1 +repeaterPort3=20013 +reflector3= +atStartup3=0 +reconnect3=0 +frequency3=0.00000 +offset3=0.0000 +rangeKms3=0.000 +latitude3=0.000000 +longitude3=0.000000 +agl3=0.000 +description3_1= +description3_2= +url3= +band3_1=0 +band3_2=0 +band3_3=0 +repeaterCall4= +repeaterBand4= +repeaterType4=0 +repeaterAddress4=127.0.0.1 +repeaterPort4=20014 +reflector4= +atStartup4=0 +reconnect4=0 +frequency4=0.00000 +offset4=0.0000 +rangeKms4=0.000 +latitude4=0.000000 +longitude4=0.000000 +agl4=0.000 +description4_1= +description4_2= +url4= +band4_1=0 +band4_2=0 +band4_3=0 +ircddbEnabled=1 +ircddbHostname=rr.openquad.net +ircddbUsername= +ircddbPassword= +ircddbEnabled2=0 +ircddbHostname2=rr.openquad.net +ircddbUsername2= +ircddbPassword2= +ircddbEnabled3=0 +ircddbHostname3= +ircddbUsername3= +ircddbPassword3= +ircddbEnabled4=0 +ircddbHostname4= +ircddbUsername4= +ircddbPassword4= +aprsEnabled=1 +aprsHostname=rotate.aprs2.net +aprsPassword= +aprsPort=14580 +dextraEnabled=1 +dextraMaxDongles=5 +dplusEnabled=0 +dplusMaxDongles=5 +dplusLogin= +dcsEnabled=1 +ccsEnabled=1 +ccsHost=CCS704 +xlxEnabled=1 +xlxHostsFileUrl=http://xlxapi.rlx.lu/api.php?do=GetReflectorHostname +starNetBand1=A +starNetCallsign1= +starNetLogoff1= +starNetInfo1= +starNetPermanent1= +starNetUserTimeout1=300 +starNetGroupTimeout1=300 +starNetCallsignSwitch1=0 +starNetTXMsgSwitch1=1 +starNetReflector1= +starNetBand2=A +starNetCallsign2= +starNetLogoff2= +starNetInfo2= +starNetPermanent2= +starNetUserTimeout2=300 +starNetGroupTimeout2=300 +starNetCallsignSwitch2=0 +starNetTXMsgSwitch2=1 +starNetReflector2= +starNetBand3=A +starNetCallsign3= +starNetLogoff3= +starNetInfo3= +starNetPermanent3= +starNetUserTimeout3=300 +starNetGroupTimeout3=300 +starNetCallsignSwitch3=0 +starNetTXMsgSwitch3=1 +starNetReflector3= +starNetBand4=A +starNetCallsign4= +starNetLogoff4= +starNetInfo4= +starNetPermanent4= +starNetUserTimeout4=300 +starNetGroupTimeout4=300 +starNetCallsignSwitch4=0 +starNetTXMsgSwitch4=1 +starNetReflector4= +starNetBand5=A +starNetCallsign5= +starNetLogoff5= +starNetInfo5= +starNetPermanent5= +starNetUserTimeout5=300 +starNetGroupTimeout5=300 +starNetCallsignSwitch5=0 +starNetTXMsgSwitch5=1 +starNetReflector5= +remoteEnabled=1 +remotePassword= +remotePort=54321 +language=0 +infoEnabled=1 +echoEnabled=1 +logEnabled=0 +dratsEnabled=0 +dtmfEnabled=1 +windowX=-1 +windowY=-1 diff --git a/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.cpp b/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.cpp index a019ebf..80907cd 100644 --- a/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.cpp +++ b/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.cpp @@ -65,6 +65,7 @@ m_starNet3(NULL), m_starNet4(NULL), m_starNet5(NULL), m_remote(NULL), +m_mobileGPS(NULL), m_miscellaneous(NULL) { SetMenuBar(createMenuBar()); @@ -103,9 +104,8 @@ m_miscellaneous(NULL) m_config->getDCS(dcsEnabled, ccsEnabled, ccsHost); bool xlxEnabled; - bool xlxOverrideLocal; wxString xlxHostsFileUrl; - m_config->getXLX(xlxEnabled, xlxOverrideLocal, xlxHostsFileUrl); + m_config->getXLX(xlxEnabled, xlxHostsFileUrl); GATEWAY_TYPE gatewayType; wxString gatewayCallsign, gatewayAddress, icomAddress, hbAddress, description1, description2, url; @@ -211,7 +211,7 @@ m_miscellaneous(NULL) m_dcs = new CDCSSet(noteBook, -1, APPLICATION_NAME, dcsEnabled, ccsEnabled, ccsHost); noteBook->AddPage(m_dcs, _("DCS and CCS"), false); - m_xlx = new CXLXSet(noteBook, -1, APPLICATION_NAME, xlxEnabled, xlxOverrideLocal, xlxHostsFileUrl); + m_xlx = new CXLXSet(noteBook, -1, APPLICATION_NAME, xlxEnabled, xlxHostsFileUrl); noteBook->AddPage(m_xlx, _("XLX Hosts File"), false); #if defined(DEXTRA_LINK) || defined(DCS_LINK) @@ -314,6 +314,14 @@ m_miscellaneous(NULL) m_remote = new CRemoteSet(noteBook, -1, APPLICATION_NAME, remoteEnabled, remotePassword, remotePort); noteBook->AddPage(m_remote, wxT("Remote"), false); + bool mobileGPSEnabled; + wxString mobileGPSAddress; + unsigned int mobileGPSPort; + m_config->getMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); + + m_mobileGPS = new CMobileGPSSet(noteBook, -1, APPLICATION_NAME, mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); + noteBook->AddPage(m_mobileGPS, wxT("Mobile GPS"), false); + TEXT_LANG language; bool infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled; m_config->getMiscellaneous(language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled); @@ -321,15 +329,15 @@ m_miscellaneous(NULL) m_miscellaneous = new CIRCDDBGatewayConfigMiscellaneousSet(noteBook, -1, APPLICATION_NAME, language, infoEnabled, echoEnabled, logEnabled, dratsEnabled, dtmfEnabled); noteBook->AddPage(m_miscellaneous, wxT("Misc"), false); - sizer->Add(noteBook, 0, wxEXPAND | wxALL, BORDER_SIZE); + sizer->Add(noteBook, 0, wxEXPAND | wxALL, BORDER_SIZE); - panel->SetSizer(sizer); + panel->SetSizer(sizer); - mainSizer->Add(panel, 0, wxEXPAND | wxALL, BORDER_SIZE); + mainSizer->Add(panel, 0, wxEXPAND | wxALL, BORDER_SIZE); - mainSizer->SetSizeHints(this); + mainSizer->SetSizeHints(this); - SetSizer(mainSizer); + SetSizer(mainSizer); } CIRCDDBGatewayConfigFrame::~CIRCDDBGatewayConfigFrame() @@ -371,7 +379,7 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&) !m_repeaterInfo4->Validate() || !m_ircDDB->Validate() || !m_ircDDB2->Validate() || !m_ircDDB3->Validate() || !m_ircDDB4->Validate() || !m_dprs->Validate() || !m_dplus->Validate() || !m_dcs->Validate() || !m_xlx->Validate() || !m_starNet1->Validate() || !m_starNet2->Validate() || !m_starNet3->Validate() || !m_starNet4->Validate() || - !m_starNet5->Validate() || !m_remote->Validate() || !m_miscellaneous->Validate()) + !m_starNet5->Validate() || !m_remote->Validate() || !m_mobileGPS->Validate() || !m_miscellaneous->Validate()) return; GATEWAY_TYPE gatewayType = m_gateway->getType(); @@ -517,9 +525,8 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&) m_config->setDCS(dcsEnabled, ccsEnabled, ccsHost); bool xlxEnabled = m_xlx->getXLXEnabled(); - bool xlxOverrideLocal = m_xlx->getXLXOverrideLocal(); wxString xlxHostsFileUrl = m_xlx->getXLXHostsFileUrl(); - m_config->setXLX(xlxEnabled, xlxOverrideLocal, xlxHostsFileUrl); + m_config->setXLX(xlxEnabled, xlxHostsFileUrl); wxString starNetBand1 = m_starNet1->getBand(); wxString starNetCallsign1 = m_starNet1->getCallsign(); @@ -606,6 +613,11 @@ void CIRCDDBGatewayConfigFrame::onSave(wxCommandEvent&) unsigned int remotePort = m_remote->getPort(); m_config->setRemote(remoteEnabled, remotePassword, remotePort); + bool mobileGPSEnabled = m_mobileGPS->getEnabled(); + wxString mobileGPSAddress = m_mobileGPS->getAddress(); + unsigned int mobileGPSPort = m_mobileGPS->getPort(); + m_config->setMobileGPS(mobileGPSEnabled, mobileGPSAddress, mobileGPSPort); + TEXT_LANG language = m_miscellaneous->getLanguage(); bool infoEnabled = m_miscellaneous->getInfoEnabled(); bool echoEnabled = m_miscellaneous->getEchoEnabled(); diff --git a/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.h b/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.h index 15032c0..2970aad 100644 --- a/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.h +++ b/ircDDBGatewayConfig/IRCDDBGatewayConfigFrame.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2014 by Jonathan Naylor G4KLX + * Copyright (C) 2010-2014,2018 by Jonathan Naylor G4KLX * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,6 +25,7 @@ #include "IRCDDBGatewayConfig.h" #include "RepeaterInfoSet.h" #include "RepeaterDataSet.h" +#include "MobileGPSSet.h" #include "StarNetSet.h" #include "RemoteSet.h" #include "DExtraSet.h" @@ -65,13 +66,14 @@ private: CDExtraSet* m_dextra; CDPlusSet* m_dplus; CDCSSet* m_dcs; - CXLXSet* m_xlx; + CXLXSet* m_xlx; CStarNetSet* m_starNet1; CStarNetSet* m_starNet2; CStarNetSet* m_starNet3; CStarNetSet* m_starNet4; CStarNetSet* m_starNet5; CRemoteSet* m_remote; + CMobileGPSSet* m_mobileGPS; CIRCDDBGatewayConfigMiscellaneousSet* m_miscellaneous; DECLARE_EVENT_TABLE() diff --git a/ircDDBGatewayConfig/Makefile b/ircDDBGatewayConfig/Makefile index bdc24ef..7aff717 100644 --- a/ircDDBGatewayConfig/Makefile +++ b/ircDDBGatewayConfig/Makefile @@ -1,17 +1,25 @@ OBJECTS = IRCDDBGatewayConfigApp.o IRCDDBGatewayConfigFrame.o IRCDDBGatewayConfigGatewaySet.o IRCDDBGatewayConfigIrcDDBSet.o \ IRCDDBGatewayConfigMiscellaneousSet.o +.PHONY: all all: ircddbgatewayconfig -ircddbgatewayconfig: $(OBJECTS) +ircddbgatewayconfig: $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(CXX) $(OBJECTS) ../GUICommon/GUICommon.a ../Common/Common.a $(LDFLAGS) $(GUILIBS) -o ircddbgatewayconfig +-include $(OBJECTS:.o=.d) + %.o: %.cpp $(CXX) $(CFLAGS) -I../Common -I../GUICommon -c -o $@ $< + $(CXX) -MM -DwxUSE_GUI=0 $(CFLAGS) -I../Common -I../GUICommon $< > $*.d +.PHONY: install install: install -g bin -o root -m 0775 ircddbgatewayconfig $(BINDIR) +.PHONY: clean clean: $(RM) ircddbgatewayconfig *.o *.d *.bak *~ +../Common/Common.a: +../GUICommon/GUICommon.a: diff --git a/ircDDBGatewayConfig/ircDDBGatewayConfig.vcxproj b/ircDDBGatewayConfig/ircDDBGatewayConfig.vcxproj index 1d6186c..dbbb516 100644 --- a/ircDDBGatewayConfig/ircDDBGatewayConfig.vcxproj +++ b/ircDDBGatewayConfig/ircDDBGatewayConfig.vcxproj @@ -80,9 +80,11 @@ $(SolutionDir)$(Configuration)\ $(Configuration)\ false + $(WXWIN)\include;$(WXWIN)\lib\vc_dll\mswu;$(IncludePath) false + $(WXWIN)\include;$(WXWIN)\lib\vc_x64_dll\mswu;$(IncludePath)