summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2016-11-17 04:38:25 +0000
committerLiong Sauw Ming <ming@teluu.com>2016-11-17 04:38:25 +0000
commit6ac615fc101529f55ed352e1273c33d89b111996 (patch)
tree7fb706851885d46b70d7f0f484128d2fbb46f1d2
parent2bf76ec48f3400cfea42498ae93240b2f9510220 (diff)
Fixed #1979: Add support to parse address string with scope ID
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@5485 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjlib/include/pj/compat/os_auto.h.in4
-rw-r--r--pjlib/src/pj/sock_common.c5
2 files changed, 9 insertions, 0 deletions
diff --git a/pjlib/include/pj/compat/os_auto.h.in b/pjlib/include/pj/compat/os_auto.h.in
index 0cf14968..55dd6520 100644
--- a/pjlib/include/pj/compat/os_auto.h.in
+++ b/pjlib/include/pj/compat/os_auto.h.in
@@ -181,6 +181,10 @@
#if defined(PJ_DARWINOS) && PJ_DARWINOS!=0
/* Disable local host resolution in pj_gethostip() (see ticket #1342) */
# define PJ_GETHOSTIP_DISABLE_LOCAL_RESOLUTION 1
+ /* Use pj_getaddrinfo() (instead of pj_inet_pton()) in
+ * pj_sockaddr_set_str_addr()
+ */
+# define PJ_SOCKADDR_USE_GETADDRINFO 1
# include "TargetConditionals.h"
# if TARGET_OS_IPHONE
diff --git a/pjlib/src/pj/sock_common.c b/pjlib/src/pj/sock_common.c
index 0ea25fbc..96108758 100644
--- a/pjlib/src/pj/sock_common.c
+++ b/pjlib/src/pj/sock_common.c
@@ -172,8 +172,12 @@ PJ_DEF(pj_status_t) pj_sockaddr_set_str_addr(int af,
PJ_SOCKADDR_RESET_LEN(addr);
if (str_addr && str_addr->slen) {
+#if defined(PJ_SOCKADDR_USE_GETADDRINFO) && PJ_SOCKADDR_USE_GETADDRINFO!=0
+ if (1) {
+#else
status = pj_inet_pton(PJ_AF_INET6, str_addr, &addr->ipv6.sin6_addr);
if (status != PJ_SUCCESS) {
+#endif
pj_addrinfo ai;
unsigned count = 1;
@@ -181,6 +185,7 @@ PJ_DEF(pj_status_t) pj_sockaddr_set_str_addr(int af,
if (status==PJ_SUCCESS) {
pj_memcpy(&addr->ipv6.sin6_addr, &ai.ai_addr.ipv6.sin6_addr,
sizeof(addr->ipv6.sin6_addr));
+ addr->ipv6.sin6_scope_id = ai.ai_addr.ipv6.sin6_scope_id;
}
}
} else {