From 0820d565af32b0cee9eab57c9428d58e4868de79 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 27 Nov 2008 02:30:11 +0000 Subject: [PATCH] patch for FSCORE-219 git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@10554 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- src/include/switch_stun.h | 1 + src/mod/endpoints/mod_sofia/sofia_glue.c | 4 +++- src/switch_stun.c | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/include/switch_stun.h b/src/include/switch_stun.h index 1542873fff..5a0a78a27c 100644 --- a/src/include/switch_stun.h +++ b/src/include/switch_stun.h @@ -147,6 +147,7 @@ SWITCH_DECLARE(switch_stun_packet_t *) switch_stun_packet_parse(uint8_t *buf, ui */ SWITCH_DECLARE(const char *) switch_stun_value_to_name(int32_t type, uint32_t value); +SWITCH_DECLARE(char *) switch_stun_host_lookup(const char *host, switch_memory_pool_t *pool); /*! \brief Extract a mapped address (IP:PORT) from a packet attribute diff --git a/src/mod/endpoints/mod_sofia/sofia_glue.c b/src/mod/endpoints/mod_sofia/sofia_glue.c index 5d2ee72ab4..b63be91b2f 100644 --- a/src/mod/endpoints/mod_sofia/sofia_glue.c +++ b/src/mod/endpoints/mod_sofia/sofia_glue.c @@ -448,7 +448,9 @@ switch_status_t sofia_glue_ext_address_lookup(sofia_profile_t *profile, private_ return status; } - if (!strncasecmp(sourceip, "stun:", 5)) { + if (!strncasecmp(sourceip, "host:", 5)) { + status = (*ip = switch_stun_host_lookup(sourceip + 5, pool)) ? SWITCH_STATUS_SUCCESS : SWITCH_STATUS_FALSE; + } else if (!strncasecmp(sourceip, "stun:", 5)) { char *p; if (!(profile->pflags & PFLAG_STUN_ENABLED)) { diff --git a/src/switch_stun.c b/src/switch_stun.c index c68da753ee..bc8e540d04 100644 --- a/src/switch_stun.c +++ b/src/switch_stun.c @@ -428,6 +428,16 @@ SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_username(switch_stun_pa return 1; } +SWITCH_DECLARE(char *) switch_stun_host_lookup(const char *host, switch_memory_pool_t *pool) +{ + switch_sockaddr_t *addr = NULL; + char buf[30]; + + switch_sockaddr_info_get(&addr, host, SWITCH_UNSPEC, 0, 0, pool); + return switch_core_strdup(pool, switch_str_nil(switch_get_addr(buf, sizeof(buf), addr))); + +} + SWITCH_DECLARE(switch_status_t) switch_stun_lookup(char **ip, switch_port_t *port, char *stunip, switch_port_t stunport, char **err, switch_memory_pool_t *pool) {