diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-01-24 19:59:41 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-01-24 19:59:41 +0000 |
commit | 3b931e9df77113c75ed7cbcb7c1b3f6736834927 (patch) | |
tree | 9d98e578b798c885f7a8069e2ce8d6b72571268b /pjlib/src/pj/addr_resolv_sock.c | |
parent | 2ca3a0d350619d66f0d5d7c90358bb85dbb0d092 (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.c | 34 |
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; |