From 500a6c9ad36dc52abffa5f0302279c0869173366 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Fri, 20 Apr 2007 16:05:37 +0000 Subject: [PATCH] change flow and name of new paramater git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4987 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/mod/endpoints/mod_sofia/mod_sofia.c | 3 +-- src/mod/endpoints/mod_sofia/mod_sofia.h | 2 +- src/mod/endpoints/mod_sofia/sofia.c | 16 ++++++++++++---- src/mod/endpoints/mod_sofia/sofia_reg.c | 14 ++++++++++++-- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index c893a0f98f..8e9c9260e0 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -955,7 +955,6 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session char *gw; outbound_reg_t *gateway_ptr; - if (!(gw = strchr(profile_name, '/'))) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Invalid URL\n"); switch_core_session_destroy(&nsession); @@ -982,7 +981,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session } profile = gateway_ptr->profile; - if (gateway_ptr->force_fromuser) { + if (!switch_test_flag(gateway_ptr, REG_FLAG_CALLERID)) { tech_pvt->gateway_from_str = switch_core_session_strdup(nsession, gateway_ptr->register_from); } if (!strchr(dest, '@')) { diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 267df8a573..c8454e13d3 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -157,6 +157,7 @@ extern struct mod_sofia_globals mod_sofia_globals; typedef enum { REG_FLAG_AUTHED = (1 << 0), + REG_FLAG_CALLERID = (1 << 1) } reg_flags_t; typedef enum { @@ -178,7 +179,6 @@ struct outbound_reg { char *register_realm; char *register_username; char *register_password; - switch_bool_t force_fromuser; char *register_from; char *register_contact; char *register_to; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 8c3a1ed6e0..585656c7b4 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -680,7 +680,13 @@ switch_status_t config_sofia(int reload) if ((gateway = switch_core_alloc(profile->pool, sizeof(*gateway)))) { char *register_str = "true", *scheme = "Digest", *realm = NULL, - *username = NULL, *password = NULL, *force_fromuser = "false", *extension = NULL, *proxy = NULL, *context = "default", *expire_seconds = "3600"; + *username = NULL, + *password = NULL, + *caller_id_in_from = "false", + *extension = NULL, + *proxy = NULL, + *context = "default", + *expire_seconds = "3600"; gateway->pool = profile->pool; gateway->profile = profile; @@ -702,8 +708,8 @@ switch_status_t config_sofia(int reload) username = val; } else if (!strcmp(var, "password")) { password = val; - } else if (!strcmp(var, "force-fromuser")) { - force_fromuser = val; + } else if (!strcmp(var, "caller-id-in-from")) { + caller_id_in_from = val; } else if (!strcmp(var, "extension")) { extension = val; } else if (!strcmp(var, "proxy")) { @@ -747,7 +753,9 @@ switch_status_t config_sofia(int reload) gateway->register_realm = switch_core_strdup(gateway->pool, realm); gateway->register_username = switch_core_strdup(gateway->pool, username); gateway->register_password = switch_core_strdup(gateway->pool, password); - gateway->force_fromuser = switch_true(force_fromuser); + if (switch_true(caller_id_in_from)) { + switch_set_flag(gateway, REG_FLAG_CALLERID); + } gateway->register_from = switch_core_sprintf(gateway->pool, "sip:%s@%s", username, realm); gateway->register_contact = switch_core_sprintf(gateway->pool, "sip:%s@%s:%d", extension, profile->sipip, profile->sip_port); diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index 02c34e452f..76c23b9cb3 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -636,12 +636,12 @@ void sofia_reg_handle_sip_r_challenge(int status, if (!gateway) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "No Match for Scheme [%s] Realm [%s]\n", scheme, qrealm); - return; + goto cancel; } switch_safe_free(duprealm); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Memory Error!\n"); - return; + goto cancel; } } @@ -656,6 +656,16 @@ void sofia_reg_handle_sip_r_challenge(int status, nua_authenticate(nh, SIPTAG_EXPIRES_STR(gateway->expires_str), NUTAG_AUTH(authentication), TAG_END()); + return; + + cancel: + if (session) { + switch_channel_t *channel = switch_core_session_get_channel(session); + switch_channel_hangup(channel, SWITCH_CAUSE_MANDATORY_IE_MISSING); + } else { + nua_cancel(nh, TAG_END()); + } + } auth_res_t parse_auth(sofia_profile_t *profile, sip_authorization_t const *authorization, const char *regstr, char *np, size_t nplen)