diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.h b/src/mod/endpoints/mod_sofia/mod_sofia.h index 0faa55baa1..1860c08290 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.h +++ b/src/mod/endpoints/mod_sofia/mod_sofia.h @@ -454,7 +454,9 @@ struct sofia_gateway { char *auth_username; char *register_password; char *register_from; - char *options_uri; + char *options_from_uri; + char *options_to_uri; + char *options_user_agent; char *register_contact; char *extension; char *real_extension; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 26a47e49e7..500fc6cace 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -2329,6 +2329,7 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag) *caller_id_in_from = "false", *extension = NULL, *proxy = NULL, + *options_user_agent = NULL, *context = profile->context, *expire_seconds = "3600", *retry_seconds = "30", @@ -2434,6 +2435,8 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag) ping_max = atoi(val); } else if (!strcmp(var, "ping-min")) { ping_min = atoi(val); + } else if (!strcmp(var, "ping-user-agent")) { + options_user_agent = val; } else if (!strcmp(var, "proxy")) { proxy = val; } else if (!strcmp(var, "context")) { @@ -2575,6 +2578,7 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag) gateway->auth_username = switch_core_strdup(gateway->pool, auth_username); gateway->register_password = switch_core_strdup(gateway->pool, password); gateway->distinct_to = distinct_to; + gateway->options_user_agent = options_user_agent; if (switch_true(caller_id_in_from)) { sofia_set_flag(gateway, REG_FLAG_CALLERID); @@ -2612,8 +2616,10 @@ static void parse_gateways(sofia_profile_t *profile, switch_xml_t gateways_tag) gateway->ping_max = ping_max; gateway->ping_min = ping_min; gateway->ping = switch_epoch_time_now(NULL) + ping_freq; - gateway->options_uri = switch_core_sprintf(gateway->pool, "", - !zstr(from_domain) ? from_domain : proxy, register_transport); + gateway->options_to_uri = switch_core_sprintf(gateway->pool, "", + !zstr(from_domain) ? from_domain : proxy, register_transport); + gateway->options_from_uri = switch_core_sprintf(gateway->pool, "", + profile->extrtpip ? profile->extrtpip : profile->sipip, register_transport); } else { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ERROR: invalid ping!\n"); } diff --git a/src/mod/endpoints/mod_sofia/sofia_reg.c b/src/mod/endpoints/mod_sofia/sofia_reg.c index a768cd6b90..0a8b5e89e4 100644 --- a/src/mod/endpoints/mod_sofia/sofia_reg.c +++ b/src/mod/endpoints/mod_sofia/sofia_reg.c @@ -354,8 +354,9 @@ void sofia_reg_check_gateway(sofia_profile_t *profile, time_t now) nua_options(nh, TAG_IF(gateway_ptr->register_sticky_proxy, NUTAG_PROXY(gateway_ptr->register_sticky_proxy)), TAG_IF(user_via, SIPTAG_VIA_STR(user_via)), - SIPTAG_TO_STR(gateway_ptr->options_uri), SIPTAG_FROM_STR(profile->url), - SIPTAG_CONTACT_STR(gateway_ptr->register_contact), TAG_END()); + SIPTAG_TO_STR(gateway_ptr->options_to_uri), SIPTAG_FROM_STR(gateway_ptr->options_from_uri), + TAG_IF(gateway_ptr->options_user_agent, SIPTAG_USER_AGENT_STR(gateway_ptr->options_user_agent)), + TAG_END()); switch_safe_free(user_via); user_via = NULL;