Revert "Merge pull request #120 from nonoo/master"

This reverts commit 2c902aad20, reversing
changes made to b3360b66e2.
This commit is contained in:
LX3JL 2019-03-16 15:57:24 +01:00
parent 3e8d910cb0
commit 640f7c5c9c
9 changed files with 47 additions and 57 deletions

View File

@ -68,7 +68,7 @@ void CDcsProtocol::Task(void)
CCallsign Callsign;
char ToLinkModule;
CDvHeaderPacket *Header;
CDvFramePacket *Frame = NULL;
CDvFramePacket *Frame;
// handle incoming packets
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -89,12 +89,16 @@ void CDcsProtocol::Task(void)
//std::cout << "DCS DV frame" << std::endl;
OnDvFramePacketIn(Frame, &Ip);
}
else
{
//std::cout << "DCS DV last frame" << std::endl;
OnDvLastFramePacketIn((CDvLastFramePacket *)Frame, &Ip);
}
}
else
{
delete Header;
delete Frame;
Frame = NULL;
}
}
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule) )
@ -184,11 +188,6 @@ void CDcsProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( Frame != NULL && Frame->IsLastPacket() )
{
CloseStreamForDvLastFramePacket((CDvLastFramePacket *)Frame, &Ip);
}
// keep client alive
if ( m_LastKeepaliveTime.DurationSinceNow() > DCS_KEEPALIVE_PERIOD )
{

View File

@ -69,7 +69,7 @@ void CDextraProtocol::Task(void)
int ProtRev;
CDvHeaderPacket *Header;
CDvFramePacket *Frame;
CDvLastFramePacket *LastFrame = NULL;
CDvLastFramePacket *LastFrame;
// any incoming packet ?
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -101,9 +101,9 @@ void CDextraProtocol::Task(void)
else if ( (LastFrame = IsValidDvLastFramePacket(Buffer)) != NULL )
{
//std::cout << "DExtra DV last frame" << std::endl;
// handle it
OnDvFramePacketIn(LastFrame, &Ip);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer, &Callsign, &ToLinkModule, &ProtRev) )
{
@ -193,11 +193,6 @@ void CDextraProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( LastFrame != NULL )
{
CloseStreamForDvLastFramePacket(LastFrame, &Ip);
}
// keep client alive
if ( m_LastKeepaliveTime.DurationSinceNow() > DEXTRA_KEEPALIVE_PERIOD )
{

View File

@ -93,7 +93,7 @@ void CDmrmmdvmProtocol::Task(void)
uint8 CallType;
CDvHeaderPacket *Header;
CDvFramePacket *Frames[3];
CDvLastFramePacket *LastFrame = NULL;
CDvLastFramePacket *LastFrame;
// handle incoming packets
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -128,9 +128,8 @@ void CDmrmmdvmProtocol::Task(void)
else if ( IsValidDvLastFramePacket(Buffer, &LastFrame) )
{
//std::cout << "DMRmmdvm DV last frame" << std::endl;
// handle it
OnDvFramePacketIn(LastFrame, &Ip);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer, &Callsign, Ip) )
{
@ -258,10 +257,6 @@ void CDmrmmdvmProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( LastFrame != NULL )
{
CloseStreamForDvLastFramePacket(LastFrame, &Ip);
}
// keep client alive
if ( m_LastKeepaliveTime.DurationSinceNow() > DMRMMDVM_KEEPALIVE_PERIOD )

View File

@ -83,7 +83,6 @@ void CDmrplusProtocol::Task(void)
char ToLinkModule;
CDvHeaderPacket *Header;
CDvFramePacket *Frames[3];
int CloseStreamFrameNr = -1;
// handle incoming packets
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -100,11 +99,12 @@ void CDmrplusProtocol::Task(void)
/*if ( !Frames[i]->IsLastPacket() )
{
//std::cout << "DMRplus DV frame" << std::endl;
OnDvFramePacketIn(Frames[i], &Ip);
}
else
{
//std::cout << "DMRplus DV last frame" << std::endl;
CloseStreamFrameNr = i;
OnDvLastFramePacketIn((CDvLastFramePacket *)Frames[i], &Ip);
}*/
}
}
@ -190,10 +190,6 @@ void CDmrplusProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( CloseStreamFrameNr >= 0 )
{
CloseStreamForDvLastFramePacket((CDvLastFramePacket *)Frames[CloseStreamFrameNr], &Ip);
}
// keep client alive
if ( m_LastKeepaliveTime.DurationSinceNow() > DMRPLUS_KEEPALIVE_PERIOD )

View File

@ -69,7 +69,7 @@ void CDplusProtocol::Task(void)
CCallsign Callsign;
CDvHeaderPacket *Header;
CDvFramePacket *Frame;
CDvLastFramePacket *LastFrame = NULL;
CDvLastFramePacket *LastFrame;
// handle incoming packets
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -100,9 +100,9 @@ void CDplusProtocol::Task(void)
else if ( (LastFrame = IsValidDvLastFramePacket(Buffer)) != NULL )
{
//std::cout << "DPlus DV last frame" << std::endl;
// handle it
OnDvFramePacketIn(LastFrame, &Ip);
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer) )
{
@ -180,11 +180,6 @@ void CDplusProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( LastFrame )
{
CloseStreamForDvLastFramePacket(LastFrame, &Ip);
}
// keep client alive
if ( m_LastKeepaliveTime.DurationSinceNow() > DPLUS_KEEPALIVE_PERIOD )
{

View File

@ -148,6 +148,22 @@ void CProtocol::OnDvFramePacketIn(CDvFramePacket *Frame, const CIp *Ip)
}
}
void CProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *Frame, const CIp *Ip)
{
// find the stream
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL )
{
// push
stream->Lock();
stream->Push(Frame);
stream->Unlock();
// and close the stream
g_Reflector.CloseStream(stream);
}
}
////////////////////////////////////////////////////////////////////////////////////////
// stream handle helpers
@ -171,15 +187,6 @@ CPacketStream *CProtocol::GetStream(uint16 uiStreamId, const CIp *Ip)
return stream;
}
void CProtocol::CloseStreamForDvLastFramePacket(CDvLastFramePacket *Frame, const CIp *Ip)
{
CPacketStream *stream = GetStream(Frame->GetStreamId(), Ip);
if ( stream != NULL )
{
g_Reflector.CloseStream(stream);
}
}
void CProtocol::CheckStreamsTimeout(void)
{
for ( int i = 0; i < m_Streams.size(); i++ )

View File

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

View File

@ -71,7 +71,7 @@ void CXlxProtocol::Task(void)
CVersion Version;
CDvHeaderPacket *Header;
CDvFramePacket *Frame;
CDvLastFramePacket *LastFrame = NULL;
CDvLastFramePacket *LastFrame;
// any incoming packet ?
if ( m_Socket.Receive(&Buffer, &Ip, 20) != -1 )
@ -104,10 +104,8 @@ void CXlxProtocol::Task(void)
{
//std::cout << "XLX (DExtra) DV last frame" << std::endl;
// tag packet as remote peer origin
LastFrame->SetRemotePeerOrigin();
OnDvFramePacketIn((CDvFramePacket *)LastFrame, &Ip);
// handle it
OnDvLastFramePacketIn(LastFrame, &Ip);
}
else if ( IsValidConnectPacket(Buffer, &Callsign, Modules, &Version) )
{
@ -221,11 +219,6 @@ void CXlxProtocol::Task(void)
// handle queue from reflector
HandleQueue();
if ( LastFrame != NULL )
{
CloseStreamForDvLastFramePacket(LastFrame, &Ip);
}
// keep alive
if ( m_LastKeepaliveTime.DurationSinceNow() > XLX_KEEPALIVE_PERIOD )
{
@ -474,6 +467,15 @@ void CXlxProtocol::OnDvFramePacketIn(CDvFramePacket *DvFrame, const CIp *Ip)
CDextraProtocol::OnDvFramePacketIn(DvFrame, Ip);
}
void CXlxProtocol::OnDvLastFramePacketIn(CDvLastFramePacket *DvFrame, const CIp *Ip)
{
// tag packet as remote peer origin
DvFrame->SetRemotePeerOrigin();
// anc call base class
CDextraProtocol::OnDvLastFramePacketIn(DvFrame, Ip);
}
////////////////////////////////////////////////////////////////////////////////////////
// packet decoding helpers

View File

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