xlxd v1.4.2 / db v2.3.4

This commit is contained in:
LX3JL 2017-02-02 16:37:38 +01:00
parent ae8477ba53
commit edde49c1af
20 changed files with 274 additions and 88 deletions

View File

@ -1,3 +1,12 @@
xlx db v2.3.4
add filter function to the dashboard. It can be enabled or disabled via the config.inc.php
- "index.php"
- "users.php"
- "config.inc.php" $PageOptions['UserPage']['ShowFilter'] added
- "layout.css"
xlx db v2.3.3
now displays always the correct module for the last heard station.

View File

@ -107,4 +107,28 @@ background-image: linear-gradient(to bottom, rgb(201, 231, 233) 0%, rgb(220, 237
width : 90%;
padding : 15px;
margin : 5px;
}
.FilterField {
font-size : 10pt;
text-decoration : none,
color : #000000;
background-color : #FFFFFF;
width : 150px;
height : 20px;
padding-left : 5px;
padding-top : 3px;
border : 1px #60A1DE solid;
}
.FilterSubmit {
font-size : 10pt;
text-decoration : none,
color : #000000;
background-color : #FFFFFF;
height : 26px;
width : 60px;
padding-left : 5px;
padding-top : 3px;
border : 1px #60A1DE solid;
}

0
dashboard/img/flags/hk.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

0
dashboard/img/tx.gif Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -1,5 +1,7 @@
<?php
session_start();
if (file_exists("./pgs/functions.php")) { require_once("./pgs/functions.php"); } else { die("functions.php does not exist."); }
if (file_exists("./pgs/config.inc.php")) { require_once("./pgs/config.inc.php"); } else { die("config.inc.php does not exist."); }
@ -35,23 +37,17 @@ if ($CallingHome['Active']) {
}
}
else {
if (is_readable($CallingHome['HashFile'])) {
include($CallingHome['HashFile']);
if (isset($Hash)) {
if (strlen($Hash) > 4) {
if ($LastSync < (time() - $CallingHome['PushDelay'])) {
$Ressource = @fopen($CallingHome['HashFile'],"w");
if ($Ressource) {
@fwrite($Ressource, "<?php\n");
@fwrite($Ressource, "\n".'$LastSync = '.time().';');
@fwrite($Ressource, "\n".'$Hash = "'.$Hash.'";');
@fwrite($Ressource, "\n\n".'?>');
@fclose($Ressource);
}
$CallHomeNow = true;
}
}
include($CallingHome['HashFile']);
if ($LastSync < (time() - $CallingHome['PushDelay'])) {
$Ressource = @fopen($CallingHome['HashFile'],"w");
if ($Ressource) {
@fwrite($Ressource, "<?php\n");
@fwrite($Ressource, "\n".'$LastSync = '.time().';');
@fwrite($Ressource, "\n".'$Hash = "'.$Hash.'";');
@fwrite($Ressource, "\n\n".'?>');
@fclose($Ressource);
}
$CallHomeNow = true;
}
}
@ -100,7 +96,7 @@ else {
if (!isset($_GET['show']) || (($_GET['show'] != 'liveircddb') && ($_GET['show'] != 'reflectors') && ($_GET['show'] != 'interlinks'))) {
echo '
setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');';
setTimeout(ReloadPage, '.$PageOptions['PageRefreshDelay'].');';
}
echo '

View File

@ -16,7 +16,7 @@ $PageOptions = array();
$PageOptions['ContactEmail'] = 'your_email'; // Support E-Mail address
$PageOptions['DashboardVersion'] = '2.3.3'; // Dashboard Version
$PageOptions['DashboardVersion'] = '2.3.4'; // Dashboard Version
$PageOptions['PageRefreshActive'] = true; // Activate automatic refresh
$PageOptions['PageRefreshDelay'] = '10000'; // Page refresh time in miliseconds
@ -47,7 +47,7 @@ $PageOptions['MetaAuthor'] = 'LX1IQ';
$PageOptions['MetaRevisit'] = 'After 30 Days'; // Meta Tag Values, usefull for Search Engine
$PageOptions['MetaRobots'] = 'index,follow'; // Meta Tag Values, usefull for Search Engine
$PageOptions['UserPage']['ShowFilter'] = true; // Show Filter on Users page
$Service['PIDFile'] = '/var/log/xlxd.pid';
$Service['XMLFile'] = '/var/log/xlxd.xml';

View File

@ -162,7 +162,7 @@ Niger;NE;5U
Nigeria;NG;5N
Niue;NU;ZK2
Norfolk Island;NF;VK9N
Northern Ireland;NIE;GI-MI
Northern Ireland;NIE;2I-GI-MI
Northern Mariana Islands;MP;KH0
Norway;NO;LA-LB-LC-LD-LE-LF-LG-LH-LI-LJ-LK-LL-LM-LN
Oman;OM;YP-YQ-YR
@ -234,7 +234,7 @@ Tuvalu;TV;T2
Uganda;UG;5X
Ukraine;UA;UR-US-UT-UU-UV-UW-UX-UY-UZ
United Arab Emirates;AE;A6
United Kingdom;GB;2E-M0-M1-M2-M3-M4-M5-M6-M7-M8-M9-MB-MM-G0-G1-G2-G3-G4-G5-G6-G7-G8-G9-GX
United Kingdom;GB;2E-M0-M1-M2-M3-M4-M5-M6-M7-M8-M9-MB-MM-G0-G1-G2-G3-G4-G5-G6-G7-G8-G9-GB-GO-GQ-GR-GX
United States;US;K0-K1-K2-K3-K4-K5-K6-K7-K8-K9-KA-KB-KC-KD-KE-KF-KG-KH-KI-KJ-KK-KM-KN-KO-KQ-KR-KS-KT-KU-KV-KW-KX-KY-KZ-W0-W1-W2-W3-W4-W5-W6-W7-W8-W9-WA-WB-WD-WF-WR-WV-WX-WZ-N0-N1-N2-N3-N4-N5-N6-N7-N8-N9-NA-NB-NE-NG-NN-NO-NQ-NS-NU-NW-AA-AB-AC-AD-AE-AF-AG-AH-AI-AJ-AK
United States Minor Outlying Islands;UM;
Uruguay;UY;CV-CW-CX

1 Afghanistan AF YA-T6
162 Nigeria NG 5N
163 Niue NU ZK2
164 Norfolk Island NF VK9N
165 Northern Ireland NIE GI-MI 2I-GI-MI
166 Northern Mariana Islands MP KH0
167 Norway NO LA-LB-LC-LD-LE-LF-LG-LH-LI-LJ-LK-LL-LM-LN
168 Oman OM YP-YQ-YR
234 Uganda UG 5X
235 Ukraine UA UR-US-UT-UU-UV-UW-UX-UY-UZ
236 United Arab Emirates AE A6
237 United Kingdom GB 2E-M0-M1-M2-M3-M4-M5-M6-M7-M8-M9-MB-MM-G0-G1-G2-G3-G4-G5-G6-G7-G8-G9-GX 2E-M0-M1-M2-M3-M4-M5-M6-M7-M8-M9-MB-MM-G0-G1-G2-G3-G4-G5-G6-G7-G8-G9-GB-GO-GQ-GR-GX
238 United States US K0-K1-K2-K3-K4-K5-K6-K7-K8-K9-KA-KB-KC-KD-KE-KF-KG-KH-KI-KJ-KK-KM-KN-KO-KQ-KR-KS-KT-KU-KV-KW-KX-KY-KZ-W0-W1-W2-W3-W4-W5-W6-W7-W8-W9-WA-WB-WD-WF-WR-WV-WX-WZ-N0-N1-N2-N3-N4-N5-N6-N7-N8-N9-NA-NB-NE-NG-NN-NO-NQ-NS-NU-NW-AA-AB-AC-AD-AE-AF-AG-AH-AI-AJ-AK
239 United States Minor Outlying Islands UM
240 Uruguay UY CV-CW-CX

View File

@ -1,9 +1,78 @@
<?php
if (!isset($_SESSION['FilterCallSign'])) {
$_SESSION['FilterCallSign'] = null;
}
if (!isset($_SESSION['FilterModule'])) {
$_SESSION['FilterModule'] = null;
}
if (isset($_POST['do'])) {
if ($_POST['do'] == 'SetFilter') {
if (isset($_POST['txtSetCallsignFilter'])) {
$_POST['txtSetCallsignFilter'] = trim($_POST['txtSetCallsignFilter']);
if ($_POST['txtSetCallsignFilter'] == "") {
$_SESSION['FilterCallSign'] = null;
}
else {
$_SESSION['FilterCallSign'] = $_POST['txtSetCallsignFilter'];
if (strpos($_SESSION['FilterCallSign'], "*") === false) {
$_SESSION['FilterCallSign'] = "*".$_SESSION['FilterCallSign']."*";
}
}
}
if (isset($_POST['txtSetModuleFilter'])) {
$_POST['txtSetModuleFilter'] = trim($_POST['txtSetModuleFilter']);
if ($_POST['txtSetModuleFilter'] == "") {
$_SESSION['FilterModule'] = null;
}
else {
$_SESSION['FilterModule'] = $_POST['txtSetModuleFilter'];
}
}
}
}
?>
<table border="0">
<tr>
<td valign="top">
<table class="listingtable">
<table class="listingtable"><?php
if ($PageOptions['UserPage']['ShowFilter']) {
echo '
<tr>
<th colspan="8">
<table width="100%" border="0">
<tr>
<td align="left">
<form name="frmFilterCallSign" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterCallSign'].'" name="txtSetCallsignFilter" placeholder="Callsign" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>
<td align="right" style="padding-right:3px;">
<form name="frmFilterModule" method="post" action="./index.php">
<input type="hidden" name="do" value="SetFilter" />
<input type="text" class="FilterField" value="'.$_SESSION['FilterModule'].'" name="txtSetModuleFilter" placeholder="Module" />
<input type="submit" value="Apply" class="FilterSubmit" />
</form>
</td>
</table>
</th>
</tr>';
}
?>
<tr>
<th>#</th>
<th>Flag</th>
@ -13,42 +82,62 @@
<th>Via / Peer</th>
<th>Last heard</th>
<th align="center" valign="middle"><img src="./img/ear.png" alt="Listening on" /></th>
</tr>
<?php
</tr><?php
$Reflector->LoadFlags();
$odd = "";
for ($i=0;$i<$Reflector->StationCount();$i++) {
if ($odd == "#FFFFFF") { $odd = "#F1FAFA"; } else { $odd = "#FFFFFF"; }
echo '
$ShowThisStation = true;
if ($PageOptions['UserPage']['ShowFilter']) {
$CS = true;
if ($_SESSION['FilterCallSign'] != null) {
if (!fnmatch($_SESSION['FilterCallSign'], $Reflector->Stations[$i]->GetCallSign(), FNM_CASEFOLD)) {
$CS = false;
}
}
$MO = true;
if ($_SESSION['FilterModule'] != null) {
if (trim(strtolower($_SESSION['FilterModule'])) != strtolower($Reflector->Stations[$i]->GetModule())) {
$MO = false;
}
}
$ShowThisStation = ($CS && $MO);
}
if ($ShowThisStation) {
if ($odd == "#FFFFFF") { $odd = "#F1FAFA"; } else { $odd = "#FFFFFF"; }
echo '
<tr height="30" bgcolor="'.$odd.'" onMouseOver="this.bgColor=\'#FFFFCA\';" onMouseOut="this.bgColor=\''.$odd.'\';">
<td align="center" valign="middle" width="35">';
if ($i==0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
echo '<img src="./img/tx.gif" style="margin-top:3px;" height="20"/>';
}
else {
echo ($i+1);
}
if ($i==0 && $Reflector->Stations[$i]->GetLastHeardTime() > (time() - 60)) {
echo '<img src="./img/tx.gif" style="margin-top:3px;" height="20"/>';
}
else {
echo ($i+1);
}
echo '</td>
echo '</td>
<td align="center" width="60">';
if (file_exists("./img/flags/".$Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign()).".png")) {
echo '<img src="./img/flags/'.$Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign()).'.png" height="15" />';
}
echo '</td>
if (file_exists("./img/flags/".$Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign()).".png")) {
echo '<img src="./img/flags/'.$Reflector->GetFlag($Reflector->Stations[$i]->GetCallSign()).'.png" height="15" />';
}
echo '</td>
<td width="75"><a href="https://www.qrz.com/db/'.$Reflector->Stations[$i]->GetCallsignOnly().'" class="pl" target="_blank">'.$Reflector->Stations[$i]->GetCallsignOnly().'</a></td>
<td width="60">'.$Reflector->Stations[$i]->GetSuffix().'</td>
<td width="50" align="center"><a href="http://www.aprs.fi/'.$Reflector->Stations[$i]->GetCallsignOnly().'" class="pl" target="_blank"><img src="./img/sat.png" /></a></td>
<td width="150">'.$Reflector->Stations[$i]->GetVia();
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
echo ' / '.$Reflector->Stations[$i]->GetPeer();
}
echo '</td>
if ($Reflector->Stations[$i]->GetPeer() != $Reflector->GetReflectorName()) {
echo ' / '.$Reflector->Stations[$i]->GetPeer();
}
echo '</td>
<td width="150">'.@date("d.m.Y H:i", $Reflector->Stations[$i]->GetLastHeardTime()).'</td>
<td align="center" width="30">'.$Reflector->Stations[$i]->GetModule().'</td>
</tr>';
}
if ($i == 39) { $i = $Reflector->StationCount()+1; }
}

View File

@ -99,12 +99,12 @@ void CDcsProtocol::Task(void)
if ( !Frame->IsLastPacket() )
{
//std::cout << "DCS DV frame" << std::endl;
OnDvFramePacketIn(Frame);
OnDvFramePacketIn(Frame, &Ip);
}
else
{
//std::cout << "DCS DV last frame" << std::endl;
OnDvLastFramePacketIn((CDvLastFramePacket *)Frame);
OnDvLastFramePacketIn((CDvLastFramePacket *)Frame, &Ip);
}
}
else
@ -245,6 +245,12 @@ bool CDcsProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
// update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via, Header->GetRpt2Callsign());
g_Reflector.ReleaseUsers();
// delete header if needed
if ( !newstream )
{
delete Header;
}
}
else
{

View File

@ -80,7 +80,7 @@ void CDextraProtocol::Task(void)
//std::cout << "DExtra DV frame" << std::endl;
// handle it
OnDvFramePacketIn(Frame);
OnDvFramePacketIn(Frame, &Ip);
}
else if ( (Header = IsValidDvHeaderPacket(Buffer)) != NULL )
{
@ -103,7 +103,7 @@ void CDextraProtocol::Task(void)
//std::cout << "DExtra DV last frame" << std::endl;
// handle it
OnDvLastFramePacketIn(LastFrame);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule, &ProtRev) )
{
@ -331,6 +331,12 @@ bool CDextraProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
// update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via, Header->GetRpt2Callsign());
g_Reflector.ReleaseUsers();
// delete header if needed
if ( !newstream )
{
delete Header;
}
}
else
{

View File

@ -92,7 +92,7 @@ void CDplusProtocol::Task(void)
//std::cout << "DPlus DV frame" << std::endl;
// handle it
OnDvFramePacketIn(Frame);
OnDvFramePacketIn(Frame, &Ip);
}
else if ( (Header = IsValidDvHeaderPacket(Buffer)) != NULL )
{
@ -114,7 +114,7 @@ void CDplusProtocol::Task(void)
//std::cout << "DPlus DV last frame" << std::endl;
// handle it
OnDvLastFramePacketIn(LastFrame);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer) )
{
@ -250,6 +250,12 @@ bool CDplusProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
// update last heard
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), via, Header->GetRpt2Callsign());
g_Reflector.ReleaseUsers();
// delete header if needed
if ( !newstream )
{
delete Header;
}
}
else
{

View File

@ -73,3 +73,15 @@ void CPacketStream::Push(CPacket *Packet)
push(Packet);
}
////////////////////////////////////////////////////////////////////////////////////////
// get
const CIp *CPacketStream::GetOwnerIp(void)
{
if ( m_OwnerClient != NULL )
{
return &(m_OwnerClient->GetIp());
}
return NULL;
}

View File

@ -55,7 +55,9 @@ public:
// get
CClient *GetOwnerClient(void) { return m_OwnerClient; }
const CIp *GetOwnerIp(void);
bool IsExpired(void) const { return (m_LastPacketTime.DurationSinceNow() > STREAM_TIMEOUT); }
bool IsOpen(void) const { return m_bOpen; }
uint16 GetStreamId(void) const { return m_uiStreamId; }
const CCallsign &GetUserCallsign(void) const { return m_DvHeader.GetMyCallsign(); }

View File

@ -134,10 +134,10 @@ bool CProtocol::EncodeDvPacket(const CPacket &packet, CBuffer *buffer) const
////////////////////////////////////////////////////////////////////////////////////////
// streams helpers
void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame)
void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame, const CIp *Ip)
{
// find the stream
CPacketStream *stream = GetStream(Frame->GetStreamId());
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL )
{
//std::cout << "DV frame" << std::endl;
@ -148,10 +148,10 @@ void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame)
}
}
void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame)
void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip)
{
// find the stream
CPacketStream *stream = GetStream(Frame->GetStreamId());
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL )
{
// push
@ -167,16 +167,23 @@ void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame)
////////////////////////////////////////////////////////////////////////////////////////
// stream handle helpers
CPacketStream *CProtocol::GetStream(uint16 uiStreamId)
CPacketStream *CProtocol::GetStream(uint16 uiStreamId, const CIp *Ip)
{
CPacketStream *stream = NULL;
// find if we have a stream with same streamid in our cache
for ( int i = 0; (i < m_Streams.size()) && (stream == NULL); i++ )
{
if ( m_Streams[i]->GetStreamId() == uiStreamId )
{
stream = m_Streams[i];
// if Ip not NULL, also check if IP match
if ( (Ip != NULL) && (*Ip == *(m_Streams[i]->GetOwnerIp())) )
{
stream = m_Streams[i];
}
}
}
// done
return stream;
}

View File

@ -70,11 +70,11 @@ protected:
// stream helpers
virtual bool OnDvHeaderPacketIn(CDvHeaderPacket *, const CIp &) { return false; }
virtual void OnDvFramePacketIn(CDvFramePacket *);
virtual void OnDvLastFramePacketIn(CDvLastFramePacket *);
virtual void OnDvFramePacketIn(CDvFramePacket *, const CIp * = NULL);
virtual void OnDvLastFramePacketIn(CDvLastFramePacket *, const CIp * = NULL);
// stream handle helpers
CPacketStream *GetStream(uint16);
CPacketStream *GetStream(uint16, const CIp * = NULL);
void CheckStreamsTimeout(void);
// queue helper

View File

@ -176,37 +176,48 @@ CPacketStream *CReflector::OpenStream(CDvHeaderPacket *DvHeader, CClient *client
// check if client is valid candidate
if ( m_Clients.IsClient(client) && !client->IsAMaster() )
{
// get the module's queue
char module = DvHeader->GetRpt2Module();
CPacketStream *stream = GetStream(module);
if ( stream != NULL )
// check if no stream with same streamid already open
// to prevent loops
if ( !IsStreamOpen(DvHeader) )
{
// lock it
stream->Lock();
// is it available ?
if ( stream->Open(*DvHeader, client) )
// get the module's queue
char module = DvHeader->GetRpt2Module();
CPacketStream *stream = GetStream(module);
if ( stream != NULL )
{
// stream open, mark client as master
// so that it can't be deleted
client->SetMasterOfModule(module);
// lock it
stream->Lock();
// is it available ?
if ( stream->Open(*DvHeader, client) )
{
// stream open, mark client as master
// so that it can't be deleted
client->SetMasterOfModule(module);
// update last heard time
client->Heard();
retStream = stream;
// update last heard time
client->Heard();
retStream = stream;
// and push header packet
stream->Push(DvHeader);
// and push header packet
stream->Push(DvHeader);
// report
std::cout << "Opening stream on module " << module << " for client " << client->GetCallsign()
<< " with sid " << DvHeader->GetStreamId() << std::endl;
// report
std::cout << "Opening stream on module " << module << " for client " << client->GetCallsign()
<< " with sid " << DvHeader->GetStreamId() << std::endl;
// notify
g_Reflector.OnStreamOpen(stream->GetUserCallsign());
// notify
g_Reflector.OnStreamOpen(stream->GetUserCallsign());
}
// unlock now
stream->Unlock();
}
// unlock now
stream->Unlock();
}
else
{
// report
std::cout << "Detected stream loop on module " << DvHeader->GetRpt2Module() << " for client " << client->GetCallsign()
<< " with sid " << DvHeader->GetStreamId() << std::endl;
}
}
@ -525,6 +536,17 @@ CPacketStream *CReflector::GetStream(char module)
return stream;
}
bool CReflector::IsStreamOpen(const CDvHeaderPacket *DvHeader)
{
bool open = false;
for ( int i = 0; (i < m_Streams.size()) && !open; i++ )
{
open = ( (m_Streams[i].GetStreamId() == DvHeader->GetStreamId()) &&
(m_Streams[i].IsOpen()));
}
return open;
}
char CReflector::GetStreamModule(CPacketStream *stream)
{
char module = ' ';

View File

@ -101,6 +101,7 @@ protected:
// streams
CPacketStream *GetStream(char);
bool IsStreamOpen(const CDvHeaderPacket *);
char GetStreamModule(CPacketStream *);
// xml helpers

View File

@ -81,7 +81,7 @@ void CXlxProtocol::Task(void)
//std::cout << "XLX (DExtra) DV frame" << std::endl;
// handle it
OnDvFramePacketIn(Frame);
OnDvFramePacketIn(Frame, &Ip);
}
else if ( (Header = IsValidDvHeaderPacket(Buffer)) != NULL )
{
@ -104,7 +104,7 @@ void CXlxProtocol::Task(void)
//std::cout << "XLX (DExtra) DV last frame" << std::endl;
// handle it
OnDvLastFramePacketIn(LastFrame);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer, &Callsign, Modules, &Major, &Minor, &Revision) )
{
@ -415,26 +415,32 @@ bool CXlxProtocol::OnDvHeaderPacketIn(CDvHeaderPacket *Header, const CIp &Ip)
g_Reflector.GetUsers()->Hearing(Header->GetMyCallsign(), Header->GetRpt1Callsign(), Header->GetRpt2Callsign(), peer);
g_Reflector.ReleaseUsers();
// delete header if needed
if ( !newstream )
{
delete Header;
}
// done
return newstream;
}
void CXlxProtocol::OnDvFramePacketIn(CDvFramePacket *DvFrame)
void CXlxProtocol::OnDvFramePacketIn(CDvFramePacket *DvFrame, const CIp *Ip)
{
// tag packet as remote peer origin
DvFrame->SetRemotePeerOrigin();
// anc call base class
CDextraProtocol::OnDvFramePacketIn(DvFrame);
CDextraProtocol::OnDvFramePacketIn(DvFrame, Ip);
}
void CXlxProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *DvFrame)
void CXlxProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *DvFrame, const CIp *Ip)
{
// tag packet as remote peer origin
DvFrame->SetRemotePeerOrigin();
// anc call base class
CDextraProtocol::OnDvLastFramePacketIn(DvFrame);
CDextraProtocol::OnDvLastFramePacketIn(DvFrame, Ip);
}

View File

@ -61,8 +61,8 @@ protected:
// stream helpers
bool OnDvHeaderPacketIn(CDvHeaderPacket *, const CIp &);
void OnDvFramePacketIn(CDvFramePacket *);
void OnDvLastFramePacketIn(CDvLastFramePacket *);
void OnDvFramePacketIn(CDvFramePacket *, const CIp * = NULL);
void OnDvLastFramePacketIn(CDvLastFramePacket *, const CIp * = NULL);
// packet decoding helpers
bool IsValidKeepAlivePacket(const CBuffer &, CCallsign *);

View File

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