rendered paste bodydiff --git a/pjlib/src/pj/sock_bsd.c b/pjlib/src/pj/sock_bsd.c
index 1554af8..aea2b08 100644
--- a/pjlib/src/pj/sock_bsd.c
+++ b/pjlib/src/pj/sock_bsd.c
@@ -754,7 +754,23 @@ PJ_DEF(pj_status_t) pj_sock_connect( pj_sock_t sock,
const pj_sockaddr_t *addr,
int namelen)
{
+ const pj_sockaddr *b = addr;
PJ_CHECK_STACK();
+ if (b->addr.sa_family == pj_AF_INET6()) {
+ char buf[PJ_INET6_ADDRSTRLEN];
+ int len = sizeof(pj_sockaddr_in6);
+ pj_sockaddr c;
+ pj_sock_getsockname(sock, &c, &len);
+ pj_sockaddr_print(&c, buf, sizeof(buf), 1 | 2);
+ printf ("On v6 connect, trying to connect from socket bound to %s\n", buf);
+ printf ("Address family is really %sset correctly\n", c.addr.sa_family == AF_INET6 ? "" : "NOT ");
+ printf ("And the len after getsockname is %d\n", len);
+ pj_sockaddr_print(b, buf, sizeof(buf), 1 | 2);
+ printf ("On v6 connect, trying to connect to %s\n", buf);
+ printf ("Address family is really %sset correctly\n", b->addr.sa_family == AF_INET6 ? "" : "NOT ");
+ printf ("And the len is %d\n", namelen);
+ printf ("And the scope_id is %d\n", b->ipv6.sin6_scope_id);
+ }
if (connect(sock, (struct sockaddr*)addr, namelen) != 0)
return PJ_RETURN_OS_ERROR(pj_get_native_netos_error());
else
diff --git a/pjlib/src/pj/sock_common.c b/pjlib/src/pj/sock_common.c
index 141fad7..be22a23 100644
--- a/pjlib/src/pj/sock_common.c
+++ b/pjlib/src/pj/sock_common.c
@@ -919,6 +919,13 @@ PJ_DEF(pj_status_t) pj_gethostip(int af, pj_sockaddr *addr)
pj_sockaddr_print(&cand_addr[i], strip, sizeof(strip), 0),
cand_weight[i]));
+ if (af == pj_AF_INET6())
+ {
+ char buf[PJ_INET6_ADDRSTRLEN];
+ printf("Candidate address is %s\n", pj_sockaddr_print(&cand_addr[i], buf, sizeof(buf), 1 | 2));
+ printf("Candidate address scope_id is %d\n", cand_addr[i].ipv6.sin6_scope_id);
+ }
+
if (cand_weight[i] < MIN_WEIGHT) {
continue;
}
@@ -944,6 +951,9 @@ PJ_DEF(pj_status_t) pj_gethostip(int af, pj_sockaddr *addr)
pj_sockaddr_print(addr, strip, sizeof(strip), 0)));
} else {
pj_sockaddr_copy_addr(addr, &cand_addr[selected_cand]);
+ if (af == pj_AF_INET6()) {
+ addr->ipv6.sin6_scope_id = cand_addr[selected_cand].ipv6.sin6_scope_id;
+ }
TRACE_((THIS_FILE, "Candidate %s selected",
pj_sockaddr_print(addr, strip, sizeof(strip), 0)));
}
diff --git a/pjsip/src/pjsip/sip_transport_tcp.c b/pjsip/src/pjsip/sip_transport_tcp.c
index 35348a7..f311f73 100644
--- a/pjsip/src/pjsip/sip_transport_tcp.c
+++ b/pjsip/src/pjsip/sip_transport_tcp.c
@@ -330,9 +330,10 @@ PJ_DEF(pj_status_t) pjsip_tcp_transport_start3(
if (status != PJ_SUCCESS)
goto on_error;
- pj_memcpy(pj_sockaddr_get_addr(listener_addr),
- pj_sockaddr_get_addr(&hostip),
- pj_sockaddr_get_addr_len(&hostip));
+ pj_sockaddr_copy_addr(listener_addr, &hostip);
+ if (hostip.addr.sa_family == pj_AF_INET6()) {
+ listener_addr->ipv6.sin6_scope_id = hostip.ipv6.sin6_scope_id;
+ }
}
/* Save the address name */
@@ -894,6 +895,10 @@ static pj_status_t lis_create_transport(pjsip_tpfactory *factory,
/* Initially set the address from the listener's address */
pj_sockaddr_copy_addr(&local_addr, &listener->factory.local_addr);
+ if (listener->factory.local_addr.addr.sa_family == pj_AF_INET6())
+ {
+ local_addr.ipv6.sin6_scope_id = listener->factory.local_addr.ipv6.sin6_scope_id;
+ }
/* Create the transport descriptor */
status = tcp_create(listener, NULL, sock, PJ_FALSE, &local_addr,
diff --git a/pjsip/src/test/test.c b/pjsip/src/test/test.c
index 8fa5f66..d024630 100644
--- a/pjsip/src/test/test.c
+++ b/pjsip/src/test/test.c
@@ -291,6 +291,7 @@ int test_main(void)
tsx_test[tsx_test_cnt].type = PJSIP_TRANSPORT_LOOP_DGRAM;
++tsx_test_cnt;
+#if 0
#if INCLUDE_URI_TEST
DO_TEST(uri_test());
@@ -321,10 +322,14 @@ int test_main(void)
DO_TEST(transport_loop_test());
#endif
+#endif
+
#if INCLUDE_TCP_TEST
DO_TEST(transport_tcp_test());
#endif
+#if 0
+
#if INCLUDE_RESOLVE_TEST
DO_TEST(resolve_test());
#endif
@@ -369,6 +374,7 @@ int test_main(void)
DO_TEST(regc_test());
#endif
+#endif
on_return:
flush_events(500);
diff --git a/pjsip/src/test/transport_tcp_test.c b/pjsip/src/test/transport_tcp_test.c
index 2a814bb..5e791ba 100644
--- a/pjsip/src/test/transport_tcp_test.c
+++ b/pjsip/src/test/transport_tcp_test.c
@@ -56,6 +56,11 @@ int transport_tcp_test(void)
return -14;
}
+ if (rem_addr.addr.sa_family == pj_AF_INET6() && tpfactory->local_addr.addr.sa_family == pj_AF_INET6())
+ {
+ rem_addr.ipv6.sin6_scope_id = tpfactory->local_addr.ipv6.sin6_scope_id;
+ }
+
pj_ansi_sprintf(url, "sip:alice@%s;transport=tcp",
pj_sockaddr_print(&rem_addr, rem_addr_str, sizeof(rem_addr_str), 1 | 2));