summaryrefslogtreecommitdiff
path: root/pjnath
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-04-01 18:23:56 +0000
committerBenny Prijono <bennylp@teluu.com>2008-04-01 18:23:56 +0000
commitac825cc6c3d5bdd055d29379520fb8b3c91212e3 (patch)
treefefa7db34fd2fa6f60a786a06898336bbc627407 /pjnath
parent13c9e2c19ac1ffa6bf5d4ffbf965e5662d9ff3b6 (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.c18
-rw-r--r--pjnath/src/pjturn-client/client_main.c5
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");