From 58310a927280eda14efd50be7477dd5f7208f27c Mon Sep 17 00:00:00 2001 From: Michael Jerris Date: Thu, 8 Feb 2007 20:16:08 +0000 Subject: [PATCH] make sofia set network_addr as the address the packet was actually received from, not the address from the uri. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4169 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_utils.h | 9 +++++++++ src/mod/endpoints/mod_sofia/mod_sofia.c | 11 ++++++++--- src/switch_utils.c | 3 +-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index ef228ed96e..c30303fa2e 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -94,6 +94,15 @@ atoi(expr))) ? SWITCH_TRUE : SWITCH_FALSE */ SWITCH_DECLARE(switch_status_t) switch_find_local_ip(char *buf, int len, int family); +/*! + \brief find the char representation of an ip adress + \param buf the buffer to write the ip adress found into + \param len the length of the buf + \param the struct in_addr * to get the adress from + \return the ip adress string +*/ +SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct in_addr *in); + #define SWITCH_STATUS_IS_BREAK(x) (x == SWITCH_STATUS_BREAK || x == 730035 || x == 35) /*! diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 4d4d0c7d3e..3fffbe5f26 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -74,6 +74,7 @@ typedef struct private_object private_object_t; #include #include #include +#include extern su_log_t tport_log[]; @@ -4173,7 +4174,7 @@ static void sip_i_invite(nua_t *nua, sip_unknown_t *un; private_object_t *tech_pvt = NULL; switch_channel_t *channel = NULL; - sip_from_t const *from = sip->sip_from; + sip_from_t const *from = sip->sip_from; sip_to_t const *to = sip->sip_to; char *displayname; char *username, *req_username = NULL; @@ -4184,8 +4185,9 @@ static void sip_i_invite(nua_t *nua, char *via_rport, *via_host, *via_port; char *from_port; char uri[1024]; + char network_ip[80]; + - if (!(sip && sip->sip_contact && sip->sip_contact->m_url)) { switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "NO CONTACT!\n"); return; @@ -4212,6 +4214,9 @@ static void sip_i_invite(nua_t *nua, tech_pvt->key = switch_core_session_strdup(session, key); } + get_addr(network_ip, sizeof(network_ip), &((struct sockaddr_in *)msg_addrinfo(nua_current_request(nua))->ai_addr)->sin_addr); + + to_user = (char *) to->a_url->url_user; to_host = (char *) to->a_url->url_host; if (!(to_port = (char *) to->a_url->url_port)) { @@ -4365,7 +4370,7 @@ static void sip_i_invite(nua_t *nua, profile->dialplan, displayname, (char *) from->a_url->url_user, - (char *) from->a_url->url_host, + network_ip, NULL, NULL, NULL, diff --git a/src/switch_utils.c b/src/switch_utils.c index 1027a9046d..8787775ca3 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -36,7 +36,6 @@ #ifndef WIN32 #include #endif -static char *get_addr(char *buf, switch_size_t len, struct in_addr *in); SWITCH_DECLARE(switch_status_t) switch_find_local_ip(char *buf, int len, int family) { @@ -348,7 +347,7 @@ SWITCH_DECLARE(char *) switch_priority_name(switch_priority_t priority) static char RFC2833_CHARS[] = "0123456789*#ABCDF"; -static char *get_addr(char *buf, switch_size_t len, struct in_addr *in) +SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct in_addr *in) { uint8_t x, *i; char *p = buf;