From 640f7c5c9c1c37c631ed99333f449fad863831b0 Mon Sep 17 00:00:00 2001 From: LX3JL Date: Sat, 16 Mar 2019 15:57:24 +0100 Subject: [PATCH] Revert "Merge pull request #120 from nonoo/master" This reverts commit 2c902aad20eee1eb13fec4a93269cdc75350cd90, reversing changes made to b3360b66e2dfcf21c9ddb2af542a9882aa2079a5. --- src/cdcsprotocol.cpp | 13 ++++++------- src/cdextraprotocol.cpp | 11 +++-------- src/cdmrmmdvmprotocol.cpp | 11 +++-------- src/cdmrplusprotocol.cpp | 8 ++------ src/cdplusprotocol.cpp | 11 +++-------- src/cprotocol.cpp | 25 ++++++++++++++++--------- src/cprotocol.h | 2 +- src/cxlxprotocol.cpp | 22 ++++++++++++---------- src/cxlxprotocol.h | 1 + 9 files changed, 47 insertions(+), 57 deletions(-) diff --git a/src/cdcsprotocol.cpp b/src/cdcsprotocol.cpp index 937b3a0..27a0d79 100644 --- a/src/cdcsprotocol.cpp +++ b/src/cdcsprotocol.cpp @@ -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 ) { diff --git a/src/cdextraprotocol.cpp b/src/cdextraprotocol.cpp index 3422df8..8aa88ab 100644 --- a/src/cdextraprotocol.cpp +++ b/src/cdextraprotocol.cpp @@ -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 ) { diff --git a/src/cdmrmmdvmprotocol.cpp b/src/cdmrmmdvmprotocol.cpp index 621506f..2398fd1 100644 --- a/src/cdmrmmdvmprotocol.cpp +++ b/src/cdmrmmdvmprotocol.cpp @@ -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 ) diff --git a/src/cdmrplusprotocol.cpp b/src/cdmrplusprotocol.cpp index d62615a..1d1180f 100644 --- a/src/cdmrplusprotocol.cpp +++ b/src/cdmrplusprotocol.cpp @@ -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 ) diff --git a/src/cdplusprotocol.cpp b/src/cdplusprotocol.cpp index 6477e93..86aa4fb 100644 --- a/src/cdplusprotocol.cpp +++ b/src/cdplusprotocol.cpp @@ -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 ) { diff --git a/src/cprotocol.cpp b/src/cprotocol.cpp index e27ad13..a5d2adb 100644 --- a/src/cprotocol.cpp +++ b/src/cprotocol.cpp @@ -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++ ) diff --git a/src/cprotocol.h b/src/cprotocol.h index e017746..60ad0dc 100644 --- a/src/cprotocol.h +++ b/src/cprotocol.h @@ -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 diff --git a/src/cxlxprotocol.cpp b/src/cxlxprotocol.cpp index 8250080..f01fb9a 100644 --- a/src/cxlxprotocol.cpp +++ b/src/cxlxprotocol.cpp @@ -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 diff --git a/src/cxlxprotocol.h b/src/cxlxprotocol.h index 20604c2..1b8d8d9 100644 --- a/src/cxlxprotocol.h +++ b/src/cxlxprotocol.h @@ -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 *);