Merge pull request #1 from LX3JL/master

Update
This commit is contained in:
Catalin Vatra 2021-01-12 12:50:08 +02:00 committed by GitHub
commit 3be46c4246
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 71 additions and 23 deletions

View File

@ -134,6 +134,6 @@ XLX Server requires the following ports to be open and forwarded properly for in
Pay attention, the XLX Server acts as an YSF Master, which provides 26 wires-x rooms. Pay attention, the XLX Server acts as an YSF Master, which provides 26 wires-x rooms.
It has nothing to do with the regular YSFReflector network, hence you dont need to register your XLX at ysfreflector.de ! It has nothing to do with the regular YSFReflector network, hence you dont need to register your XLX at ysfreflector.de !
Nevertheless it is possible.
© 2016 Jean-Luc Deltombe (LX3JL) and Luc Engelmann (LX1IQ) © 2016 Jean-Luc Deltombe (LX3JL) and Luc Engelmann (LX1IQ)

View File

@ -1,3 +1,10 @@
xlx db v2.4.1
you can now hide the liveircddb menu button, if you are running your db in https.
- "config.inc.php
- "index.php"
xlx db v2.4.0 xlx db v2.4.0
- "config.inc.php" - "config.inc.php"
@ -91,7 +98,7 @@ xlx db v2.2.2
This version is a major release with voluntary self-registration feature build in. This version is a major release with voluntary self-registration feature build in.
You need to edit the conf.inc.php to your needs. You need to edit the conf.inc.php to your needs.
On the first run your personal hash to access the database is place in the servers /tmp folder. On the first run your personal hash to access the database is place in the servers /tmp folder.
Take care to make a backup of this file because this folder is cleaned up after a server reboot. Take care to make a backup of this file because this folder is cleaned up after a server reboot.
This version is a major release This version is a major release
@ -119,7 +126,7 @@ xlx db v2.1.4
- "class.reflector.php" improved the flag search - "class.reflector.php" improved the flag search
- "country.csv" added serveral prefixes - "country.csv" added serveral prefixes
- "flags" added Puerto Ricco and Åland Islands - "flags" added Puerto Ricco and Åland Islands
xlx db v2.1.3 xlx db v2.1.3

View File

@ -139,7 +139,6 @@ else {
<td><a href="./index.php?show=repeaters" class="menulink<?php if ($_GET['show'] == 'repeaters') { echo 'active'; } ?>">Repeaters / Nodes (<?php echo $Reflector->NodeCount(); ?>)</a></td> <td><a href="./index.php?show=repeaters" class="menulink<?php if ($_GET['show'] == 'repeaters') { echo 'active'; } ?>">Repeaters / Nodes (<?php echo $Reflector->NodeCount(); ?>)</a></td>
<td><a href="./index.php?show=peers" class="menulink<?php if ($_GET['show'] == 'peers') { echo 'active'; } ?>">Peers (<?php echo $Reflector->PeerCount(); ?>)</a></td> <td><a href="./index.php?show=peers" class="menulink<?php if ($_GET['show'] == 'peers') { echo 'active'; } ?>">Peers (<?php echo $Reflector->PeerCount(); ?>)</a></td>
<td><a href="./index.php?show=reflectors" class="menulink<?php if ($_GET['show'] == 'reflectors') { echo 'active'; } ?>">Reflectorlist</a></td> <td><a href="./index.php?show=reflectors" class="menulink<?php if ($_GET['show'] == 'reflectors') { echo 'active'; } ?>">Reflectorlist</a></td>
<td><a href="./index.php?show=liveircddb" class="menulink<?php if ($_GET['show'] == 'liveircddb') { echo 'active'; } ?>">D-Star live</a></td>
<?php <?php
if ($PageOptions['Traffic']['Show']) { if ($PageOptions['Traffic']['Show']) {
@ -148,6 +147,12 @@ else {
if ($_GET['show'] == 'traffic') { echo 'active'; } if ($_GET['show'] == 'traffic') { echo 'active'; }
echo '">Traffic statistics</a></td>'; echo '">Traffic statistics</a></td>';
} }
if ($PageOptions['IRCDDB']['Show']) {
echo '
<td><a href="./index.php?show=liveircddb" class="menulink';
if ($_GET['show'] == 'liveircddb') { echo 'active'; }
echo '">D-Star live</a></td>';
}
?> ?>
</tr> </tr>

View File

@ -17,7 +17,7 @@ $VNStat = array();
$PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address $PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address
$PageOptions['DashboardVersion'] = '2.4.0'; // Dashboard Version $PageOptions['DashboardVersion'] = '2.4.1'; // Dashboard Version
$PageOptions['PageRefreshActive'] = true; // Activate automatic refresh $PageOptions['PageRefreshActive'] = true; // Activate automatic refresh
$PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds $PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds
@ -48,6 +48,7 @@ $PageOptions['MetaRobots'] = 'index,follow'; //
$PageOptions['UserPage']['ShowFilter'] = true; // Show Filter on Users page $PageOptions['UserPage']['ShowFilter'] = true; // Show Filter on Users page
$PageOptions['Traffic']['Show'] = false; // Enable vnstat traffic statistics $PageOptions['Traffic']['Show'] = false; // Enable vnstat traffic statistics
$PageOptions['IRCDDB']['Show'] = true; // Show liveircddb, set it to false if you are running your db in https
$PageOptions['CustomTXT'] = ''; // custom text in your header $PageOptions['CustomTXT'] = ''; // custom text in your header

View File

@ -43,7 +43,7 @@ for ($i=0;$i<count($Reflectors);$i++) {
<td align="center">'.($i+1).'</td> <td align="center">'.($i+1).'</td>
<td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of&nbsp;'.$NAME.'">'.$NAME.'</a></td> <td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of&nbsp;'.$NAME.'">'.$NAME.'</a></td>
<td>'.$COUNTRY.'</td> <td>'.$COUNTRY.'</td>
<td align="center" valign="middle"><img src="./img/'; if ($LASTCONTACT<(time()-600)) { echo 'down'; } ELSE { echo 'up'; } echo '.png" height="25" /></td> <td align="center" valign="middle"><img src="./img/'; if ($LASTCONTACT<(time()-1800)) { echo 'down'; } ELSE { echo 'up'; } echo '.png" height="25" /></td>
<td>'.$COMMENT.'</td> <td>'.$COMMENT.'</td>
</tr>'; </tr>';
} }

View File

@ -40,7 +40,7 @@ for ($i=0;$i<count($Reflectors);$i++) {
<td>'.($i+1).'</td> <td>'.($i+1).'</td>
<td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of&nbsp;'.$NAME.'">'.$NAME.'</a></td> <td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of&nbsp;'.$NAME.'">'.$NAME.'</a></td>
<td>'.$COUNTRY.'</td> <td>'.$COUNTRY.'</td>
<td><img src="./img/'; if ($LASTCONTACT<(time()-600)) { echo 'down'; } ELSE { echo 'up'; } echo '.png" class="table-status" alt=""></td> <td><img src="./img/'; if ($LASTCONTACT<(time()-1800)) { echo 'down'; } ELSE { echo 'up'; } echo '.png" class="table-status" alt=""></td>
<td>'.$COMMENT.'</td> <td>'.$COMMENT.'</td>
</tr>'; </tr>';
} }

View File

@ -1,11 +1,10 @@
************************************************* *************************************************
*copy xlxd into /etc.init.d/ *copy xlxd to /etc.init.d/
*copy ambed.service into /etc/systemd/system/ *copy ambed.service to /etc/systemd/system/
* *copy watchdog to /ambed/
************************************************* *************************************************
* xlxd executable must be in /xlxd/ folder * xlxd executable must be in /xlxd/ folder
* ambed executable must be in /ambed/ folder * ambed executable must be in /ambed/ folder
*
************************************************* *************************************************
* possible options: * possible options:
* *
@ -18,3 +17,10 @@
* #systemctl enable ambed * #systemctl enable ambed
* *
************************************************* *************************************************
* If your usb port gets unresponsive and you get some persistent timeouts,
* the watchdog script restarts the ambed service.
* You can run it every 5 minutes by a cronjob.
*
* */5 * * * * /ambed/./watchdog >> /ambed/watchdog.log
*
***************************************************

14
scripts/watchdog Normal file
View File

@ -0,0 +1,14 @@
#!/bin/bash
sleep 5
PATTERN=timed
FILE=/var/log/syslog
if grep -q $PATTERN $FILE;
then
echo "ambed timeout error"
> /var/log/syslog
service ambed restart
else
echo "all ok"
echo "Exiting..."
exit 0
fi

4
src/cg3protocol.cpp Normal file → Executable file
View File

@ -69,6 +69,7 @@ bool CG3Protocol::Init(void)
std::cout << "Error opening socket on port UDP" << G3_CONFIG_PORT << " on ip " << g_Reflector.GetListenIp() << std::endl; std::cout << "Error opening socket on port UDP" << G3_CONFIG_PORT << " on ip " << g_Reflector.GetListenIp() << std::endl;
} }
#ifndef DEBUG_NO_G3_ICMP_SOCKET
ok &= m_IcmpRawSocket.Open(IPPROTO_ICMP); ok &= m_IcmpRawSocket.Open(IPPROTO_ICMP);
if ( !ok ) if ( !ok )
{ {
@ -82,7 +83,8 @@ bool CG3Protocol::Init(void)
m_pPresenceThread = new std::thread(ConfigThread, this); m_pPresenceThread = new std::thread(ConfigThread, this);
m_pPresenceThread = new std::thread(IcmpThread, this); m_pPresenceThread = new std::thread(IcmpThread, this);
} }
#endif
// update time // update time
m_LastKeepaliveTime.Now(); m_LastKeepaliveTime.Now();

32
src/cprotocol.cpp Normal file → Executable file
View File

@ -19,7 +19,7 @@
// GNU General Public License for more details. // GNU General Public License for more details.
// //
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with Foobar. If not, see <http://www.gnu.org/licenses/>. // along with Foobar. If not, see <http://www.gnu.org/licenses/>.
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#include "main.h" #include "main.h"
@ -52,7 +52,7 @@ CProtocol::~CProtocol()
m_pThread->join(); m_pThread->join();
delete m_pThread; delete m_pThread;
} }
// empty queue // empty queue
m_Queue.Lock(); m_Queue.Lock();
while ( !m_Queue.empty() ) while ( !m_Queue.empty() )
@ -69,13 +69,13 @@ bool CProtocol::Init(void)
{ {
// init reflector apparent callsign // init reflector apparent callsign
m_ReflectorCallsign = g_Reflector.GetCallsign(); m_ReflectorCallsign = g_Reflector.GetCallsign();
// reset stop flag // reset stop flag
m_bStopThread = false; m_bStopThread = false;
// start thread; // start thread;
m_pThread = new std::thread(CProtocol::Thread, this); m_pThread = new std::thread(CProtocol::Thread, this);
// done // done
return true; return true;
} }
@ -138,7 +138,12 @@ void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame, const CIp *Ip)
{ {
// find the stream // find the stream
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip); CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL ) if ( stream == NULL )
{
// std::cout << "Deleting oprhaned Last Frame Packet with StreamId " << Frame->GetStreamId() << " from " << *Ip << std::endl;
delete Frame;
}
else
{ {
//std::cout << "DV frame" << "from " << *Ip << std::endl; //std::cout << "DV frame" << "from " << *Ip << std::endl;
// and push // and push
@ -152,15 +157,23 @@ void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip)
{ {
// find the stream // find the stream
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip); CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL ) if ( stream == NULL )
{
// std::cout << "Deleting oprhaned Last Frame Packet with StreamId " << Frame->GetStreamId() << " from " << *Ip << std::endl;
delete Frame;
}
else
{ {
// push // push
stream->Lock(); stream->Lock();
stream->Push(Frame); stream->Push(Frame);
stream->Unlock(); stream->Unlock();
// and close the stream // and don't close the stream yet but rely on CheckStreamsTimeout
g_Reflector.CloseStream(stream); // mechanism, so the stream will be closed after the queues have
// been sinked out. This avoid last packets to be send back
// to transmitting client (master)
// g_Reflector.CloseStream(stream);
} }
} }
@ -170,7 +183,7 @@ void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip)
CPacketStream *CProtocol::GetStream(uint16 uiStreamId, const CIp *Ip) CPacketStream *CProtocol::GetStream(uint16 uiStreamId, const CIp *Ip)
{ {
CPacketStream *stream = NULL; CPacketStream *stream = NULL;
// find if we have a stream with same streamid in our cache // find if we have a stream with same streamid in our cache
for ( int i = 0; (i < m_Streams.size()) && (stream == NULL); i++ ) for ( int i = 0; (i < m_Streams.size()) && (stream == NULL); i++ )
{ {
@ -257,4 +270,3 @@ uint32 CProtocol::ModuleToDmrDestId(char m) const
return (uint32)(m - 'A')+1; return (uint32)(m - 'A')+1;
} }

3
src/main.h Normal file → Executable file
View File

@ -49,7 +49,7 @@
#define VERSION_MAJOR 2 #define VERSION_MAJOR 2
#define VERSION_MINOR 4 #define VERSION_MINOR 4
#define VERSION_REVISION 0 #define VERSION_REVISION 1
// global ------------------------------------------------------ // global ------------------------------------------------------
@ -60,6 +60,7 @@
//#define DEBUG_NO_ERROR_ON_XML_OPEN_FAIL //#define DEBUG_NO_ERROR_ON_XML_OPEN_FAIL
//#define DEBUG_DUMPFILE //#define DEBUG_DUMPFILE
//#define DEBUG_NO_G3_ICMP_SOCKET
// reflector --------------------------------------------------- // reflector ---------------------------------------------------