xlxd 1.2.6 / db 2.1.1

This commit is contained in:
LX3JL 2016-02-17 14:14:12 +01:00
parent 34d01b41c8
commit 16d0961e6c
13 changed files with 68 additions and 24 deletions

View File

@ -1,13 +1,20 @@
xlx db v2.1.1
- "peers.php" added hyperlink to the peers ip address
xlx db v2.1.0 xlx db v2.1.0
- "index.php" - "index.php"
button "Peers" added button "Peers" added
button "Repeaters/Nodes" shows now the number of connected devices button "Repeaters/Nodes" shows now the number of connected devices
moved XLX name, version and service uptime to improve view on mobile devices moved XLX name, version and service uptime to improve view on mobile devices
- "class.peer.php" added
- "peers.php" added
- "repeaters.php" limits nodes show up to 100 nodes
- "class.peer.php" added
- "peers.php" added
- "repeaters.php" limits nodes show up to 100 nodes
xlx db v2.0.6 xlx db v2.0.6
- "index.php" now reads out the XLX service uptime and not the server uptime - "index.php" now reads out the XLX service uptime and not the server uptime
@ -18,4 +25,4 @@ xlx db v2.0.6
xlx db v2.0.5 xlx db v2.0.5
- "class.reflector.php" extra callsign checking - "class.reflector.php" extra callsign checking

View File

@ -80,7 +80,7 @@ for ($i=0;$i<count($tmpPeers);$i++) {
</head> </head>
<body> <body>
<div id="top"><img src="./img/header.jpg" alt="XLX Multiprotocol Gateway Reflector" style="margin-top:15px;" /> <div id="top"><img src="./img/header.jpg" alt="XLX Multiprotocol Gateway Reflector" style="margin-top:15px;" />
<br />&nbsp;XLX<?php echo $ServiceName; ?>&nbsp;v<?php echo $XML->GetElement($FILECONTENT, "Version"); ?>&nbsp;-&nbsp;Dashboard v2.1.0&nbsp;&nbsp;/&nbsp;&nbsp;Service uptime: <?php <br />&nbsp;XLX<?php echo $ServiceName; ?>&nbsp;v<?php echo $XML->GetElement($FILECONTENT, "Version"); ?>&nbsp;-&nbsp;Dashboard v2.1.1&nbsp;&nbsp;/&nbsp;&nbsp;Service uptime: <?php
if (file_exists($PID) && is_readable($PID)) { if (file_exists($PID) && is_readable($PID)) {
echo FormatSeconds(time()-filectime($PID)); echo FormatSeconds(time()-filectime($PID));
} }

View File

@ -25,7 +25,7 @@ for ($i=0;$i<$Reflector->PeerCount();$i++) {
<td>'.FormatSeconds(time()-$Reflector->Peers[$i]->GetConnectTime()).' s</td> <td>'.FormatSeconds(time()-$Reflector->Peers[$i]->GetConnectTime()).' s</td>
<td align="center">'.$Reflector->Peers[$i]->GetProtocol().'</td> <td align="center">'.$Reflector->Peers[$i]->GetProtocol().'</td>
<td align="center">'.$Reflector->Peers[$i]->GetLinkedModule().'</td> <td align="center">'.$Reflector->Peers[$i]->GetLinkedModule().'</td>
<td>'.$Reflector->Peers[$i]->GetIP().'</td> <td><a href="http://'.$Reflector->Peers[$i]->GetIP().'" target="_blank" style="text-decoration:none;color:#000000;">'.$Reflector->Peers[$i]->GetIP().'</a></td>
</tr>'; </tr>';
if ($i == 99) { $i = $Reflector->PeerCount()+1; } if ($i == 99) { $i = $Reflector->PeerCount()+1; }
} }

View File

@ -64,6 +64,7 @@ public:
// identity // identity
virtual int GetProtocol(void) const { return PROTOCOL_NONE; } virtual int GetProtocol(void) const { return PROTOCOL_NONE; }
virtual int GetProtocolRevision(void) const { return 0; }
virtual const char *GetProtocolName(void) const { return "none"; } virtual const char *GetProtocolName(void) const { return "none"; }
virtual bool IsNode(void) const { return false; } virtual bool IsNode(void) const { return false; }
virtual bool IsPeer(void) const { return false; } virtual bool IsPeer(void) const { return false; }

View File

@ -201,6 +201,7 @@ void CDcsProtocol::Task(void)
bool CDcsProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip) bool CDcsProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
{ {
bool newstream = false; bool newstream = false;
CCallsign via(Header->GetRpt1Callsign());
// find the stream // find the stream
CPacketStream *stream = GetStream(Header->GetStreamId()); CPacketStream *stream = GetStream(Header->GetStreamId());
@ -211,6 +212,8 @@ bool CDcsProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
CClient *client = g_Reflector.GetClients()->FindClient(Ip, PROTOCOL_DCS); CClient *client = g_Reflector.GetClients()->FindClient(Ip, PROTOCOL_DCS);
if ( client != NULL ) if ( client != NULL )
{ {
// get client callsign
via = client->GetCallsign();
// and try to open the stream // and try to open the stream
if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL ) if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL )
{ {
@ -232,7 +235,7 @@ bool CDcsProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
} }
// update last heard // update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), Header->GetRpt1Callsign()); g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via);
g_Reflector.ReleaseUsers(); g_Reflector.ReleaseUsers();
// done // done

View File

@ -31,16 +31,19 @@
CDextraClient::CDextraClient() CDextraClient::CDextraClient()
{ {
m_ProtRev = 0;
} }
CDextraClient::CDextraClient(const CCallsign &callsign, const CIp &ip, char reflectorModule) CDextraClient::CDextraClient(const CCallsign &callsign, const CIp &ip, char reflectorModule, int protRev)
: CClient(callsign, ip, reflectorModule) : CClient(callsign, ip, reflectorModule)
{ {
m_ProtRev = protRev;
} }
CDextraClient::CDextraClient(const CDextraClient &client) CDextraClient::CDextraClient(const CDextraClient &client)
: CClient(client) : CClient(client)
{ {
m_ProtRev = client.m_ProtRev;
} }
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////

View File

@ -39,7 +39,7 @@ class CDextraClient : public CClient
public: public:
// constructors // constructors
CDextraClient(); CDextraClient();
CDextraClient(const CCallsign &, const CIp &, char = ' '); CDextraClient(const CCallsign &, const CIp &, char = ' ', int = 0);
CDextraClient(const CDextraClient &); CDextraClient(const CDextraClient &);
// destructor // destructor
@ -47,11 +47,16 @@ public:
// identity // identity
int GetProtocol(void) const { return PROTOCOL_DEXTRA; } int GetProtocol(void) const { return PROTOCOL_DEXTRA; }
int GetProtocolRevision(void) const { return m_ProtRev; }
const char *GetProtocolName(void) const { return "Dextra"; } const char *GetProtocolName(void) const { return "Dextra"; }
bool IsNode(void) const { return true; } bool IsNode(void) const { return true; }
// status // status
bool IsAlive(void) const; bool IsAlive(void) const;
protected:
// data
int m_ProtRev;
}; };
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////

View File

@ -66,6 +66,7 @@ void CDextraProtocol::Task(void)
CIp Ip; CIp Ip;
CCallsign Callsign; CCallsign Callsign;
char ToLinkModule; char ToLinkModule;
int ProtRev;
CDvHeaderPacket *Header; CDvHeaderPacket *Header;
CDvFramePacket *Frame; CDvFramePacket *Frame;
CDvLastFramePacket *LastFrame; CDvLastFramePacket *LastFrame;
@ -103,7 +104,7 @@ void CDextraProtocol::Task(void)
// handle it // handle it
OnDvLastFramePacketIn(LastFrame); OnDvLastFramePacketIn(LastFrame);
} }
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule) ) else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule, &ProtRev) )
{ {
std::cout << "DExtra connect packet for module " << ToLinkModule << " from " << Callsign << " at " << Ip << std::endl; std::cout << "DExtra connect packet for module " << ToLinkModule << " from " << Callsign << " at " << Ip << std::endl;
@ -115,7 +116,7 @@ void CDextraProtocol::Task(void)
m_Socket.Send(Buffer, Ip); m_Socket.Send(Buffer, Ip);
// create the client // create the client
CDextraClient *client = new CDextraClient(Callsign, Ip, ToLinkModule); CDextraClient *client = new CDextraClient(Callsign, Ip, ToLinkModule, ProtRev);
// and append // and append
g_Reflector.GetClients()->AddClient(client); g_Reflector.GetClients()->AddClient(client);
@ -137,6 +138,13 @@ void CDextraProtocol::Task(void)
CClient *client = clients->FindClient(Callsign, Ip, PROTOCOL_DEXTRA); CClient *client = clients->FindClient(Callsign, Ip, PROTOCOL_DEXTRA);
if ( client != NULL ) if ( client != NULL )
{ {
// ack disconnect packet
if ( client->GetProtocolRevision() == 1 )
{
EncodeDisconnectedPacket(&Buffer);
m_Socket.Send(Buffer, Ip);
}
// and remove it
clients->RemoveClient(client); clients->RemoveClient(client);
} }
g_Reflector.ReleaseClients(); g_Reflector.ReleaseClients();
@ -267,6 +275,7 @@ void CDextraProtocol::HandleKeepalives(void)
bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip) bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
{ {
bool newstream = false; bool newstream = false;
CCallsign via(Header->GetRpt1Callsign());
// find the stream // find the stream
CPacketStream *stream = GetStream(Header->GetStreamId()); CPacketStream *stream = GetStream(Header->GetStreamId());
@ -277,6 +286,8 @@ bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
CClient *client = g_Reflector.GetClients()->FindClient(Ip, PROTOCOL_DEXTRA); CClient *client = g_Reflector.GetClients()->FindClient(Ip, PROTOCOL_DEXTRA);
if ( client != NULL ) if ( client != NULL )
{ {
// get client callsign
via = client->GetCallsign();
// and try to open the stream // and try to open the stream
if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL ) if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL )
{ {
@ -296,7 +307,7 @@ bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
} }
// update last heard // update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), Header->GetRpt1Callsign()); g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via);
g_Reflector.ReleaseUsers(); g_Reflector.ReleaseUsers();
// done // done
@ -306,7 +317,7 @@ bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
//////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////
// packet decoding helpers // packet decoding helpers
bool CDextraProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *callsign, char *reflectormodule) bool CDextraProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *callsign, char *reflectormodule, int *revision)
{ {
bool valid = false; bool valid = false;
if ((Buffer.size() == 11) && (Buffer.data()[9] != ' ')) if ((Buffer.size() == 11) && (Buffer.data()[9] != ' '))
@ -314,6 +325,7 @@ bool CDextraProtocol::IsValidConnectPacket(const CBuffer &Buffer, CCallsign *cal
callsign->SetCallsign(Buffer.data(), 8); callsign->SetCallsign(Buffer.data(), 8);
callsign->SetModule(Buffer.data()[8]); callsign->SetModule(Buffer.data()[8]);
*reflectormodule = Buffer.data()[9]; *reflectormodule = Buffer.data()[9];
*revision = (Buffer.data()[10] == 11) ? 1 : 0;
valid = (callsign->IsValid() && IsLetter(*reflectormodule)); valid = (callsign->IsValid() && IsLetter(*reflectormodule));
} }
return valid; return valid;
@ -450,6 +462,12 @@ void CDextraProtocol::EncodeDisconnectPacket(CBuffer *Buffer)
Buffer->Set(tag, sizeof(tag)); Buffer->Set(tag, sizeof(tag));
} }
void CDextraProtocol::EncodeDisconnectedPacket(CBuffer *Buffer)
{
uint8 tag[] = { 'D','I','S','C','O','N','N','E','C','T','E','D' };
Buffer->Set(tag, sizeof(tag));
}
bool CDextraProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const bool CDextraProtocol::EncodeDvHeaderPacket(const CDvHeaderPacket &Packet, CBuffer *Buffer) const
{ {
uint8 tag[] = { 'D','S','V','T',0x10,0x00,0x00,0x00,0x20,0x00,0x01,0x02 }; uint8 tag[] = { 'D','S','V','T',0x10,0x00,0x00,0x00,0x20,0x00,0x01,0x02 };

View File

@ -63,7 +63,7 @@ protected:
bool OnDvHeaderPacketIn(CDvHeaderPacket *, const CIp &); bool OnDvHeaderPacketIn(CDvHeaderPacket *, const CIp &);
// packet decoding helpers // packet decoding helpers
bool IsValidConnectPacket(const CBuffer &, CCallsign *, char *); bool IsValidConnectPacket(const CBuffer &, CCallsign *, char *, int *);
bool IsValidDisconnectPacket(const CBuffer &, CCallsign *); bool IsValidDisconnectPacket(const CBuffer &, CCallsign *);
bool IsValidKeepAlivePacket(const CBuffer &, CCallsign *); bool IsValidKeepAlivePacket(const CBuffer &, CCallsign *);
CDvHeaderPacket *IsValidDvHeaderPacket(const CBuffer &); CDvHeaderPacket *IsValidDvHeaderPacket(const CBuffer &);
@ -75,6 +75,7 @@ protected:
void EncodeConnectAckPacket(CBuffer *); void EncodeConnectAckPacket(CBuffer *);
void EncodeConnectNackPacket(CBuffer *); void EncodeConnectNackPacket(CBuffer *);
void EncodeDisconnectPacket(CBuffer *); void EncodeDisconnectPacket(CBuffer *);
void EncodeDisconnectedPacket(CBuffer *);
bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const; bool EncodeDvHeaderPacket(const CDvHeaderPacket &, CBuffer *) const;
bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const; bool EncodeDvFramePacket(const CDvFramePacket &, CBuffer *) const;
bool EncodeDvLastFramePacket(const CDvLastFramePacket &, CBuffer *) const; bool EncodeDvLastFramePacket(const CDvLastFramePacket &, CBuffer *) const;

View File

@ -194,6 +194,7 @@ void CDplusProtocol::Task(void)
bool CDplusProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip) bool CDplusProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
{ {
bool newstream = false; bool newstream = false;
CCallsign via(Header->GetRpt1Callsign());
// find the stream // find the stream
CPacketStream *stream = GetStream(Header->GetStreamId()); CPacketStream *stream = GetStream(Header->GetStreamId());
@ -209,6 +210,8 @@ bool CDplusProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
{ {
client->SetModule(Header->GetRpt1Module()); client->SetModule(Header->GetRpt1Module());
} }
// get client callsign
via = client->GetCallsign();
// and try to open the stream // and try to open the stream
if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL ) if ( (stream = g_Reflector.OpenStream(Header, client)) != NULL )
{ {
@ -230,7 +233,7 @@ bool CDplusProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
} }
// update last heard // update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), Header->GetRpt1Callsign()); g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via);
g_Reflector.ReleaseUsers(); g_Reflector.ReleaseUsers();
// done // done

View File

@ -112,7 +112,7 @@ protected:
uint16 m_uiCrc; uint16 m_uiCrc;
#ifdef IMPLEMENT_CDVHEADERPACKET_CONST_CHAR_OPERATOR #ifdef IMPLEMENT_CDVHEADERPACKET_CONST_CHAR_OPERATOR
// buffer // buffer
char m_sz[32]; char m_sz[256];
#endif #endif
}; };

View File

@ -48,7 +48,7 @@
#define VERSION_MAJOR 1 #define VERSION_MAJOR 1
#define VERSION_MINOR 2 #define VERSION_MINOR 2
#define VERSION_REVISION 4 #define VERSION_REVISION 6
// global ------------------------------------------------------ // global ------------------------------------------------------

View File

@ -18,7 +18,10 @@ clean:
install: install:
mkdir -p /xlxd mkdir -p /xlxd
mv /xlxd/xlxd.blacklist /xlxd/xlxd.blacklist.bak
mv /xlxd/xlxd.whitelist /xlxd/xlxd.whitelist.bak
mv /xlxd/xlxd.interlink /xlxd/xlxd.interlink.bak
cp ./xlxd /xlxd/ cp ./xlxd /xlxd/
cp -i ../config/xlxd.blacklist /xlxd/ cp ../config/xlxd.blacklist /xlxd/
cp -i ../config/xlxd.whitelist /xlxd/ cp ../config/xlxd.whitelist /xlxd/
cp -i ../config/xlxd.interlink /xlxd/ cp ../config/xlxd.interlink /xlxd/