]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
conditionally allow intercept of replaced call-id when processing replaces header
authorLuis Azedo <luis@2600hz.com>
Wed, 22 Apr 2015 19:11:12 +0000 (20:11 +0100)
committerLuis Azedo <luis@2600hz.com>
Wed, 22 Apr 2015 19:11:12 +0000 (20:11 +0100)
without this change one leg calls inhaled could not be picked because there is no bridge_uuid.

FS-7463 #resolve

src/mod/endpoints/mod_sofia/sofia.c

index f8ccbd6f675397b7a95866d889a0ea1e4671cca9..9ce04111e24f0e4dd3d1d2390c76bac28c6712a4 100644 (file)
@@ -9885,7 +9885,14 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
                                                                                                                                                                                   "%sanswer,sofia_sla:%s", codec_str, b_private->uuid);
                                        }
                                } else {
-                                       if (!zstr(bridge_uuid)) {
+                                       char* pickup = NULL;
+                                       if(sip->sip_replaces->rq_url->url_params && sip->sip_replaces->rp_call_id) {
+                                               pickup = switch_find_parameter(sip->sip_replaces->rq_url->url_params,"pickup", switch_core_session_get_pool(session));
+                                       } 
+                                       if(pickup) {
+                                               switch_channel_mark_hold(b_channel, SWITCH_FALSE);
+                                               tech_pvt->caller_profile->destination_number = switch_core_sprintf(tech_pvt->caller_profile->pool, "answer,intercept:%s", sip->sip_replaces->rp_call_id);
+                                       } else if (!zstr(bridge_uuid)) {
                                                switch_channel_mark_hold(b_channel, SWITCH_FALSE);
                                                tech_pvt->caller_profile->destination_number = switch_core_sprintf(tech_pvt->caller_profile->pool, "answer,intercept:%s", bridge_uuid);
                                        } else {