mirror of
https://github.com/ShaYmez/P25Clients.git
synced 2024-11-21 19:55:22 -05:00
Handle relinking cleanly.
This commit is contained in:
parent
820fd5471a
commit
ce94d72fc6
@ -267,7 +267,12 @@ void CP25Gateway::run()
|
|||||||
srcId |= (buffer[3U] << 0) & 0x0000FFU;
|
srcId |= (buffer[3U] << 0) & 0x0000FFU;
|
||||||
|
|
||||||
if (dstId != currentId) {
|
if (dstId != currentId) {
|
||||||
if (dstId == 9999U) {
|
CP25Reflector* reflector = NULL;
|
||||||
|
if (dstId != 9999U)
|
||||||
|
reflector = reflectors.find(dstId);
|
||||||
|
|
||||||
|
// If we're unlinking or changing reflectors, unlink from the current one
|
||||||
|
if (dstId == 9999U || reflector != NULL) {
|
||||||
std::string callsign = lookup->find(srcId);
|
std::string callsign = lookup->find(srcId);
|
||||||
LogMessage("Unlinked from reflector %u by %s", currentId, callsign.c_str());
|
LogMessage("Unlinked from reflector %u by %s", currentId, callsign.c_str());
|
||||||
currentId = dstId;
|
currentId = dstId;
|
||||||
@ -279,23 +284,23 @@ void CP25Gateway::run()
|
|||||||
pollTimer.stop();
|
pollTimer.stop();
|
||||||
lostTimer.stop();
|
lostTimer.stop();
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
CP25Reflector* reflector = reflectors.find(dstId);
|
|
||||||
if (reflector != NULL) {
|
|
||||||
currentId = dstId;
|
|
||||||
currentAddr = reflector->m_address;
|
|
||||||
currentPort = reflector->m_port;
|
|
||||||
|
|
||||||
std::string callsign = lookup->find(srcId);
|
// Link to the new reflector
|
||||||
LogMessage("Linked to reflector %u by %s", currentId, callsign.c_str());
|
if (reflector != NULL) {
|
||||||
|
currentId = dstId;
|
||||||
|
currentAddr = reflector->m_address;
|
||||||
|
currentPort = reflector->m_port;
|
||||||
|
|
||||||
if (remoteNetwork != NULL) {
|
std::string callsign = lookup->find(srcId);
|
||||||
remoteNetwork->writePoll(currentAddr, currentPort);
|
LogMessage("Linked to reflector %u by %s", currentId, callsign.c_str());
|
||||||
remoteNetwork->writePoll(currentAddr, currentPort);
|
|
||||||
remoteNetwork->writePoll(currentAddr, currentPort);
|
if (remoteNetwork != NULL) {
|
||||||
pollTimer.start();
|
remoteNetwork->writePoll(currentAddr, currentPort);
|
||||||
lostTimer.start();
|
remoteNetwork->writePoll(currentAddr, currentPort);
|
||||||
}
|
remoteNetwork->writePoll(currentAddr, currentPort);
|
||||||
|
pollTimer.start();
|
||||||
|
lostTimer.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user