I'm terminating various destination by various carriers. After migrating one customer to Freeswitch, we observed problems for the termination of a specific route for a specific carrier. I tried to examine the problem in detail and I think it's related to problems regarding the ptime negotiation. I think Freeswitch doesn't breach any RFC, but I'm not sure, if the behaviour is optimal.
The SDP of the Caller INVITE-Message at time 1160,056 in the attached trace doesn't include any ptime setting. Nevertheless Freeswitch includes a ptime=20 media attribute in the forwarded INVITE message at time 1160,065. The ringing SDP sent by the callee at time 1161,948 again doesn't include any ptime setting. Nevertheless, Freeswitch includes in the Session Progress SDP (at time 1164,240) a ptime=20 media atrribute. Why try Freeswitch to force the usage of ptime=20 for the communication?
The OK SDP at time 1164,240 again doesn't contain a ptime media attribute. Nevertheless, the Freeswitch add a ptime=20 media attribute forwarded to the caller at 1164,256.
It seems that the callee is sending in the following with a frame size of 60 bytes - it never claimed to use ptime=20 and according the RFC 3264 it SHOULD send with ptime=20 because of the received INVITE message specification, but it DON'T HAVE to send with ptime=20.
At next Freeswitch tries to fix "the issue". In the logfile I found:
e686b430-5d2d-488b-8b58-0fca1965eea7 2010-10-07 15:20:25.673206 [WARNING] mod_sofia.c:1033 We were told to use ptime 20 but what they meant to say was 60
This issue has so far been identified to happen on the following broken platforms/devices:
Linksys/Sipura aka Cisco
ShoreTel
Sonus/L3
We will try to fix it but some of the devices on this list are so broken,
who knows what will happen..
This log message isn't correct. The callee never specified anything about the usage of a specific ptime. Furthermore, according RFC 3264 the ptime doesn't specify the frame size, which will be used to send packages by the side, which specify it in the SDP. In the RFC 3264 is written:
If the ptime attribute is present for a stream, it indicates the
desired packetization interval that the offerer would like to
receive.
...
There is now requirement that the packetization interval be the same in each direction for a particular stream.
IMHO that means, that it isn't possible in principle that a device is lying about it's ptime usage, because it only specify by the media attribute the packetization it likes to receive and doesn't specify the packetization it will use itself.
For fixing "the problem" Freeswitch sends a re-INVITE message at 1164,777. This message includes in the message header "X-Broken-PTIME: Adv=20; Sent=60", and ptime = 60 media attribute.
The callee fails to process this re-INVITE and drops the call.
I made the trace after I set the newly introduced parameter "passthru_ptime_mismatch=true" (it's documented in the Wiki since yesterday). Does it make sense, that Freeswitch tries to fix any ptime setting if this variable is set to true?
If someone wants to examine this issue more detailed, I can provide the Wireshark-cap file of the call and the debug output of Freeswitch.
Thank you in advance
Jan
--
Jan Riedinger Phone : +49-30-39 73 19 66
Dipl.-Inf. | Managing Director Fax : +49-30-39 73 19 64
E-Mail: riedinger@sns.eu
SNS Consult GmbH ICQ : 163-237-041
Südwestkorso 49a MSN : jan@sns-consult.de
14197 Berlin GERMANY Skype : Jan Riedinger
AG Charlottenburg - HRB 71973