[Freeswitch-dev] mod_sofia hold/unhold issue correction problems

Dmitriy Borisov borik.internet at gmail.com
Mon Jul 24 09:18:27 UTC 2017


Hello!

There are some issue (or not???) in mod_sofia module.

You can reproduce this issue by holding call via 0.0.0.0 SDP:

v=0

o=OneXS 99765105 2 IN IP4 87.237.24.14

s=-

c=IN IP4 0.0.0.0

t=0 0

m=audio 49760 RTP/AVP 8 101

a=fmtp:101 0-15

a=rtpmap:101 telephone-event/8000

a=inactive


and unholding via invite without SDP.


In version 7a77e0b (branch v1.6) place of errorneus (as I think) code is
near:

 7641             if (switch_channel_var_true(channel, "sip_unhold_nosdp"))
{
 7642                 switch_core_media_gen_local_sdp(session,
SDP_TYPE_RESPONSE, NULL, 0, "sendrecv",
 7643
zstr(tech_pvt->mparams.local_sdp_str) || !switch_channel_test_flag(channel,
CF_PROXY_MODE));
 7644             } else {
 7645                 switch_core_media_gen_local_sdp(session,
SDP_TYPE_RESPONSE, NULL, 0, NULL,
 7646
zstr(tech_pvt->mparams.local_sdp_str) || !switch_channel_test_flag(channel,
CF_PROXY_MODE));
 7647             }
 7648
 7649             if (zstr(tech_pvt->mparams.local_sdp_str)) {
 7650
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING,
"Cannot find a SDP\n");
 7651                 switch_channel_hangup(channel,
SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
 7652             } else {
 7653                 if (sofia_use_soa(tech_pvt)) {
 7654                 *switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
SWITCH_LOG_WARNING, tech_pvt->mparams.local_sdp_str); // This is my add*
 7655                     nua_respond(tech_pvt->nh, SIP_200_OK,
 7656
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
 7657
SOATAG_USER_SDP_STR(tech_pvt->mparams.local_sdp_str),
 7658                                 SOATAG_REUSE_REJECTED(1),
 7659                                 SOATAG_AUDIO_AUX("cn
telephone-event"),
 7660                                 TAG_IF(sofia_test_pflag(profile,
PFLAG_DISABLE_100REL), NUTAG_INCLUDE_EXTRA_SDP(1)), TAG_END());
 7661                 } else {
 7662                     nua_respond(tech_pvt->nh, SIP_200_OK,
 7663                                 NUTAG_MEDIA_ENABLE(0),
 7664
SIPTAG_CONTACT_STR(tech_pvt->reply_contact),
 7665
SIPTAG_CONTENT_TYPE_STR("application/sdp"),
SIPTAG_PAYLOAD_STR(tech_pvt->mparams.local_sdp_str), TAG_END());
 7666                 }
 7667             }


In described situation code flow go throw line 7654 and post to nua_respond
correct SDP (with correct c=IN IP4 re.al.ip.addr and a=sendrecv):

2017-07-24 11:00:54.252668 [WARNING] sofia.c:7654 v=0
o=Sipean 1500875192 1500875195 IN IP4 x.x.x.x:
s=Sipean
c=IN IP4 x.x.x.x
t=0 0
m=audio 11642 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv


sofia library sends SDP:

v=0

o=Sipean 1500875192 1500875195 IN IP4 x.x.x.x

s=Sipean

c=IN IP4 x.x.x.x

t=0 0

m=audio 11642 RTP/AVP 8 101

a=rtpmap:8 PCMA/8000

a=rtpmap:101 telephone-event/8000

a=fmtp:101 0-16

a=ptime:20


On SIP client side call in unholded state, but at FreeSWITCH side it is
still in HOLDED state


I have experimented with nua_respond, but maximum result is a correct call
state on SIP client side (holded), but not unholding the line. Where should
I search for errors? Or this scenario can't work correct?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeswitch.org/pipermail/freeswitch-dev/attachments/20170724/5e9ffa7e/attachment.html>


More information about the FreeSWITCH-dev mailing list