From b33563138b0953693dbe0d32a439c533ea8b4316 Mon Sep 17 00:00:00 2001
From: Luis Azedo <luis@2600hz.com>
Date: Wed, 22 Apr 2015 20:11:12 +0100
Subject: [PATCH] conditionally allow intercept of replaced call-id when
 processing replaces header

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 | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index f8ccbd6f67..9ce04111e2 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -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 {