mirror of https://github.com/ShaYmez/xlxd.git
commit
3be46c4246
|
@ -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 don’t need to register your XLX at ysfreflector.de !
|
It has nothing to do with the regular YSFReflector network, hence you don’t 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)
|
||||||
|
|
|
@ -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 server’s /tmp folder.
|
On the first run your personal hash to access the database is place in the server’s /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
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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 '.$NAME.'">'.$NAME.'</a></td>
|
<td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of '.$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>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 '.$NAME.'">'.$NAME.'</a></td>
|
<td><a href="'.$DASHBOARDURL.'" target="_blank" class="listinglink" title="Visit the Dashboard of '.$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>';
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
*
|
||||||
|
***************************************************
|
||||||
|
|
|
@ -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
|
|
@ -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();
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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 ---------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue