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)