mirror of
https://github.com/oe7drt/YSFClients.git
synced 2025-12-06 05:32:02 +01:00
PR for #323 - cont.
- Add "Reconnect=0" configuration option to the [Network] section to avoid ambiguity - Keep the original behaviors when Revert=1 and Reconnect=1 - Bugfix on Wires-DX reconnect (find reflector both by id and name)
This commit is contained in:
parent
811caaa823
commit
30596b3cc4
|
|
@ -74,6 +74,7 @@ m_aprsSymbol("/r"),
|
||||||
m_networkStartup(),
|
m_networkStartup(),
|
||||||
m_networkOptions(),
|
m_networkOptions(),
|
||||||
m_networkInactivityTimeout(0U),
|
m_networkInactivityTimeout(0U),
|
||||||
|
m_networkReconnect(false),
|
||||||
m_networkRevert(false),
|
m_networkRevert(false),
|
||||||
m_networkDebug(false),
|
m_networkDebug(false),
|
||||||
m_ysfNetworkEnabled(false),
|
m_ysfNetworkEnabled(false),
|
||||||
|
|
@ -245,6 +246,8 @@ bool CConf::read()
|
||||||
m_networkOptions = value;
|
m_networkOptions = value;
|
||||||
else if (::strcmp(key, "InactivityTimeout") == 0)
|
else if (::strcmp(key, "InactivityTimeout") == 0)
|
||||||
m_networkInactivityTimeout = (unsigned int)::atoi(value);
|
m_networkInactivityTimeout = (unsigned int)::atoi(value);
|
||||||
|
else if (::strcmp(key, "Reconnect") == 0)
|
||||||
|
m_networkReconnect = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Revert") == 0)
|
else if (::strcmp(key, "Revert") == 0)
|
||||||
m_networkRevert = ::atoi(value) == 1;
|
m_networkRevert = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Debug") == 0)
|
else if (::strcmp(key, "Debug") == 0)
|
||||||
|
|
@ -466,6 +469,11 @@ unsigned int CConf::getNetworkInactivityTimeout() const
|
||||||
return m_networkInactivityTimeout;
|
return m_networkInactivityTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CConf::getNetworkReconnect() const
|
||||||
|
{
|
||||||
|
return m_networkReconnect;
|
||||||
|
}
|
||||||
|
|
||||||
bool CConf::getNetworkRevert() const
|
bool CConf::getNetworkRevert() const
|
||||||
{
|
{
|
||||||
return m_networkRevert;
|
return m_networkRevert;
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ public:
|
||||||
std::string getNetworkStartup() const;
|
std::string getNetworkStartup() const;
|
||||||
std::string getNetworkOptions() const;
|
std::string getNetworkOptions() const;
|
||||||
unsigned int getNetworkInactivityTimeout() const;
|
unsigned int getNetworkInactivityTimeout() const;
|
||||||
|
bool getNetworkReconnect() const;
|
||||||
bool getNetworkRevert() const;
|
bool getNetworkRevert() const;
|
||||||
bool getNetworkDebug() const;
|
bool getNetworkDebug() const;
|
||||||
|
|
||||||
|
|
@ -141,6 +142,7 @@ private:
|
||||||
std::string m_networkStartup;
|
std::string m_networkStartup;
|
||||||
std::string m_networkOptions;
|
std::string m_networkOptions;
|
||||||
unsigned int m_networkInactivityTimeout;
|
unsigned int m_networkInactivityTimeout;
|
||||||
|
bool m_networkReconnect;
|
||||||
bool m_networkRevert;
|
bool m_networkRevert;
|
||||||
bool m_networkDebug;
|
bool m_networkDebug;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -300,6 +300,7 @@ int CYSFGateway::run()
|
||||||
m_startup = m_conf.getNetworkStartup();
|
m_startup = m_conf.getNetworkStartup();
|
||||||
m_options = m_conf.getNetworkOptions();
|
m_options = m_conf.getNetworkOptions();
|
||||||
bool revert = m_conf.getNetworkRevert();
|
bool revert = m_conf.getNetworkRevert();
|
||||||
|
bool reconnect = m_conf.getNetworkReconnect();
|
||||||
bool wiresXCommandPassthrough = m_conf.getWiresXCommandPassthrough();
|
bool wiresXCommandPassthrough = m_conf.getWiresXCommandPassthrough();
|
||||||
|
|
||||||
startupLinking();
|
startupLinking();
|
||||||
|
|
@ -401,40 +402,23 @@ int CYSFGateway::run()
|
||||||
m_inactivityTimer.clock(ms);
|
m_inactivityTimer.clock(ms);
|
||||||
if (m_inactivityTimer.isRunning() && m_inactivityTimer.hasExpired()) {
|
if (m_inactivityTimer.isRunning() && m_inactivityTimer.hasExpired()) {
|
||||||
if (revert) {
|
if (revert) {
|
||||||
if (m_current != m_startup) {
|
if (m_linkType != LINK_TYPE::NONE && m_current != m_startup) {
|
||||||
if (m_linkType == LINK_TYPE::YSF) {
|
LogMessage("Reverting to startup ref due to inactivity");
|
||||||
m_wiresX->processDisconnect();
|
disconnectCurrentReflector();
|
||||||
m_ysfNetwork->writeUnlink(3U);
|
startupLinking();
|
||||||
m_ysfNetwork->clearDestination();
|
} else if (m_linkType == LINK_TYPE::NONE && reconnect) {
|
||||||
}
|
// reconnect if current one is timeout and reconnect = 1
|
||||||
|
LogMessage("Reconnecting startup reflector ...");
|
||||||
if (m_linkType == LINK_TYPE::FCS) {
|
|
||||||
m_fcsNetwork->writeUnlink(3U);
|
|
||||||
m_fcsNetwork->clearDestination();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_current.clear();
|
|
||||||
m_lostTimer.stop();
|
|
||||||
m_linkType = LINK_TYPE::NONE;
|
|
||||||
|
|
||||||
startupLinking();
|
startupLinking();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_linkType == LINK_TYPE::YSF) {
|
if (m_linkType != LINK_TYPE::NONE && !reconnect) {
|
||||||
LogMessage("Disconnecting due to inactivity");
|
LogMessage("Disconnecting due to inactivity");
|
||||||
m_wiresX->processDisconnect();
|
disconnectCurrentReflector();
|
||||||
m_ysfNetwork->writeUnlink(3U);
|
} else if (m_linkType == LINK_TYPE::NONE && reconnect) {
|
||||||
m_ysfNetwork->clearDestination();
|
LogMessage("Reconnecting reflector ...");
|
||||||
|
reconnectReflector(m_current);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_linkType == LINK_TYPE::FCS) {
|
|
||||||
LogMessage("Disconnecting due to inactivity");
|
|
||||||
m_fcsNetwork->writeUnlink(3U);
|
|
||||||
m_fcsNetwork->clearDestination();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_lostTimer.stop();
|
|
||||||
m_linkType = LINK_TYPE::NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inactivityTimer.start();
|
m_inactivityTimer.start();
|
||||||
|
|
@ -668,42 +652,9 @@ void CYSFGateway::processWiresX(const unsigned char* buffer, const CYSFFICH& fic
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WX_STATUS::RECONNECT_CURRENT: {
|
case WX_STATUS::RECONNECT_CURRENT: {
|
||||||
if (m_wiresX->getReflector() == nullptr && !m_current.empty()) {
|
if (m_linkType == LINK_TYPE::NONE && !m_current.empty())
|
||||||
// trying to reconnect
|
reconnectReflector(m_current);
|
||||||
if (m_current.substr(0U, 3U) == "FCS" && m_fcsNetwork != nullptr) {
|
|
||||||
m_inactivityTimer.stop();
|
|
||||||
m_lostTimer.stop();
|
|
||||||
|
|
||||||
bool ok = m_fcsNetwork->writeLink(m_current);
|
|
||||||
m_fcsNetwork->setOptions(m_options);
|
|
||||||
|
|
||||||
if (ok) {
|
|
||||||
LogMessage("Automatic (re-)connection to %s", m_current.c_str());
|
|
||||||
|
|
||||||
m_inactivityTimer.start();
|
|
||||||
m_lostTimer.start();
|
|
||||||
m_linkType = LINK_TYPE::FCS;;
|
|
||||||
}
|
|
||||||
} else if (m_ysfNetwork != nullptr) {
|
|
||||||
m_inactivityTimer.stop();
|
|
||||||
m_lostTimer.stop();
|
|
||||||
|
|
||||||
CYSFReflector* reflector = m_reflectors->findByName(m_current);
|
|
||||||
if (reflector != nullptr) {
|
|
||||||
LogMessage("Automatic (re-)connection to %5.5s - \"%s\"", reflector->m_id.c_str(), reflector->m_name.c_str());
|
|
||||||
|
|
||||||
m_wiresX->setReflector(reflector);
|
|
||||||
|
|
||||||
m_ysfNetwork->setDestination(reflector->m_name, reflector->m_addr, reflector->m_addrLen);
|
|
||||||
m_ysfNetwork->setOptions(m_options);
|
|
||||||
m_ysfNetwork->writePoll(3U);
|
|
||||||
|
|
||||||
m_inactivityTimer.start();
|
|
||||||
m_lostTimer.start();
|
|
||||||
m_linkType = LINK_TYPE::YSF;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
@ -924,6 +875,63 @@ void CYSFGateway::startupLinking()
|
||||||
LogMessage("No connection startup");
|
LogMessage("No connection startup");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CYSFGateway::reconnectReflector(const std::string& refNameOrId) {
|
||||||
|
if (refNameOrId.substr(0U, 3U) == "FCS" && m_fcsNetwork != nullptr) {
|
||||||
|
m_inactivityTimer.stop();
|
||||||
|
m_lostTimer.stop();
|
||||||
|
|
||||||
|
bool ok = m_fcsNetwork->writeLink(refNameOrId);
|
||||||
|
m_fcsNetwork->setOptions(m_options);
|
||||||
|
|
||||||
|
if (ok) {
|
||||||
|
LogMessage("(re-)connection to %s", refNameOrId.c_str());
|
||||||
|
|
||||||
|
m_inactivityTimer.start();
|
||||||
|
m_lostTimer.start();
|
||||||
|
m_linkType = LINK_TYPE::FCS;
|
||||||
|
}
|
||||||
|
} else if (m_ysfNetwork != nullptr) {
|
||||||
|
m_inactivityTimer.stop();
|
||||||
|
m_lostTimer.stop();
|
||||||
|
|
||||||
|
CYSFReflector* reflector = m_reflectors->findById(refNameOrId);
|
||||||
|
if (reflector == nullptr)
|
||||||
|
reflector = m_reflectors->findByName(refNameOrId);
|
||||||
|
|
||||||
|
if (reflector != nullptr) {
|
||||||
|
LogMessage("(re-)connection to %5.5s - \"%s\"", reflector->m_id.c_str(), reflector->m_name.c_str());
|
||||||
|
|
||||||
|
m_wiresX->setReflector(reflector);
|
||||||
|
|
||||||
|
m_ysfNetwork->setDestination(reflector->m_name, reflector->m_addr, reflector->m_addrLen);
|
||||||
|
|
||||||
|
m_ysfNetwork->setOptions(m_options);
|
||||||
|
m_ysfNetwork->writePoll(3U);
|
||||||
|
|
||||||
|
m_inactivityTimer.start();
|
||||||
|
m_lostTimer.start();
|
||||||
|
m_linkType = LINK_TYPE::YSF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CYSFGateway::disconnectCurrentReflector() {
|
||||||
|
if (m_linkType == LINK_TYPE::YSF) {
|
||||||
|
m_wiresX->processDisconnect();
|
||||||
|
m_ysfNetwork->writeUnlink(3U);
|
||||||
|
m_ysfNetwork->clearDestination();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_linkType == LINK_TYPE::FCS) {
|
||||||
|
m_fcsNetwork->writeUnlink(3U);
|
||||||
|
m_fcsNetwork->clearDestination();
|
||||||
|
}
|
||||||
|
|
||||||
|
// m_current.clear();
|
||||||
|
m_lostTimer.stop();
|
||||||
|
m_linkType = LINK_TYPE::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
void CYSFGateway::readFCSRoomsFile(const std::string& filename)
|
void CYSFGateway::readFCSRoomsFile(const std::string& filename)
|
||||||
{
|
{
|
||||||
FILE* fp = ::fopen(filename.c_str(), "rt");
|
FILE* fp = ::fopen(filename.c_str(), "rt");
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ private:
|
||||||
CUDPSocket* m_remoteSocket;
|
CUDPSocket* m_remoteSocket;
|
||||||
|
|
||||||
void startupLinking();
|
void startupLinking();
|
||||||
|
void reconnectReflector(const std::string& nameOrId);
|
||||||
|
void disconnectCurrentReflector();
|
||||||
std::string calculateLocator();
|
std::string calculateLocator();
|
||||||
void processWiresX(const unsigned char* buffer, const CYSFFICH& fich, bool dontProcessWiresXLocal, bool wiresXCommandPassthrough);
|
void processWiresX(const unsigned char* buffer, const CYSFFICH& fich, bool dontProcessWiresXLocal, bool wiresXCommandPassthrough);
|
||||||
void processDTMF(unsigned char* buffer, unsigned char dt);
|
void processDTMF(unsigned char* buffer, unsigned char dt);
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ Suffix=Y
|
||||||
# book DG-ID for Reflector
|
# book DG-ID for Reflector
|
||||||
# Options=20;21;
|
# Options=20;21;
|
||||||
InactivityTimeout=10
|
InactivityTimeout=10
|
||||||
|
Reconnect=0
|
||||||
Revert=0
|
Revert=0
|
||||||
Debug=0
|
Debug=0
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue