Re: latest cvs version issues

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2011-03-17 06:47 +0100, Jan Willamowius wrote openh323gk-users@xxxxxxxxxxxx:

JW>Hi Yuriy,
JW>
JW>your diff shows my changes to tighten the checks on the RTCP reports
JW>GnuGk receives (between Feb 13th and 15th UTC).
JW>In your traces of failing T.38 calls, to do you see any error messages
JW>about rejected RTCP packets ?
JW>
JW>Thanks for testing!

Hi Jan, finally i found exact commit which break t38, it's at revision 
1.413 of ProxyChannel.cxx.

JW>
JW>Regards,
JW>Jan
JW>
JW>Georgiewskiy Yuriy wrote:
JW>> On 2011-03-16 23:01 +0300, Georgiewskiy Yuriy wrote GNU Gatekeeper Users:
JW>> 
JW>> Seems i miss here, there is two commits to ProxyChannel.cxx at this date, i check it
JW>> separately a bit later.
JW>> 
JW>> GY>On 2011-03-04 16:03 +0100, Jan Willamowius wrote openh323gk-users@xxxxxxxxxxxx:
JW>> GY>
JW>> GY>JW>Georgiewskiy Yuriy wrote:
JW>> GY>JW>> JW>can you pinpoint when T38 fax stopped working for you ? between the
JW>> GY>JW>> JW>2.3.4 release and the current CVS ? Or between 2.3.3 and 2.3.4 ?
JW>> GY>JW>> 
JW>> GY>JW>> Hi, no, T38 works on latest stable, and don't works on current cvs only.
JW>> GY>JW>
JW>> GY>JW>There haven't been too many changes since the last release. Can you
JW>> GY>JW>check which one broke T38 ?
JW>> GY>
JW>> GY>Hi, it seems it is a commit from 2011-02-15 on ProxyChannel.cxx, i make a diff, after 
JW>> GY>this changes faxes other t38 don't work.
JW>> GY>
JW>> GY>--- /home/src/gnugk/openh323gk/ProxyChannel.cxx	2011-03-16 22:35:18.000000000 +0300
JW>> GY>+++ /tmp/openh323gk/ProxyChannel.cxx	2011-03-16 22:43:24.000000000 +0300
JW>> GY>@@ -304,10 +304,10 @@
JW>> GY> 	bool isMute() { return mute; }
JW>> GY> 	void SetMute(bool toMute) { mute = toMute; }
JW>> GY> 	void OnHandlerSwapped() { std::swap(fnat, rnat); }
JW>> GY>+	void SetRTPSessionID(WORD id) { m_sessionID = id; }
JW>> GY> #ifdef HAS_H46018
JW>> GY> 	void SetUsesH46019fc(bool fc) { m_h46019fc = fc; }
JW>> GY> 	void SetH46019Direction(int dir) { m_h46019dir = dir; }
JW>> GY>-	void SetH46024SessionID(WORD id) { m_sessionID = id; }
JW>> GY> 	void SetH46019UniDirectional(bool val) { m_h46019uni = val; }
JW>> GY> 	// disabled for now, until we handle 2 payload types per UDPProxy
JW>> GY> 	// void SetKeepAlivePayloadType(int pt) { m_keepAlivePayloadType = pt; }
JW>> GY>@@ -337,6 +337,7 @@
JW>> GY> 	bool mute;
JW>> GY> 	bool m_dontQueueRTP;
JW>> GY> 	bool m_EnableRTCPStats;
JW>> GY>+	WORD m_sessionID;
JW>> GY> #ifdef HAS_H46018
JW>> GY> 	// also used as indicator whether H.460.19 should be used
JW>> GY> //	int m_keepAlivePayloadType;
JW>> GY>@@ -350,7 +351,6 @@
JW>> GY> 	int m_h46019olc;
JW>> GY> 	int m_h46019dir;
JW>> GY>     bool m_h46019uni;
JW>> GY>-	WORD m_sessionID;
JW>> GY> 	H323TransportAddress m_h46019fwd;
JW>> GY> 	H323TransportAddress m_h46019rev;
JW>> GY> 	bool m_OLCrev;
JW>> GY>@@ -427,7 +427,7 @@
JW>> GY> 	void SetUsesH46019fc(bool);
JW>> GY> 	void SetH46019Direction(int dir);
JW>> GY>     void SetH46019UniDirectional(bool uni);
JW>> GY>-	void SetH46024SessionID(WORD id);
JW>> GY>+	void SetRTPSessionID(WORD id);
JW>> GY> 
JW>> GY> private:
JW>> GY> 	void SetNAT(bool);
JW>> GY>@@ -5360,12 +5360,12 @@
JW>> GY> #endif
JW>> GY> 
JW>> GY> // class UDPProxySocket
JW>> GY>-UDPProxySocket::UDPProxySocket(const char *t) 
JW>> GY>+UDPProxySocket::UDPProxySocket(const char *t)
JW>> GY> 	: ProxySocket(this, t),
JW>> GY> 		fSrcIP(0), fDestIP(0), rSrcIP(0), rDestIP(0),
JW>> GY>-		fSrcPort(0), fDestPort(0), rSrcPort(0), rDestPort(0)
JW>> GY>+		fSrcPort(0), fDestPort(0), rSrcPort(0), rDestPort(0), m_sessionID(0)
JW>> GY> #ifdef HAS_H46018
JW>> GY>-	, m_h46019fc(false), m_h46019olc(H46019_NONE), m_h46019dir(H46019_NONE), m_h46019uni(false), m_sessionID(0), m_OLCrev(false)
JW>> GY>+	, m_h46019fc(false), m_h46019olc(H46019_NONE), m_h46019dir(H46019_NONE), m_h46019uni(false), m_OLCrev(false)
JW>> GY> 	//, m_keepAlivePayloadType(H46019_UNDEFINED_PAYLOAD_TYPE), m_keepAliveTypeSet(false)
JW>> GY> #endif
JW>> GY> {
JW>> GY>@@ -5503,6 +5503,14 @@
JW>> GY> 	WORD fromPort;
JW>> GY> 	GetLastReceiveAddress(fromIP, fromPort);
JW>> GY> 	buflen = (WORD)GetLastReadCount();
JW>> GY>+	// verify packet
JW>> GY>+	unsigned int version = 0;
JW>> GY>+	if (buflen >= 1)
JW>> GY>+		version = (((int)wbuffer[0] & 0xc0) >> 6);
JW>> GY>+	if (version != 2) {
JW>> GY>+		PTRACE(1, "RTP\tInvalid RTP/RTCP packet: version=" << version);
JW>> GY>+		return NoData;
JW>> GY>+	}
JW>> GY> #ifdef HAS_H46018
JW>> GY> 	int payloadType = H46019_UNDEFINED_PAYLOAD_TYPE;
JW>> GY> 	if (buflen >= 2)
JW>> GY>@@ -5707,23 +5715,27 @@
JW>> GY> 		bool direct = ((*m_call)->GetSRC_media_control_IP() == fromIP.AsString());
JW>> GY> 		PIPSocket::Address addr = (DWORD)0;
JW>> GY> 		(*m_call)->GetMediaOriginatingIp(addr);
JW>> GY>+		if (buflen < 4) {
JW>> GY>+			PTRACE(1, "RTCP\tInvalid RTCP frame");
JW>> GY>+			return NoData;
JW>> GY>+		}
JW>> GY> 
JW>> GY> 		RTP_ControlFrame frame(2048);
JW>> GY> 		frame.Attach(wbuffer, buflen);
JW>> GY> 		do {
JW>> GY> 			BYTE * payload = frame.GetPayloadPtr();
JW>> GY> 			unsigned size = frame.GetPayloadSize();
JW>> GY>-			if ((payload == NULL) || (size == 0) || ((payload + size) > (frame.GetPointer() + frame.GetSize()))) {
JW>> GY>-			/* TODO: 1.shall we test for a maximum size ? Indeed but what's the value ? *
JW>> GY>-				 2. what's the correct exit status ? */
JW>> GY>-				PTRACE(1, "RTCP\tSession invalid frame");
JW>> GY>-				// TODO: return NoData; ?
JW>> GY>-				break;
JW>> GY>+			if ((payload == NULL) || (size == 0)
JW>> GY>+				|| (frame.GetVersion() != 2)
JW>> GY>+				|| ((payload + size) > (frame.GetPointer() + frame.GetSize()))) {
JW>> GY>+				// TODO: test for a maximum size ? what is the max size ?
JW>> GY>+				PTRACE(1, "RTCP\tInvalid RTCP frame");
JW>> GY>+				return NoData;
JW>> GY> 			}
JW>> GY> 			switch (frame.GetPayloadType()) {
JW>> GY> 			case RTP_ControlFrame::e_SenderReport :
JW>> GY> 				PTRACE(5, "RTCP\tSession SenderReport packet");
JW>> GY>-				if (size >= sizeof(RTP_ControlFrame::SenderReport)) {
JW>> GY>+				if (size >= (sizeof(PUInt32b)+sizeof(RTP_ControlFrame::SenderReport) + frame.GetCount() * sizeof(RTP_ControlFrame::ReceiverReport))) {
JW>> GY> 					const RTP_ControlFrame::SenderReport & sr = *(const RTP_ControlFrame::SenderReport *)(payload);
JW>> GY> 					if (direct) {
JW>> GY> 						if (m_sessionID == RTP_Session::DefaultAudioSessionID) {
JW>> GY>@@ -5751,7 +5763,7 @@
JW>> GY> 				break;
JW>> GY> 			case RTP_ControlFrame::e_ReceiverReport:
JW>> GY> 				PTRACE(5, "RTCP\tSession ReceiverReport packet");
JW>> GY>-				if (size >= 4) {
JW>> GY>+				if (size >= (sizeof(PUInt32b)+frame.GetCount()*sizeof(RTP_ControlFrame::ReceiverReport))) {
JW>> GY> 					BuildReceiverReport(frame, sizeof(PUInt32b), direct);
JW>> GY> 				} else {
JW>> GY> 					PTRACE(5, "RTP\tSession ReceiverReport packet truncated");
JW>> GY>@@ -5760,7 +5772,7 @@
JW>> GY> 			case RTP_ControlFrame::e_SourceDescription :
JW>> GY> 				PTRACE(5, "RTCP\tSession SourceDescription packet");		    
JW>> GY> 				if ((!(*m_call)->GetRTCP_SRC_sdes_flag() && direct) || (!(*m_call)->GetRTCP_DST_sdes_flag() && !direct))
JW>> GY>-					if (size >= frame.GetCount()*sizeof(RTP_ControlFrame::SourceDescription)) {
JW>> GY>+					if (size >= (frame.GetCount()*sizeof(RTP_ControlFrame::SourceDescription))) {
JW>> GY> 						const RTP_ControlFrame::SourceDescription * sdes = (const RTP_ControlFrame::SourceDescription *)payload;
JW>> GY> 						for (PINDEX srcIdx = 0; srcIdx < (PINDEX)frame.GetCount(); srcIdx++) {
JW>> GY> 							const RTP_ControlFrame::SourceDescription::Item * item = sdes->item;
JW>> GY>@@ -6129,16 +6141,15 @@
JW>> GY> 		    rtcp->SetH46019UniDirectional(true);	
JW>> GY>     }
JW>> GY> }
JW>> GY>+#endif
JW>> GY> 
JW>> GY>-
JW>> GY>-void RTPLogicalChannel::SetH46024SessionID(WORD id)
JW>> GY>+void RTPLogicalChannel::SetRTPSessionID(WORD id)
JW>> GY> {
JW>> GY> 	if (rtp)
JW>> GY>-		rtp->SetH46024SessionID(id);
JW>> GY>+		rtp->SetRTPSessionID(id);
JW>> GY> 	if (rtcp)
JW>> GY>-		rtcp->SetH46024SessionID(id);	
JW>> GY>+		rtcp->SetRTPSessionID(id);	
JW>> GY> }
JW>> GY>-#endif
JW>> GY> 
JW>> GY> void RTPLogicalChannel::SetMediaControlChannelSource(const H245_UnicastAddress_iPAddress & addr)
JW>> GY> {
JW>> GY>@@ -6442,8 +6453,8 @@
JW>> GY> 
JW>> GY> #ifdef HAS_H46018
JW>> GY> 	lc->SetH46019Direction(m_H46019dir);
JW>> GY>-	lc->SetH46024SessionID((WORD)h225Params->m_sessionID);
JW>> GY> #endif
JW>> GY>+	lc->SetRTPSessionID((WORD)h225Params->m_sessionID);
JW>> GY> 
JW>> GY> 	H245_UnicastAddress_iPAddress *addr;
JW>> GY> 	bool changed = false;
JW>> GY>@@ -6598,7 +6609,7 @@
JW>> GY> 				((RTPLogicalChannel*)lc)->SetUsesH46019fc(UsesH46019fc());
JW>> GY> 				((RTPLogicalChannel*)lc)->SetH46019Direction(GetH46019Direction());
JW>> GY>                 ((RTPLogicalChannel*)lc)->SetH46019UniDirectional(m_h46019uni);
JW>> GY>-				((RTPLogicalChannel*)lc)->SetH46024SessionID((WORD)h225Params->m_sessionID);
JW>> GY>+				((RTPLogicalChannel*)lc)->SetRTPSessionID((WORD)h225Params->m_sessionID);
JW>> GY> 			} else {
JW>> GY> 				PTRACE(1, "Can't find RTP port for logical channel " << flcn);
JW>> GY> 			}
JW>
JW>

C уважением                       With Best Regards
Георгиевский Юрий.                Georgiewskiy Yuriy
+7 4872 711666                    +7 4872 711666
факс +7 4872 711143               fax +7 4872 711143
Компания ООО "Ай Ти Сервис"       IT Service Ltd
http://nkoort.ru                  http://nkoort.ru
JID: GHhost@xxxxxxxxxx            JID: GHhost@xxxxxxxxxx
YG129-RIPE                        YG129-RIPE
------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________________

Posting: mailto:Openh323gk-users@xxxxxxxxxxxxxxxxxxxxx
Archive: http://sourceforge.net/mailarchive/forum.php?forum_name=openh323gk-users
Unsubscribe: http://lists.sourceforge.net/lists/listinfo/openh323gk-users
Homepage: http://www.gnugk.org/

[Index of Archives]     [SIP]     [Open H.323]     [Gnu Gatekeeper]     [Asterisk PBX]     [ISDN Cause Codes]     [Yosemite News]

  Powered by Linux