提交 be846e07 authored 作者: Anthony Minessale's avatar Anthony Minessale

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
上级 a36eccb8
...@@ -177,6 +177,10 @@ ...@@ -177,6 +177,10 @@
--> -->
<param name="challenge-realm" value="auto_from"/> <param name="challenge-realm" value="auto_from"/>
<!--<param name="disable-rtp-auto-adjust" value="true"/>--> <!--<param name="disable-rtp-auto-adjust" value="true"/>-->
<!-- on inbound calls make the uuid of the session equal to the sip call id of that call -->
<!--<param name="inbound-use-callid-as-uuid" value="true"/>-->
<!-- on outbound calls set the callid to match the uuid of the session -->
<!--<param name="outbound-use-uuid-as-callid" value="true"/>-->
</settings> </settings>
</profile> </profile>
...@@ -164,7 +164,9 @@ typedef enum { ...@@ -164,7 +164,9 @@ typedef enum {
PFLAG_FUNNY_STUN = (1 << 26), PFLAG_FUNNY_STUN = (1 << 26),
PFLAG_STUN_ENABLED = (1 << 27), PFLAG_STUN_ENABLED = (1 << 27),
PFLAG_STUN_AUTO_DISABLE = (1 << 28), 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; } PFLAGS;
typedef enum { typedef enum {
......
...@@ -1075,6 +1075,18 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile) ...@@ -1075,6 +1075,18 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
} else { } else {
switch_clear_flag(profile, TFLAG_PROXY_MEDIA); 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")) { } else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact")) {
if (switch_true(val)) { if (switch_true(val)) {
profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT;
...@@ -1474,6 +1486,18 @@ switch_status_t config_sofia(int reload, char *profile_name) ...@@ -1474,6 +1486,18 @@ switch_status_t config_sofia(int reload, char *profile_name)
switch_set_flag(profile, TFLAG_LATE_NEGOTIATION); switch_set_flag(profile, TFLAG_LATE_NEGOTIATION);
} else if (!strcasecmp(var, "inbound-proxy-media") && switch_true(val)) { } else if (!strcasecmp(var, "inbound-proxy-media") && switch_true(val)) {
switch_set_flag(profile, TFLAG_PROXY_MEDIA); 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)) { } else if (!strcasecmp(var, "NDLB-received-in-nat-reg-contact") && switch_true(val)) {
profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT; profile->pflags |= PFLAG_RECIEVED_IN_NAT_REG_CONTACT;
} else if (!strcasecmp(var, "aggressive-nat-detection") && switch_true(val)) { } 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_ ...@@ -3497,7 +3521,15 @@ void sofia_handle_sip_i_invite(nua_t *nua, sofia_profile_t *profile, nua_handle_
return; 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()); nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END());
return; return;
} }
......
...@@ -1189,7 +1189,9 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session) ...@@ -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); 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"))) { 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, tech_pvt->nh = nua_handle(tech_pvt->profile->nua, NULL,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论