X-ECN Telecoms-MailScanner-Information: Contact ECN Telecoms
X-ECN Telecoms-MailScanner: Found to be clean
X-ECN Telecoms-MailScanner-SpamCheck: not spam, SpamAssassin (not cached,
        score=-103.306, required 6, autolearn=not spam, ALL_TRUSTED -1.80,
        AWL 1.09, BAYES_00 -2.60, USER_IN_WHITELIST -100.00)
X-ECN Telecoms-MailScanner-From: [EMAIL PROTECTED]
X-Spam-Status: No


On Sun, 2008-01-20 at 22:57 -0800, David wrote:
> Hi,
> 
> I am using database files to define SIP buddies, extensions and so on.
> 
> I checked there and the Proxy is defined with "nat=no" and "type=peer". 
> Should I replace the "nat=no" to "nat=never"?
> 
> When I type "sip show peer WS6500" or "sip show peers", I get no results:
> vms*CLI> sip show peers
> Name/username              Host            Dyn Nat ACL Port     Status
> 0 sip peers [0 online , 0 offline]
> vms*CLI> sip show peer WS6500
> Peer WS6500 not found.
> 
> Is it related to the fact that the peers are stored in the database or is 
> that a problem?

I don't know much about realtime.

Try this patch:

Index: corelib/udptl.c
===================================================================
--- corelib/udptl.c     (revision 4317)
+++ corelib/udptl.c     (working copy)
@@ -703,6 +703,7 @@
 {
     int res;
     int actions;
+    struct sockaddr_in original_dest;
     struct sockaddr_in sin;
     socklen_t len;
     char iabuf[INET_ADDRSTRLEN];
@@ -710,6 +711,8 @@
     static struct opbx_frame null_frame = { OPBX_FRAME_NULL, };
 
     len = sizeof(sin);
+
+    memcpy(&original_dest, udp_socket_get_them(udptl->udptl_sock_info),
sizeof(original_dest));
     
     /* Cache where the header will go */
     res = udp_socket_recvfrom(udptl->udptl_sock_info,
@@ -748,7 +751,9 @@
 #if 0
     printf("Got UDPTL packet from %s:%d (len %d)\n",
opbx_inet_ntoa(iabuf, sizeof(iabuf), sin.sin_addr), ntohs(sin.sin_port),
res);
 #endif
-    udptl_rx_packet(udptl, udptl->rawdata + OPBX_FRIENDLY_OFFSET, res);
+    /* If it wasn't a valid UDPTL packet, restore the original IP:port
*/
+    if (udptl_rx_packet(udptl, udptl->rawdata + OPBX_FRIENDLY_OFFSET,
res) < 0)
+        udp_socket_set_them(udptl->udptl_sock_info, &original_dest);
 
     return &udptl->f[0];
 }


Damjan

> Thanks,
> 
> David
> 
> ----- Original Message ----
> From: Damjan Jovanovic <[EMAIL PROTECTED]>
> To: Users Mailing List - Non-Commercial Discussion 
> <[email protected]>
> Sent: Saturday, January 19, 2008 6:37:40 PM
> Subject: Re: [Callweaver-users] T.38 RTP Problem
> 
> 
> X-ECN Telecoms-MailScanner-Information: Contact ECN Telecoms
> X-ECN Telecoms-MailScanner: Found to be clean
> X-ECN Telecoms-MailScanner-SpamCheck: not spam, SpamAssassin (not
>  cached,
>     score=-103.1, required 6, autolearn=not spam, ALL_TRUSTED -1.80,
>     AWL 1.30, BAYES_00 -2.60, USER_IN_WHITELIST -100.00)
> X-ECN Telecoms-MailScanner-From: [EMAIL PROTECTED]
> X-Spam-Status: No
> 
> 
> On Fri, 2008-01-18 at 01:59 -0800, David wrote:
> > Hi Damjan,
> > 
> > 
> > 
> > Thank you for your response.
> > 
> > 
> > 
> > To answer your questions:
> > 
> > [DJ]: 
> > Do you Answer() and then SipT38SwitchOver(), or just call RxFAX()?
>  Try
> > to just call RxFAX(), or at least Wait() a bit between Answer() and
>  SipT38SwitchOver().
> > 
> > 
> > 
> > [DU]: This is the call flow used. It works well in other scenarios. I
>  also need to point out that incoming calls from the same gateway to
>  other SIP devices, supporting T.38 are going through without any problem:
> > 
> > id    |    context    |    exten    |    priority    |    app        
>     |    appdata
> > 
> >
>  
> -------------------------------------------------------------------------------------------------------------------
> > 
> > 520    |    fax        |    T38      |    1            |    Set      
>       |    T38udptlsupport=yes
> > 
> > 536    |    fax        |    T38      |    2            |    Set      
>       |    SIP_CODEC=g729
> > 
> > 522    |    fax        |    T38      |    3            |    Answer  
>     |    
> > 
> > 534    |    fax        |    T38      |    4            |    Wait    
>       |    1
> > 
> > 521    |    fax        |    T38      |    5            |  
>   SipT38SwitchOver    |    
> > 
> > 523    |    fax        |    T38      |    6            |    RxFAX    
>    |    ${fax_filepath}/${UNIQUEID}.tif
> > 
> > 524    |    fax        |    T38      |    7            |    Hangup  
>     |    
> > 
> > 535    |    fax        |    T38      |    22          |    Wait      
>     |    1
> > 
> > 
> >
>  
> -------------------------------------------------------------------------------------------------------------------------------
> > [DJ]: You say the RTP port is changed, but don't you mean the T.38
>  port is
> > changed?
> > 
> > 
> > 
> > 
> > [DU]: Yes. Initially, G.729 RTP packets are sent to remote port 4290.
>  After the reINVITE, CW is asked to send the T.38 packets to port 4292
>  and it doe it only for the first 3 packets.
> > 
> > 
> >
>  
> -------------------------------------------------------------------------------------------------------------------------------
> > 
> > [DJ]: Do you have nat=yes and/or a NAT?
> > 
> > 
> > 
> > [DU]: No. Both the gateway and the CW have fixed public IP addresses
>  without any NAT or anything of this sort.
> > 
> 
> Do "sip show peer X" and make sure you get "Nat: no", otherwise set
> "nat=never" for that peer (if not globally) then restart callweaver and
> try again.
> 
> >
>  
> -------------------------------------------------------------------------------------------------------------------------------
> > 
> > [DJ]: Does anything happen between when callweaver sends the 3
>  correct  packets
> > and when it starts to send the incorrect ones, like a SIP/RTP/T.38
> > packet from the other side?
> > 
> > 
> > 
> > [DU]: No signaling is sent beyond this point (until the call is
>  released, of course), but a few G.729 RTP packets still arrive from port
>  4290 (the initial port used) because the remote gateway requires a few
>  more T.38 packets in order to start responding in T.38.
> > 
> 
> Callweaver uses the same port for RTP and T.38.
> 
> My understanding of the code in chan_sip.c and udptl.c is that when a
> T.38 session is established, opbx_udptl_read() is called whether you
>  get
> a T.38 or an RTP packet on the socket. Now that function calls
> udp_socket_recvfrom(), which, in certain cases (NAT), unconditionally
> overwrites the IP:port to send packets to (info->them in the code) with
> the source IP:port of the newly received packet.
> 
> So what I think happens is this: Callweaver opens port X for RTP and
>  the
> other side opens port Y. While they send audio to each other,
>  everything
> is okay, because the destination port for X keeps being modified to Y.
> But when the T.38 session is established, the other side opens a port
>  Z,
> and the destination port for X is initially set to Z. Callweaver
> correctly transmits 3 copies of the first T.38 message (no-signal) from
> X to Z, but as soon as any RTP packet from Y comes into X, it modifies
> the destination to Y instead of Z. Now if any T.38 came from Z it would
> modify it back, but since Z first waits for v21-preamble + DIS +
> no-signal from us before sending us anything, that never happens, and
> we, incorrectly, keep sending to Y.
> 
> Callweaver should, in my opinion, completely ignore all RTP packets
> during a T.38 session. At present, they are dropped, but their IP:port
> modify our T.38 destination IP:port to the wrong thing. If you get this
> working with nat=never, I'll work on a patch to get it fixed for
> nat=yes.
> 
> If I'm wrong about all this, make a bug report and attach both a
>  tcpdump
> and a full debug log (uncomment the "full=..." line in logger.conf and
> restart callweaver, then do "set debug 10", "set verbose 10", "rtp
> debug" and "udptl debug" before the test).
> 
> >
>  
> -------------------------------------------------------------------------------------------------------------------------------
> > 
> > [DJ]: A tcpdump would also help.
> > 
> > 
> > 
> > [DU]: I wouldn't like to bother all the list with a large dump file.
>  These are examples (I change the remote and local IP address to
>  XX.XX.XX.XX and YY.YY.YY.YY respectively) of the packets sent from the CW
>  after the reINVITE OK and ACK:
> > Packet 127 (128 and 129 are the same):
> > Internet Protocol, Src: YY.YY.YY.YY (YY.YY.YY.YY), Dst: XX.XX.XX.XX
>  (XX.XX.XX.XX)
> >     Version: 4
> >     Header length: 20 bytes
> >     Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN:
>  0x00)
> >         0000 00.. = Differentiated Services Codepoint: Default (0x00)
> >         .... ..0. = ECN-Capable Transport (ECT): 0
> >         .... ...0 = ECN-CE: 0
> >     Total Length: 34
> >     Identification: 0x0000 (0)
> >     Flags: 0x04 (Don't Fragment)
> >         0... = Reserved bit: Not set
> >         .1.. = Don't fragment: Set
> >         ..0. = More fragments: Not set
> >     Fragment offset: 0
> >     Time to live: 64
> >     Protocol: UDP (0x11)
> >     Header checksum: 0x5c21 [correct]
> >         [Good: True]
> >         [Bad : False]
> >     Source: YY.YY.YY.YY (YY.YY.YY.YY)
> >     Destination: XX.XX.XX.XX (XX.XX.XX.XX)
> > User Datagram Protocol, Src Port: 12792 (12792), Dst Port: 4292
>  (4292)
> >     Source port: 12792 (12792)
> >     Destination port: 4292 (4292)
> >     Length: 14
> >     Checksum: 0xdd6b [correct]
> > ITU-T Recommendation T.38
> >     [Stream setup by H245 (frame 122)]
> >         [Stream frame: 122]
> >         [Stream Method: H245]
> >     UDPTLPacket
> >         Sequence number: 0
> >         IFPPacket
> >             Type of msg: t30-indicator (0)
> >                 T30 indicator: no-signal (0)
> >         Error recovery: secondary-ifp-packets (0)
> >             Secondary IFPPackets
> > 
> > Packet 142 (after a few G.729 RTP packets were received from port
>  4290. Packets 143 and 144 are identical):
> > Internet Protocol, Src: YY.YY.YY.YY (YY.YY.YY.YY), Dst: XX.XX.XX.XX
>  (XX.XX.XX.XX)
> >     Version: 4
> >     Header length: 20 bytes
> >     Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN:
>  0x00)
> >         0000 00.. = Differentiated Services Codepoint: Default (0x00)
> >         .... ..0. = ECN-Capable Transport (ECT): 0
> >         .... ...0 = ECN-CE: 0
> >     Total Length: 34
> >     Identification: 0x0000 (0)
> >     Flags: 0x04 (Don't Fragment)
> >         0... = Reserved bit: Not set
> >         .1.. = Don't fragment: Set
> >         ..0. = More fragments: Not set
> >     Fragment offset: 0
> >     Time to live: 64
> >     Protocol: UDP (0x11)
> >     Header checksum: 0x5c21 [correct]
> >         [Good: True]
> >         [Bad : False]
> >     Source: YY.YY.YY.YY (YY.YY.YY.YY)
> >     Destination: XX.XX.XX.XX (XX.XX.XX.XX)
> > User Datagram Protocol, Src Port: 12792 (12792), Dst Port: 4290
>  (4290)
> >     Source port: 12792 (12792)
> >     Destination port: 4290 (4290)
> >     Length: 14
> >     Checksum: 0xdd68 [correct]
> > ITU-T Recommendation T.38
> >     [Stream setup by H245 (frame 122)]
> >         [Stream frame: 122]
> >         [Stream Method: H245]
> >     UDPTLPacket
> >         Sequence number: 1
> >         IFPPacket
> >             Type of msg: t30-indicator (0)
> >                 T30 indicator: ced (2)
> >         Error recovery: secondary-ifp-packets (0)
> >             Secondary IFPPackets
> > 
> > 
> > I hope that this all helps and I thank you for your assistance.
> > 
> > David
> > 
> 
> 
> Damjan
> 
> 
> _______________________________________________
> Callweaver-users mailing list
> [email protected]
> http://lists.callweaver.org/mailman/listinfo/callweaver-users
> 
> 
> 
> 
> 
>       
> ____________________________________________________________________________________
> Looking for last minute shopping deals?  
> Find them fast with Yahoo! Search.  
> http://tools.search.yahoo.com/newsearch/category.php?category=shopping
> _______________________________________________
> Callweaver-users mailing list
> [email protected]
> http://lists.callweaver.org/mailman/listinfo/callweaver-users

_______________________________________________
Callweaver-users mailing list
[email protected]
http://lists.callweaver.org/mailman/listinfo/callweaver-users

Reply via email to