summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/addr_resolv_sock.c
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-01-24 19:59:41 +0000
committerBenny Prijono <bennylp@teluu.com>2008-01-24 19:59:41 +0000
commit3b931e9df77113c75ed7cbcb7c1b3f6736834927 (patch)
tree9d98e578b798c885f7a8069e2ce8d6b72571268b /pjlib/src/pj/addr_resolv_sock.c
parent2ca3a0d350619d66f0d5d7c90358bb85dbb0d092 (diff)
Related to ticket #458: pj_getaddrinfo() should return success if IP address is given
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1744 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjlib/src/pj/addr_resolv_sock.c')
-rw-r--r--pjlib/src/pj/addr_resolv_sock.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/pjlib/src/pj/addr_resolv_sock.c b/pjlib/src/pj/addr_resolv_sock.c
index b04e83f2..5df41052 100644
--- a/pjlib/src/pj/addr_resolv_sock.c
+++ b/pjlib/src/pj/addr_resolv_sock.c
@@ -70,6 +70,22 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
PJ_ASSERT_RETURN(af==PJ_AF_INET || af==PJ_AF_INET6 ||
af==PJ_AF_UNSPEC, PJ_EINVAL);
+ /* Check if nodename is IP address */
+ pj_bzero(&ai[0], sizeof(ai[0]));
+ ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+ if (pj_inet_pton(af, nodename, pj_sockaddr_get_addr(&ai[0].ai_addr))
+ == PJ_SUCCESS)
+ {
+ pj_str_t tmp;
+
+ tmp.ptr = ai[0].ai_canonname;
+ pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
+ ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+ *count = 1;
+
+ return PJ_SUCCESS;
+ }
+
/* Copy node name to null terminated string. */
if (nodename->slen >= PJ_MAX_HOSTNAME)
return PJ_ENAMETOOLONG;
@@ -118,7 +134,23 @@ PJ_DEF(pj_status_t) pj_getaddrinfo(int af, const pj_str_t *nodename,
#else /* PJ_SOCK_HAS_GETADDRINFO */
- PJ_ASSERT_RETURN(count, PJ_EINVAL);
+ PJ_ASSERT_RETURN(count && *count, PJ_EINVAL);
+
+ /* Check if nodename is IP address */
+ pj_bzero(&ai[0], sizeof(ai[0]));
+ ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+ if (pj_inet_pton(af, nodename, pj_sockaddr_get_addr(&ai[0].ai_addr))
+ == PJ_SUCCESS)
+ {
+ pj_str_t tmp;
+
+ tmp.ptr = ai[0].ai_canonname;
+ pj_strncpy_with_null(&tmp, nodename, PJ_MAX_HOSTNAME);
+ ai[0].ai_addr.addr.sa_family = (pj_uint16_t)af;
+ *count = 1;
+
+ return PJ_SUCCESS;
+ }
if (af == PJ_AF_INET || af == PJ_AF_UNSPEC) {
pj_hostent he;