From be846e07ec97fa98c92767157072b7df34cf4eae Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sat, 15 Nov 2008 17:44:27 +0000 Subject: [PATCH] add params to use sip callid as uuid on inbound calls and uuid as sip callid on outbound calls git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10418 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- conf/sip_profiles/internal.xml | 4 +++ src/mod/endpoints/mod_sofia/mod_sofia.h | 4 ++- src/mod/endpoints/mod_sofia/sofia.c | 34 +++++++++++++++++++++++- src/mod/endpoints/mod_sofia/sofia_glue.c | 4 ++- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/conf/sip_profiles/internal.xml b/conf/sip_profiles/internal.xml index e742a2189c..7d64b6ddc7 100644 --- a/conf/sip_profiles/internal.xml +++ b/conf/sip_profiles/internal.xml @@ -177,6 +177,10 @@ --> + + + + diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index a83ab6b048..5950f7f6a1 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -164,7 +164,9 @@ typedef enum { PFLAG_FUNNY_STUN = (1 << 26), PFLAG_STUN_ENABLED = (1 << 27), PFLAG_STUN_AUTO_DISABLE = (1 << 28), - PFLAG_3PCC_PROXY = (1 << 29) + PFLAG_3PCC_PROXY = (1 << 29), + PFLAG_CALLID_AS_UUID = (1 << 30), + PFLAG_UUID_AS_CALLID = (1 << 31) } PFLAGS; typedef enum { diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 425161b771..dc66dfdf5b 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1075,6 +1075,18 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile) } else { switch_clear_flag(profile, TFLAG_PROXY_MEDIA); } + } else if (!strcasecmp(var, "inbound-use-callid-as-uuid")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_CALLID_AS_UUID; + } else { + profile->pflags &= ~PFLAG_CALLID_AS_UUID; + } + } else if (!strcasecmp(var, "outbound-use-uuid-as-callid")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_UUID_AS_CALLID; + } else { + profile->pflags &= ~PFLAG_UUID_AS_CALLID; + } } else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact")) { if (switch_true(val)) { profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; @@ -1474,6 +1486,18 @@ switch_status_t config_sofia(int reload, char *profile_name) switch_set_flag(profile, TFLAG_LATE_NEGOTIATION); } else if (!strcasecmp(var, "inbound-proxy-media") && switch_true(val)) { switch_set_flag(profile, TFLAG_PROXY_MEDIA); + } else if (!strcasecmp(var, "inbound-use-callid-as-uuid")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_CALLID_AS_UUID; + } else { + profile->pflags &= ~PFLAG_CALLID_AS_UUID; + } + } else if (!strcasecmp(var, "outbound-use-uuid-as-callid")) { + if (switch_true(val)) { + profile->pflags |= PFLAG_UUID_AS_CALLID; + } else { + profile->pflags &= ~PFLAG_UUID_AS_CALLID; + } } else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact") && switch_true(val)) { profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; } else if (!strcasecmp(var, "aggressive-nat-detection") && switch_true(val)) { @@ -3497,7 +3521,15 @@ void sofia_handle_sip_i_invite(nua_t *nua, sofia_profile_t *profile, nua_handle_ return; } - if (!sofia_endpoint_interface || !(session = switch_core_session_request(sofia_endpoint_interface, NULL))) { + if (sofia_endpoint_interface) { + if (tech_pvt->profile->pflags & PFLAG_CALLID_AS_UUID) { + session = switch_core_session_request_uuid(sofia_endpoint_interface, NULL, sip->sip_call_id->i_id); + } else { + session = switch_core_session_request(sofia_endpoint_interface, NULL); + } + } + + if (!session) { nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END()); return; } diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 38f7b74e45..2645e02ec3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -1189,7 +1189,9 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session) from_str = switch_core_session_sprintf(session, "\"%s\" <%s>", tech_pvt->caller_profile->caller_id_name, use_from_str); if (!(call_id = switch_channel_get_variable(channel, "sip_outgoing_call_id"))) { - call_id = switch_core_session_get_uuid(session); + if (tech_pvt->profile->pflags & PFLAG_UUID_AS_CALLID) { + call_id = switch_core_session_get_uuid(session); + } } tech_pvt->nh = nua_handle(tech_pvt->profile->nua, NULL,