]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5396 --resolve add gethost function to call gethostbyname as desired
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 4 Feb 2014 20:08:31 +0000 (01:08 +0500)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 4 Feb 2014 20:08:31 +0000 (01:08 +0500)
src/mod/applications/mod_commands/mod_commands.c
src/mod/endpoints/mod_sofia/mod_sofia.c

index 63e6376c08fd64cc5fa8615adc968a52f122849b..1e10a8f8f4c71ac8b806d58cc2144d900b087f58 100644 (file)
@@ -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, "<cause> [<var> <value>]");
        SWITCH_ADD_API(commands_api_interface, "in_group", "Determine if a user is in a group", in_group_function, "<user>[@<domain>] <group_name>");
        SWITCH_ADD_API(commands_api_interface, "is_lan_addr", "See if an ip is a lan addr", lan_addr_function, "<ip>");
index 59b7a6102ed5d64a58604e87f143417ea0430add..ddf23a9d2541a30449fde813e415e1d00e3c76b2 100644 (file)
@@ -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);