Esempio n. 1
0
void sipomatic_iterate(Sipomatic *obj)
{
	MSList *elem;
	MSList *to_be_destroyed=NULL;
	Call *call;
	double elapsed;
	eXosip_event_t *ev;

	while((ev=eXosip_event_wait(0,0))!=NULL){
		sipomatic_process_event(obj,ev);
	}
	elem=obj->calls;
	while(elem!=NULL){
		call=(Call*)elem->data;
		elapsed=time(NULL)-call->time;
		switch(call->state){
			case CALL_STATE_INIT:
				if (elapsed>obj->acceptance_time){
					call_accept(call);
				}
			break;
			case CALL_STATE_RUNNING:
				if (elapsed>obj->max_call_time || call->eof){
					call_release(call);
					to_be_destroyed=ms_list_append(to_be_destroyed,call);
				}
			break;
		}
		elem=ms_list_next(elem);
	}
	for(;to_be_destroyed!=NULL; to_be_destroyed=ms_list_next(to_be_destroyed)){
		call_destroy((Call*)to_be_destroyed->data);
	}
}
Esempio n. 2
0
void sipomatic_process_event(Sipomatic *obj,eXosip_event_t *ev)
{
	Call *call;
	switch(ev->type){
		case EXOSIP_CALL_INVITE:
			call_new(obj,ev);
			break;
		case EXOSIP_CALL_CLOSED:
		case EXOSIP_CALL_CANCELLED:
			call=sipomatic_find_call(obj,ev->did);
			if (call==NULL){
				ms_warning("Could not find call with did %i !",ev->did);
			}
			call_release(call);
			call_destroy(call);
			break;
		default:
			break;
	}
	eXosip_event_free(ev);
}
Esempio n. 3
0
void
call_destroyer(void *call)
{
    call_destroy((sip_call_t*)call);
}