mirror of
https://github.com/ShaYmez/NXDNClients.git
synced 2024-11-22 07:24:49 -05:00
Make the NXDN Reflector more robust.
This commit is contained in:
parent
ee52b702d1
commit
a3b5c378e1
4
.gitignore
vendored
4
.gitignore
vendored
@ -13,3 +13,7 @@ x64
|
|||||||
*.user
|
*.user
|
||||||
*.VC.db
|
*.VC.db
|
||||||
.vs
|
.vs
|
||||||
|
NXDNGateway/NXDNGateway
|
||||||
|
NXDNParrot/NXDNParrot
|
||||||
|
NXDNReflector/NXDNReflector
|
||||||
|
|
||||||
|
@ -216,9 +216,14 @@ void CNXDNReflector::run()
|
|||||||
|
|
||||||
LogMessage("Starting NXDNReflector-%s", VERSION);
|
LogMessage("Starting NXDNReflector-%s", VERSION);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ACTIVE_NONE,
|
||||||
|
ACTIVE_YSF,
|
||||||
|
ACTIVE_ICOM,
|
||||||
|
ACTIVE_KENWOOD
|
||||||
|
} active = ACTIVE_NONE;
|
||||||
|
|
||||||
CNXDNRepeater* current = NULL;
|
CNXDNRepeater* current = NULL;
|
||||||
bool icomActive = false;
|
|
||||||
bool kenwoodActive = false;
|
|
||||||
|
|
||||||
unsigned short srcId = 0U;
|
unsigned short srcId = 0U;
|
||||||
unsigned short dstId = 0U;
|
unsigned short dstId = 0U;
|
||||||
@ -316,14 +321,16 @@ void CNXDNReflector::run()
|
|||||||
if (grp && dstId == tg) {
|
if (grp && dstId == tg) {
|
||||||
rpt->m_timer.start();
|
rpt->m_timer.start();
|
||||||
|
|
||||||
if (current == NULL && !(icomActive || kenwoodActive)) {
|
if (current == NULL && active == ACTIVE_NONE) {
|
||||||
current = rpt;
|
current = rpt;
|
||||||
|
|
||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Transmission from %s at %s to %s%u", callsign.c_str(), current->m_callsign.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("Transmission from %s at %s to %s%u", callsign.c_str(), current->m_callsign.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
|
||||||
|
active = ACTIVE_YSF;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current == rpt) {
|
if (active == ACTIVE_YSF) {
|
||||||
watchdogTimer.start();
|
watchdogTimer.start();
|
||||||
|
|
||||||
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
||||||
@ -341,8 +348,9 @@ void CNXDNReflector::run()
|
|||||||
|
|
||||||
if ((buffer[9U] & 0x08U) == 0x08U) {
|
if ((buffer[9U] & 0x08U) == 0x08U) {
|
||||||
LogMessage("Received end of transmission");
|
LogMessage("Received end of transmission");
|
||||||
watchdogTimer.stop();
|
|
||||||
current = NULL;
|
current = NULL;
|
||||||
|
active = ACTIVE_NONE;
|
||||||
|
watchdogTimer.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -357,7 +365,7 @@ void CNXDNReflector::run()
|
|||||||
len = m_icomNetwork->read(buffer);
|
len = m_icomNetwork->read(buffer);
|
||||||
if (len > 0U) {
|
if (len > 0U) {
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
if (!icomActive) {
|
if (active == ACTIVE_NONE) {
|
||||||
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x01U) {
|
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x01U) {
|
||||||
bool tempGrp = (buffer[7U] & 0x20U) == 0x20U;
|
bool tempGrp = (buffer[7U] & 0x20U) == 0x20U;
|
||||||
unsigned short tempSrcId = (buffer[8U] << 8) | buffer[9U];
|
unsigned short tempSrcId = (buffer[8U] << 8) | buffer[9U];
|
||||||
@ -372,7 +380,7 @@ void CNXDNReflector::run()
|
|||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Transmission from %s on Icom Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("Transmission from %s on Icom Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
|
||||||
icomActive = true;
|
active = ACTIVE_ICOM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x09U) {
|
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x09U) {
|
||||||
@ -389,12 +397,12 @@ void CNXDNReflector::run()
|
|||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Transmission from %s on Icom Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("Transmission from %s on Icom Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
|
||||||
icomActive = true;
|
active = ACTIVE_ICOM;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (icomActive) {
|
if (active == ACTIVE_ICOM) {
|
||||||
watchdogTimer.start();
|
watchdogTimer.start();
|
||||||
|
|
||||||
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
||||||
@ -408,12 +416,12 @@ void CNXDNReflector::run()
|
|||||||
|
|
||||||
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x08U) {
|
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x08U) {
|
||||||
LogMessage("Received end of transmission");
|
LogMessage("Received end of transmission");
|
||||||
icomActive = false;
|
active = ACTIVE_NONE;
|
||||||
watchdogTimer.stop();
|
watchdogTimer.stop();
|
||||||
}
|
}
|
||||||
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x08U) {
|
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x08U) {
|
||||||
LogMessage("Received end of transmission");
|
LogMessage("Received end of transmission");
|
||||||
icomActive = false;
|
active = ACTIVE_NONE;
|
||||||
watchdogTimer.stop();
|
watchdogTimer.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -425,7 +433,7 @@ void CNXDNReflector::run()
|
|||||||
len = m_kenwoodNetwork->read(buffer);
|
len = m_kenwoodNetwork->read(buffer);
|
||||||
if (len > 0U) {
|
if (len > 0U) {
|
||||||
if (current == NULL) {
|
if (current == NULL) {
|
||||||
if (!kenwoodActive) {
|
if (active == ACTIVE_NONE) {
|
||||||
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x01U) {
|
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x01U) {
|
||||||
bool tempGrp = (buffer[7U] & 0x20U) == 0x20U;
|
bool tempGrp = (buffer[7U] & 0x20U) == 0x20U;
|
||||||
unsigned short tempSrcId = (buffer[8U] << 8) | buffer[9U];
|
unsigned short tempSrcId = (buffer[8U] << 8) | buffer[9U];
|
||||||
@ -440,7 +448,7 @@ void CNXDNReflector::run()
|
|||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Transmission from %s on Kenwood Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("Transmission from %s on Kenwood Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
|
||||||
kenwoodActive = true;
|
active = ACTIVE_KENWOOD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x09U) {
|
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x09U) {
|
||||||
@ -457,12 +465,12 @@ void CNXDNReflector::run()
|
|||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Transmission from %s on Kenwood Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
LogMessage("Transmission from %s on Kenwood Network to %s%u", callsign.c_str(), grp ? "TG " : "", dstId);
|
||||||
|
|
||||||
kenwoodActive = true;
|
active = ACTIVE_KENWOOD;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kenwoodActive) {
|
if (active == ACTIVE_KENWOOD) {
|
||||||
watchdogTimer.start();
|
watchdogTimer.start();
|
||||||
|
|
||||||
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
for (std::vector<CNXDNRepeater*>::const_iterator it = m_repeaters.begin(); it != m_repeaters.end(); ++it) {
|
||||||
@ -476,12 +484,12 @@ void CNXDNReflector::run()
|
|||||||
|
|
||||||
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x08U) {
|
if ((buffer[0U] == 0x81U || buffer[0U] == 0x83U) && buffer[5U] == 0x08U) {
|
||||||
LogMessage("Received end of transmission");
|
LogMessage("Received end of transmission");
|
||||||
kenwoodActive = false;
|
active = ACTIVE_NONE;
|
||||||
watchdogTimer.stop();
|
watchdogTimer.stop();
|
||||||
}
|
}
|
||||||
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x08U) {
|
if ((buffer[0U] & 0xF0U) == 0x90U && buffer[2U] == 0x08U) {
|
||||||
LogMessage("Received end of transmission");
|
LogMessage("Received end of transmission");
|
||||||
kenwoodActive = false;
|
active = ACTIVE_NONE;
|
||||||
watchdogTimer.stop();
|
watchdogTimer.stop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -514,8 +522,7 @@ void CNXDNReflector::run()
|
|||||||
LogMessage("Network watchdog has expired");
|
LogMessage("Network watchdog has expired");
|
||||||
watchdogTimer.stop();
|
watchdogTimer.stop();
|
||||||
current = NULL;
|
current = NULL;
|
||||||
icomActive = false;
|
active = ACTIVE_NONE;
|
||||||
kenwoodActive = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dumpTimer.clock(ms);
|
dumpTimer.clock(ms);
|
||||||
|
@ -19,6 +19,6 @@
|
|||||||
#if !defined(VERSION_H)
|
#if !defined(VERSION_H)
|
||||||
#define VERSION_H
|
#define VERSION_H
|
||||||
|
|
||||||
const char* VERSION = "20200822";
|
const char* VERSION = "20200823";
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user