David Gilbert wrote:
In short, the problem is that level3 abuses the RFC by sending from a port and expecting you to reply on another port (specified in the Contact: header). This goes almost right except for level3's equally literal read of the Contact header that SER sends.
Using different ports is valid. You have to differ between replys and new transactions.
1. The replies (180, 200) must be sent to the port indicated in the Via header. (except there is a rport parameter in the Via header from the gateway). Thus, if the level3 gateway is "un-symmetrical" make sure to no call force_rport for messages received from the level3 gateway.
2. Requests by the ATA sent to the gateway, must be sent to the IP:port indicated in the Contact: header of the INVITE. Thus, make sure to not call fix_nated_contact for requests received from the level3 gateway.
3. use ngrep -d any ... or tcpdump -i any ... to see also the packets on the loopback device (between ser and asterisk)
regards klaus
Packet Sip Command Contact ====== =========== ======= level3:38999 ser:5070 INVITE sip:+1416...@<level3 ip>:5060 ser:5070 level3:38999 100 Trying sip:+1866...@<ser ip> (ser invites asterisk, not in dump) asterisk:5060 ata:5060 INVITE sip:+1416...@<asterisk ip> ata:5060 asterisk:5060 100 Trying None ata:5060 asterisk:5060 180 Ringing None (asterisk relays 180 to ser, not in dump) ser:5070 level3:38999 180 Ringing sip:+1866...@<ser ip> ata:5060 asterisk:5060 200 OK sip:604...@<ata ip>:5060 asterisk:5060 ata:5060 ACK sip:+1416...@<asterisk ip> (asterisk relays 200 OK to ser, not in dump) ser:5070 level3:5060 200 OK sip:+1866...@<ser ip> level3:5060 ser:5060 !?! ACK sip:+1866...@<level3 ip>:5060
Now... the problem is that each time ser repsonds, the contact line should be appended with ":5070" and it is not. Therefore, being the literal people they are, level3 repsonds to port 5060 with their ACK. This means that the ACK goes directly to asterisk rather than to SER and it means that when the call ends, the BYE notification from asterisk goes directly to the wrong port at level3.
Dave.
Serusers mailing list serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers