diff options
author | Benny Prijono <bennylp@teluu.com> | 2008-04-01 18:23:56 +0000 |
---|---|---|
committer | Benny Prijono <bennylp@teluu.com> | 2008-04-01 18:23:56 +0000 |
commit | ac825cc6c3d5bdd055d29379520fb8b3c91212e3 (patch) | |
tree | fefa7db34fd2fa6f60a786a06898336bbc627407 /pjnath | |
parent | 13c9e2c19ac1ffa6bf5d4ffbf965e5662d9ff3b6 (diff) |
More work on ticket #485: bug when TURN UDP relay is not destroyed if Allocate request fails
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1904 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath')
-rw-r--r-- | pjnath/src/pjnath/turn_udp.c | 18 | ||||
-rw-r--r-- | pjnath/src/pjturn-client/client_main.c | 5 |
2 files changed, 17 insertions, 6 deletions
diff --git a/pjnath/src/pjnath/turn_udp.c b/pjnath/src/pjnath/turn_udp.c index a9fd4705..a58e816b 100644 --- a/pjnath/src/pjnath/turn_udp.c +++ b/pjnath/src/pjnath/turn_udp.c @@ -155,7 +155,7 @@ PJ_DEF(pj_status_t) pj_turn_udp_create( pj_stun_config *cfg, sess_cb.on_channel_bound = &turn_on_channel_bound; sess_cb.on_rx_data = &turn_on_rx_data; sess_cb.on_state = &turn_on_state; - status = pj_turn_session_create(cfg, pool->obj_name, af, PJ_TURN_TP_UDP, + status = pj_turn_session_create(cfg, "turn%p", af, PJ_TURN_TP_UDP, &sess_cb, udp_rel, 0, &udp_rel->sess); if (status != PJ_SUCCESS) { destroy(udp_rel); @@ -475,16 +475,24 @@ static void turn_on_state(pj_turn_session *sess, } if (new_state >= PJ_TURN_STATE_DESTROYING && udp_rel->sess) { - if (udp_rel->destroy_request) { + + udp_rel->sess = NULL; + // Always destroy the session regardless whether application + // has called pj_turn_udp_destroy() or not. This is to handle + // the case when Allocate request fails. + //if (udp_rel->destroy_request) { + if (1) { pj_time_val delay = {0, 0}; - pj_turn_session_set_user_data(udp_rel->sess, NULL); + pj_turn_session_set_user_data(sess, NULL); + + if (udp_rel->timer.id != TIMER_NONE) { + pj_timer_heap_cancel(udp_rel->timer_heap, &udp_rel->timer); + } udp_rel->timer.id = TIMER_DESTROY; pj_timer_heap_schedule(udp_rel->timer_heap, &udp_rel->timer, &delay); - } else { - udp_rel->sess = NULL; } } } diff --git a/pjnath/src/pjturn-client/client_main.c b/pjnath/src/pjturn-client/client_main.c index 117da1c0..4a2eea1b 100644 --- a/pjnath/src/pjturn-client/client_main.c +++ b/pjnath/src/pjturn-client/client_main.c @@ -357,7 +357,7 @@ static void menu(void) printf("| x Delete allocation | Address: %-21s |\n", peer1_addr); puts("+-----------------------------------+ |"); - puts("| q Quit | 1 Send data to relay adderss |"); + puts("| q Quit d Dump | 1 Send data to relay adderss |"); puts("+-----------------------------------+--------------------------------+"); printf(">>> "); fflush(stdout); @@ -380,6 +380,9 @@ static void console_main(void) case 'a': create_relay(); break; + case 'd': + pj_pool_factory_dump(&g.cp.factory, PJ_TRUE); + break; case 's': if (g.udp_rel == NULL) { puts("Error: no relay"); |