From d33a9e7ea8dfd4afbe02d62c2180636f5e9f1a94 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 4 Mar 2009 12:56:32 +0000 Subject: 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 --- pjnath/src/pjnath/ice_strans.c | 8 ++++++-- pjnath/src/pjnath/stun_sock.c | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) (limited to 'pjnath/src') 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) -- cgit v1.2.3