On 2011-03-16 23:01 +0300, Georgiewskiy Yuriy wrote GNU Gatekeeper Users:

Seems i miss here, there is two commits to ProxyChannel.cxx at this date, i 
check it
separately a bit later.

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

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: [email protected] JID: [email protected]
YG129-RIPE                        YG129-RIPE
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________________

Posting: mailto:[email protected]
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/

Reply via email to