summaryrefslogtreecommitdiff
path: root/pjnath/src
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-09-15 08:30:16 +0000
committerBenny Prijono <bennylp@teluu.com>2007-09-15 08:30:16 +0000
commit229e150c7b96a344f371fe02262d363ed0b88898 (patch)
treebd8b4b253ceb3ba011088a91559cf0626dfcf6bc /pjnath/src
parent560a0d9b22efac7c63b45566f8e69ac592421da1 (diff)
Ticket #370: Implemented callback notification to application when ICE negotiation fails (via on_call_media_state callback)
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1435 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath/src')
-rw-r--r--pjnath/src/pjnath/ice_session.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/pjnath/src/pjnath/ice_session.c b/pjnath/src/pjnath/ice_session.c
index 78422af1..27634442 100644
--- a/pjnath/src/pjnath/ice_session.c
+++ b/pjnath/src/pjnath/ice_session.c
@@ -336,6 +336,12 @@ static void destroy_ice(pj_ice_sess *ice,
LOG4((ice->obj_name, "Destroying ICE session"));
}
+ if (ice->completion_timer.id) {
+ pj_timer_heap_cancel(ice->stun_cfg.timer_heap,
+ &ice->completion_timer);
+ ice->completion_timer.id = PJ_FALSE;
+ }
+
for (i=0; i<ice->comp_cnt; ++i) {
if (ice->comp[i].stun_sess) {
pj_stun_session_destroy(ice->comp[i].stun_sess);
@@ -945,6 +951,20 @@ static pj_status_t prune_checklist(pj_ice_sess *ice,
return PJ_SUCCESS;
}
+/* Timer callback to call on_ice_complete() callback */
+static void on_completion_timer(pj_timer_heap_t *th,
+ pj_timer_entry *te)
+{
+ pj_ice_sess *ice = (pj_ice_sess*) te->user_data;
+
+ PJ_UNUSED_ARG(th);
+
+ te->id = PJ_FALSE;
+
+ if (ice->cb.on_ice_complete)
+ (*ice->cb.on_ice_complete)(ice, ice->ice_status);
+}
+
/* This function is called when ICE processing completes */
static void on_ice_complete(pj_ice_sess *ice, pj_status_t status)
{
@@ -962,7 +982,15 @@ static void on_ice_complete(pj_ice_sess *ice, pj_status_t status)
/* Call callback */
if (ice->cb.on_ice_complete) {
- (*ice->cb.on_ice_complete)(ice, status);
+ pj_time_val delay = {0, 0};
+
+ ice->completion_timer.cb = &on_completion_timer;
+ ice->completion_timer.user_data = (void*) ice;
+ ice->completion_timer.id = PJ_TRUE;
+
+ pj_timer_heap_schedule(ice->stun_cfg.timer_heap,
+ &ice->completion_timer,
+ &delay);
}
}
}