signalwire / freeswitch

FreeSWITCH is a Software Defined Telecom Stack enabling the digital transformation from proprietary telecom switches to a versatile software implementation that runs on any commodity hardware. From a Raspberry PI to a multi-core server, FreeSWITCH can unlock the telecommunications potential of any device.
https://freeswitch.com/#getting-started
Other
3.35k stars 1.38k forks source link

Cant support transfer PRACK with SDP #2401

Open acleast opened 4 months ago

acleast commented 4 months ago

inbound-bypass-media = true bypass_media=true

  1. Freeswitch receive invite without sdp from caller, and freeswitch transfer this invite.
  2. Callee reply 183 with SDP and 100rel
  3. nua replay prack fail
  4. Freeswitch transfer 183 to caller and receive PRACK with SDP. but freeswitch cant transfer this prack

and where should set sip_wait_for_aleg_ack ?

mjerris commented 4 months ago

100rel is disabled by default. it's use is unstable and not recommended. There are known crashes in 100rel scenarios if enabled.

acleast commented 4 months ago

Caller hope negotiate early media via 183 and prack. So must enable 100rel

NormanMichaelis-Grey commented 3 months ago

Hi

I have no idea if this is related to the issue your are having, but i had the same sort of issue with some interop testing with a Mobile operator in SA they insist on having PRACK enable: The GW to the operator is set to Extension-In-Contact = false enable-100rel=true

then FS makes the contact message: Contact: sip:FREESWITCH@aaa.bbb.ccc.ddd:5060;transport=udp;gw=SBC-01

Our mobile operator was processing the calls fine, but when the mobile device placed a call on hold or similar, the call drop on the mobile device, and the VOIP stayed connected....

I am using an installation of ASTPP, so I edited the source of FS. (freeswitch-1.10.10.-release) endpoints/mod_sofia/sofia.c inside the calls to check if extension_in_contact is set. around Line 4201 in – format = strchr(sipip, ‘:’) ? “sip:gw+%s@[%s]:%d%s%s” : “sip:gw+%s@%s:%d%s%s”; ++ format = strchr(sipip, ‘:’) ? “sip:[%s]:%d%s” : “sip:%s:%d%s”;

Contact: <sip:aaa.bbb.ccc.ddd:5060;transport=udp;gw=SBC-01>

now all calls can be placed on hold by the mobile devices, voip call can be joined to a conference call initiated by the mobile device...

acleast commented 2 months ago

100rel is disabled by default. it's use is unstable and not recommended. There are known crashes in 100rel scenarios if enabled.

I have resolved this issue self. sofia receive 183 with 100real and will send prack, but send fail because of sdp negotiate fail. so we can finish this send transaction. and transfer 183 to caller, when receive PRACK witch SDP, we send PRACK with SDP in mod_sofia.