Merged revisions 282826 via svnmerge from
[asterisk/asterisk.git] / main / netsock2.c
index 6066604..99f7eac 100644 (file)
@@ -32,7 +32,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/utils.h"
 #include "asterisk/threadstorage.h"
 
-static int ast_sockaddr_ipv4_mapped(const struct ast_sockaddr *addr, struct ast_sockaddr *ast_mapped)
+int ast_sockaddr_ipv4_mapped(const struct ast_sockaddr *addr, struct ast_sockaddr *ast_mapped)
 {
        const struct sockaddr_in6 *sin6;
        struct sockaddr_in sin4;
@@ -118,7 +118,7 @@ char *ast_sockaddr_stringify_fmt(const struct ast_sockaddr *sa, int format)
        return ast_str_buffer(str);
 }
 
-int static _ast_sockaddr_parse(char *str, char **host, char **port, int flags)
+int ast_sockaddr_split_hostport(char *str, char **host, char **port, int flags)
 {
        char *s = str;
 
@@ -187,7 +187,7 @@ int ast_sockaddr_parse(struct ast_sockaddr *addr, const char *str, int flags)
        int     e;
 
        s = ast_strdupa(str);
-       if (!_ast_sockaddr_parse(s, &host, &port, flags)) {
+       if (!ast_sockaddr_split_hostport(s, &host, &port, flags)) {
                return 0;
        }
 
@@ -195,10 +195,16 @@ int ast_sockaddr_parse(struct ast_sockaddr *addr, const char *str, int flags)
        /* Hint to get only one entry from getaddrinfo */
        hints.ai_socktype = SOCK_DGRAM;
 
+#ifdef AI_NUMERICSERV
        hints.ai_flags = AI_NUMERICHOST | AI_NUMERICSERV;
+#else
+       hints.ai_flags = AI_NUMERICHOST;
+#endif
        if ((e = getaddrinfo(host, port, &hints, &res))) {
-               ast_log(LOG_ERROR, "getaddrinfo(\"%s\", \"%s\", ...): %s\n",
-                       host, S_OR(port, "(null)"), gai_strerror(e));
+               if (e != EAI_NONAME) { /* if this was just a host name rather than a ip address, don't print error */
+                       ast_log(LOG_ERROR, "getaddrinfo(\"%s\", \"%s\", ...): %s\n",
+                               host, S_OR(port, "(null)"), gai_strerror(e));
+               }
                return 0;
        }
 
@@ -227,7 +233,7 @@ int ast_sockaddr_resolve(struct ast_sockaddr **addrs, const char *str,
        int     e, i, res_cnt;
 
        s = ast_strdupa(str);
-       if (!_ast_sockaddr_parse(s, &host, &port, flags)) {
+       if (!ast_sockaddr_split_hostport(s, &host, &port, flags)) {
                return 0;
        }
 
@@ -337,7 +343,9 @@ uint16_t _ast_sockaddr_port(const struct ast_sockaddr *addr, const char *file, i
                 addr->len == sizeof(struct sockaddr_in6)) {
                return ntohs(((struct sockaddr_in6 *)&addr->ss)->sin6_port);
        }
-       ast_log(__LOG_DEBUG, file, line, func, "Not an IPv4 nor IPv6 address, cannot get port.\n");
+       if (option_debug >= 1) {
+               ast_log(__LOG_DEBUG, file, line, func, "Not an IPv4 nor IPv6 address, cannot get port.\n");
+       }
        return 0;
 }
 
@@ -349,7 +357,7 @@ void _ast_sockaddr_set_port(struct ast_sockaddr *addr, uint16_t port, const char
        } else if (addr->ss.ss_family == AF_INET6 &&
                 addr->len == sizeof(struct sockaddr_in6)) {
                ((struct sockaddr_in6 *)&addr->ss)->sin6_port = htons(port);
-       } else {
+       } else if (option_debug >= 1) {
                ast_log(__LOG_DEBUG, file, line, func,
                        "Not an IPv4 nor IPv6 address, cannot set port.\n");
        }
@@ -479,7 +487,7 @@ int _ast_sockaddr_to_sin(const struct ast_sockaddr *addr,
                return 0;
        }
 
-       if (addr->ss.ss_family != AF_INET) {
+       if (addr->ss.ss_family != AF_INET && option_debug >= 1) {
                ast_log(__LOG_DEBUG, file, line, func, "Address family is not AF_INET\n");
        }
 
@@ -492,7 +500,7 @@ void _ast_sockaddr_from_sin(struct ast_sockaddr *addr, const struct sockaddr_in
 {
        memcpy(&addr->ss, sin, sizeof(*sin));
 
-       if (addr->ss.ss_family != AF_INET) {
+       if (addr->ss.ss_family != AF_INET && option_debug >= 1) {
                ast_log(__LOG_DEBUG, file, line, func, "Address family is not AF_INET\n");
        }