summaryrefslogtreecommitdiff
path: root/pjnath
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2009-03-04 12:56:32 +0000
committerBenny Prijono <bennylp@teluu.com>2009-03-04 12:56:32 +0000
commitd33a9e7ea8dfd4afbe02d62c2180636f5e9f1a94 (patch)
tree9e379bd432c24e1a352e909388cff6be6b4cd6b2 /pjnath
parentc205201320f80d9e25e554566da5b7f11203f871 (diff)
Ticket #742: Change in mapped/STUN IP address does not update ICE srflx candidate (thanks Alexei Kuznetsov for the report)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2484 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath')
-rw-r--r--pjnath/include/pjnath/stun_sock.h6
-rw-r--r--pjnath/src/pjnath/ice_strans.c8
-rw-r--r--pjnath/src/pjnath/stun_sock.c8
3 files changed, 17 insertions, 5 deletions
diff --git a/pjnath/include/pjnath/stun_sock.h b/pjnath/include/pjnath/stun_sock.h
index dae0b305..5dcaad2b 100644
--- a/pjnath/include/pjnath/stun_sock.h
+++ b/pjnath/include/pjnath/stun_sock.h
@@ -74,6 +74,12 @@ typedef enum pj_stun_sock_op
*/
PJ_STUN_SOCK_KEEP_ALIVE_OP,
+ /**
+ * IP address change notification from the keep-alive operation.
+ */
+ PJ_STUN_SOCK_MAPPED_ADDR_CHANGE
+
+
} pj_stun_sock_op;
diff --git a/pjnath/src/pjnath/ice_strans.c b/pjnath/src/pjnath/ice_strans.c
index c9ad487c..3cb5f4e6 100644
--- a/pjnath/src/pjnath/ice_strans.c
+++ b/pjnath/src/pjnath/ice_strans.c
@@ -1265,12 +1265,16 @@ static pj_bool_t stun_on_status(pj_stun_sock *stun_sock,
}
break;
case PJ_STUN_SOCK_BINDING_OP:
+ case PJ_STUN_SOCK_MAPPED_ADDR_CHANGE:
if (status == PJ_SUCCESS) {
pj_stun_sock_info info;
status = pj_stun_sock_get_info(stun_sock, &info);
if (status == PJ_SUCCESS) {
char ipaddr[PJ_INET6_ADDRSTRLEN+10];
+ const char *op_name = (op==PJ_STUN_SOCK_BINDING_OP) ?
+ "Binding discovery complete" :
+ "srflx address changed";
pj_bool_t dup = PJ_FALSE;
/* Eliminate the srflx candidate if the address is
@@ -1308,9 +1312,9 @@ static pj_bool_t stun_on_status(pj_stun_sock *stun_sock,
}
PJ_LOG(4,(comp->ice_st->obj_name,
- "Comp %d: Binding discovery complete, "
+ "Comp %d: %s, "
"srflx address is %s",
- comp->comp_id,
+ comp->comp_id, op_name,
pj_sockaddr_print(&info.mapped_addr, ipaddr,
sizeof(ipaddr), 3)));
diff --git a/pjnath/src/pjnath/stun_sock.c b/pjnath/src/pjnath/stun_sock.c
index 9bcd7c94..70c257a9 100644
--- a/pjnath/src/pjnath/stun_sock.c
+++ b/pjnath/src/pjnath/stun_sock.c
@@ -669,11 +669,13 @@ static void sess_on_request_complete(pj_stun_session *sess,
pj_sockaddr_cp(&stun_sock->mapped_addr, &mapped_attr->sockaddr);
- resched = (*stun_sock->cb.on_status)(stun_sock, op, PJ_SUCCESS);
-
- goto on_return;
+ if (op==PJ_STUN_SOCK_KEEP_ALIVE_OP)
+ op = PJ_STUN_SOCK_MAPPED_ADDR_CHANGE;
}
+ /* Notify user */
+ resched = (*stun_sock->cb.on_status)(stun_sock, op, PJ_SUCCESS);
+
on_return:
/* Start/restart keep-alive timer */
if (resched)