Author: brian Date: Wed Jun 3 15:49:57 2009 New Revision: 13592 Log: more clean up Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia.c freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h ============================================================================== --- freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h (original) +++ freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/mod_sofia.h Wed Jun 3 15:49:57 2009 @@ -436,8 +436,8 @@ sofia_cid_type_t cid_type; sofia_dtmf_t dtmf_type; int auto_restart; - int sip_port; - int tls_sip_port; + switch_port_t sip_port; + switch_port_t tls_sip_port; int tls_version; char *codec_string; int running; @@ -830,6 +830,8 @@ const char *sofia_glue_transport2str(const sofia_transport_t tp); char * sofia_glue_find_parameter(const char *str, const char *param); +char *sofia_glue_create_via(switch_core_session_t *session, const char *ip, switch_port_t port, sofia_transport_t transport); +char *sofia_glue_create_external_via(switch_core_session_t *session, sofia_profile_t *profile, sofia_transport_t transport); int sofia_glue_check_nat(sofia_profile_t *profile, const char *network_ip); int sofia_glue_transport_has_tls(const sofia_transport_t tp); const char *sofia_glue_get_unknown_header(sip_t const *sip, const char *name); Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia.c Wed Jun 3 15:49:57 2009 @@ -762,13 +762,13 @@ ); if (sofia_test_pflag(profile, PFLAG_AUTO_NAT)) { - if (switch_nat_add_mapping((switch_port_t)profile->sip_port, SWITCH_NAT_UDP) == SWITCH_STATUS_SUCCESS) { + if (switch_nat_add_mapping(profile->sip_port, SWITCH_NAT_UDP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Created UDP nat mapping for %s port %d\n", profile->name, profile->sip_port); } - if (switch_nat_add_mapping((switch_port_t)profile->sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { + if (switch_nat_add_mapping(profile->sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Created TCP nat mapping for %s port %d\n", profile->name, profile->sip_port); } - if(profile->tls_sip_port && switch_nat_add_mapping((switch_port_t)profile->tls_sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { + if(sofia_test_pflag(profile, PFLAG_TLS) && switch_nat_add_mapping(profile->tls_sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Created TCP/TLS nat mapping for %s port %d\n", profile->name, profile->tls_sip_port); } } @@ -953,13 +953,13 @@ } if (sofia_test_pflag(profile, PFLAG_AUTO_NAT)) { - if (switch_nat_del_mapping((switch_port_t)profile->sip_port, SWITCH_NAT_UDP) == SWITCH_STATUS_SUCCESS) { + if (switch_nat_del_mapping(profile->sip_port, SWITCH_NAT_UDP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deleted UDP nat mapping for %s port %d\n", profile->name, profile->sip_port); } - if (switch_nat_del_mapping((switch_port_t)profile->sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { + if (switch_nat_del_mapping(profile->sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deleted TCP nat mapping for %s port %d\n", profile->name, profile->sip_port); } - if(profile->tls_sip_port && switch_nat_del_mapping((switch_port_t)profile->tls_sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { + if(sofia_test_pflag(profile, PFLAG_TLS) && switch_nat_del_mapping(profile->tls_sip_port, SWITCH_NAT_TCP) == SWITCH_STATUS_SUCCESS) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Deleted TCP/TLS nat mapping for %s port %d\n", profile->name, profile->tls_sip_port); } } @@ -4347,6 +4347,7 @@ int network_port = 0; char *is_nat = NULL; char acl_token[512] = ""; + sofia_transport_t transport; profile->ib_calls++; @@ -4488,11 +4489,6 @@ tech_pvt->remote_ip = switch_core_session_strdup(session, network_ip); tech_pvt->remote_port = network_port; - if (sofia_glue_check_nat(profile, tech_pvt->remote_ip)) { - tech_pvt->user_via = switch_core_session_sprintf(session, "SIP/2.0/%s %s;rport", - sofia_glue_transport2str(sofia_glue_url2transport(sip->sip_contact->m_url)), - profile->extsipip); - } channel = tech_pvt->channel = switch_core_session_get_channel(session); @@ -4509,7 +4505,7 @@ if (sip->sip_contact && sip->sip_contact->m_url) { char tmp[35] = ""; - sofia_transport_t transport = sofia_glue_url2transport(sip->sip_contact->m_url); + transport = sofia_glue_url2transport(sip->sip_contact->m_url); const char *ipv6 = strchr(tech_pvt->remote_ip, ':'); tech_pvt->record_route = @@ -4638,7 +4634,6 @@ if (sip->sip_to && sip->sip_to->a_url) { const char *host, *user; int port; - sofia_transport_t transport; url_t *transport_url; if (sip->sip_record_route && sip->sip_record_route->r_url) { @@ -4731,6 +4726,10 @@ } } + if (sofia_glue_check_nat(profile, tech_pvt->remote_ip)) { + tech_pvt->user_via = sofia_glue_create_external_via(session, profile, tech_pvt->transport); + } + if (sip->sip_contact && sip->sip_contact->m_url) { const char *contact_uri = url_set_chanvars(session, sip->sip_contact->m_url, sip_contact); if (!channel_name) { Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c ============================================================================== --- freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c (original) +++ freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_glue.c Wed Jun 3 15:49:57 2009 @@ -817,6 +817,32 @@ } } +char *sofia_glue_create_external_via(switch_core_session_t *session, sofia_profile_t *profile, sofia_transport_t transport) +{ + return sofia_glue_create_via(session, + profile->extsipip, + (sofia_glue_transport_has_tls(transport)) + ? profile->tls_sip_port : profile->sip_port, + transport); +} + +char *sofia_glue_create_via(switch_core_session_t *session, const char *ip, switch_port_t port, sofia_transport_t transport) +{ + if (port && port != 5060) { + if (session) { + return switch_core_session_sprintf(session, "SIP/2.0/%s %s:%d;rport", sofia_glue_transport2str(transport), ip, port); + } else { + return switch_mprintf("SIP/2.0/%s %s:%d;rport", sofia_glue_transport2str(transport), ip, port); + } + } else { + if (session) { + return switch_core_session_sprintf(session, "SIP/2.0/%s %s;rport", sofia_glue_transport2str(transport), ip); + } else { + return switch_mprintf("SIP/2.0/%s %s;rport", sofia_glue_transport2str(transport), ip); + } + } +} + int sofia_glue_check_nat(sofia_profile_t *profile, const char *network_ip) { return (network_ip && @@ -1406,9 +1432,7 @@ } if (sofia_glue_check_nat(tech_pvt->profile, tech_pvt->remote_ip)) { - const char *transport = sofia_glue_transport2str(tech_pvt->transport); - tech_pvt->user_via = switch_core_session_sprintf(session, "SIP/2.0/%s %s;rport", - transport, tech_pvt->profile->extsipip); + tech_pvt->user_via = sofia_glue_create_external_via(session, tech_pvt->profile, tech_pvt->transport); } Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c ============================================================================== --- freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c (original) +++ freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_presence.c Wed Jun 3 15:49:57 2009 @@ -1441,11 +1441,9 @@ contact_str = profile->public_url; break; } - - user_via = switch_mprintf("SIP/2.0/%s %s;rport", transport_str, profile->extsipip); - + user_via = sofia_glue_create_external_via(NULL, profile, transport); } else { - user_via = switch_mprintf("SIP/2.0/UDP %s;rport", profile->extsipip); + user_via = sofia_glue_create_external_via(NULL, profile, SOFIA_TRANSPORT_UDP); contact_str = profile->public_url; } Modified: freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/branches/brian/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Wed Jun 3 15:49:57 2009 @@ -444,10 +444,9 @@ break; } - user_via = switch_mprintf("SIP/2.0/%s %s;rport", transport_str, profile->extsipip); - + user_via = sofia_glue_create_external_via(NULL, profile, transport); } else { - user_via = switch_mprintf("SIP/2.0/UDP %s;rport", profile->extsipip); + user_via = sofia_glue_create_external_via(NULL, profile, SOFIA_TRANSPORT_UDP); contact_str = profile->public_url; }