static void update_inactivity_timer(belle_sip_channel_t *obj, int from_recv){ int inactive_timeout=belle_sip_stack_get_inactive_transport_timeout(obj->stack)*1000; if (inactive_timeout>0){ if (!obj->inactivity_timer ){ obj->inactivity_timer=belle_sip_main_loop_create_timeout(obj->stack->ml,channel_inactive_timeout,obj,inactive_timeout,"Channel inactivity timer"); }else{ /*restart the timer for new period*/ belle_sip_source_set_timeout(obj->inactivity_timer,inactive_timeout); } }else{ if (obj->inactivity_timer){ belle_sip_main_loop_remove_source(obj->stack->ml,obj->inactivity_timer); belle_sip_object_unref(obj->inactivity_timer); obj->inactivity_timer=NULL; } } if (from_recv) obj->last_recv_time=belle_sip_time_ms(); }
void belle_sip_listening_point_set_keep_alive(belle_sip_listening_point_t *lp,int ms) { if (ms <=0) { if (lp->keep_alive_timer) { belle_sip_main_loop_remove_source(lp->stack->ml,lp->keep_alive_timer); belle_sip_object_unref(lp->keep_alive_timer); lp->keep_alive_timer=NULL; } return; } if (!lp->keep_alive_timer) { lp->keep_alive_timer = belle_sip_main_loop_create_timeout(lp->stack->ml , keep_alive_timer_func , lp , ms ,"keep alive") ; } else { belle_sip_source_set_timeout(lp->keep_alive_timer,ms); } return; }
void belle_sip_main_loop_sleep(belle_sip_main_loop_t *ml, int milliseconds){ belle_sip_source_t * s=belle_sip_main_loop_create_timeout(ml,(belle_sip_source_func_t)belle_sip_main_loop_quit,ml,milliseconds,"Main loop sleep timer"); belle_sip_main_loop_run(ml); belle_sip_main_loop_remove_source(ml,s); belle_sip_object_unref(s); }
void belle_sip_main_loop_do_later(belle_sip_main_loop_t *ml, belle_sip_callback_t func, void *data){ belle_sip_source_t * s=belle_sip_main_loop_create_timeout(ml,(belle_sip_source_func_t)func,data,0,"defered task"); s->oneshot=TRUE; belle_sip_object_unref(s); }
unsigned long belle_sip_main_loop_add_timeout(belle_sip_main_loop_t *ml, belle_sip_source_func_t func, void *data, unsigned int timeout_value_ms){ belle_sip_source_t * s=belle_sip_main_loop_create_timeout(ml,func,data,timeout_value_ms,"Timer"); belle_sip_object_unref(s); return s->id; }
belle_sip_source_t * sal_create_timer(Sal *sal, belle_sip_source_func_t func, void *data, unsigned int timeout_value_ms, const char* timer_name) { belle_sip_main_loop_t *ml = belle_sip_stack_get_main_loop(sal->stack); return belle_sip_main_loop_create_timeout(ml, func, data, timeout_value_ms, timer_name); }