From b65d2a9a78e2962e4d79f960891dcef52188dace Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Wed, 5 Feb 2014 01:08:31 +0500 Subject: [PATCH] FS-5396 --resolve add gethost function to call gethostbyname as desired --- .../applications/mod_commands/mod_commands.c | 24 +++++++++++++++++++ src/mod/endpoints/mod_sofia/mod_sofia.c | 6 ++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 63e6376c08..1e10a8f8f4 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -517,6 +517,29 @@ SWITCH_STANDARD_API(switchname_api_function) return SWITCH_STATUS_SUCCESS; } +SWITCH_STANDARD_API(gethost_api_function) +{ + struct sockaddr_in sa; + struct hostent *he; + const char *ip; + char buf[50] = ""; + + if (!zstr(cmd)) { + he = gethostbyname(cmd); + + if (he) { + memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); + ip = inet_ntop(AF_INET, &sa.sin_addr, buf, sizeof(buf)); + stream->write_function(stream, "%s", ip); + return SWITCH_STATUS_SUCCESS; + } + } + + stream->write_function(stream, "-ERR"); + + return SWITCH_STATUS_SUCCESS; +} + SWITCH_STANDARD_API(shutdown_function) { @@ -6552,6 +6575,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "hostname", "Return the system hostname", hostname_api_function, ""); SWITCH_ADD_API(commands_api_interface, "interface_ip", "Return the primary IP of an interface", interface_ip_function, INTERFACE_IP_SYNTAX); SWITCH_ADD_API(commands_api_interface, "switchname", "Return the switch name", switchname_api_function, ""); + SWITCH_ADD_API(commands_api_interface, "gethost", "gethostbyname", gethost_api_function, ""); SWITCH_ADD_API(commands_api_interface, "hupall", "hupall", hupall_api_function, " [ ]"); SWITCH_ADD_API(commands_api_interface, "in_group", "Determine if a user is in a group", in_group_function, "[@] "); SWITCH_ADD_API(commands_api_interface, "is_lan_addr", "See if an ip is a lan addr", lan_addr_function, ""); diff --git a/src/mod/endpoints/mod_sofia/mod_sofia.c b/src/mod/endpoints/mod_sofia/mod_sofia.c index 59b7a6102e..ddf23a9d25 100644 --- a/src/mod/endpoints/mod_sofia/mod_sofia.c +++ b/src/mod/endpoints/mod_sofia/mod_sofia.c @@ -4270,12 +4270,12 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session if (!strchr(host, '.') || switch_true(switch_event_get_header(var_event, "sip_gethostbyname"))) { struct sockaddr_in sa; struct hostent *he = gethostbyname(host); - char *ip, *tmp; + char buf[50] = "", *tmp; + const char *ip; if (he) { memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr)); - ip = inet_ntoa(sa.sin_addr); - + ip = inet_ntop(AF_INET, &sa.sin_addr, buf, sizeof(buf)); tmp = switch_string_replace(dest, host, ip); //host = switch_core_session_strdup(nsession, ip); //dest = switch_core_session_strdup(nsession, tmp);