int ms_ticker_attach_multiple(MSTicker *ticker,MSFilter *f,...) { MSList *sources=NULL; MSList *filters=NULL; MSList *it; MSList *total_sources=NULL; va_list l; va_start(l,f); do{ if (f->ticker==NULL) { filters=ms_filter_find_neighbours(f); sources=get_sources(filters); if (sources==NULL){ ms_fatal("No sources found around filter %s",f->desc->name); ms_list_free(filters); break; } /*run preprocess on each filter: */ for(it=filters;it!=NULL;it=it->next) ms_filter_preprocess((MSFilter*)it->data,ticker); ms_list_free(filters); total_sources=ms_list_concat(total_sources,sources); }else ms_message("Filter %s is already being scheduled; nothing to do.",f->desc->name); }while ((f=va_arg(l,MSFilter*))!=NULL); va_end(l); if (total_sources){ ms_mutex_lock(&ticker->lock); ticker->execution_list=ms_list_concat(ticker->execution_list,total_sources); ms_mutex_unlock(&ticker->lock); } return 0; }
int ms_ticker_attach(MSTicker *ticker,MSFilter *f) { MSList *sources=NULL; MSList *filters=NULL; MSList *it; if (f->ticker!=NULL) { ms_message("Filter %s is already being scheduled; nothing to do.",f->desc->name); return 0; } find_filters(&filters,f); sources=get_sources(filters); if (sources==NULL){ ms_fatal("No sources found around filter %s",f->desc->name); ms_list_free(filters); return -1; } /*run preprocess on each filter: */ for(it=filters;it!=NULL;it=it->next) ms_filter_preprocess((MSFilter*)it->data,ticker); ms_mutex_lock(&ticker->lock); ticker->execution_list=ms_list_concat(ticker->execution_list,sources); ms_mutex_unlock(&ticker->lock); ms_list_free(filters); return 0; }
bool_t wait_for_until_with_parse_events(MediaStream *ms1, MediaStream *ms2, int *counter, int value, int timeout_ms, ms_tester_iterate_cb cb1, void *ptr1, ms_tester_iterate_cb cb2, void *ptr2) { MSList *mss = NULL; MSList *cbs = NULL; MSList *ptrs = NULL; bool_t result; if (ms1) { mss = ms_list_append(mss, ms1); if (cb1 && ptr1) { cbs = ms_list_append(cbs, cb1); ptrs = ms_list_append(ptrs, ptr1); } } if (ms2) { mss = ms_list_append(mss, ms2); if (cb2 && ptr2) { cbs = ms_list_append(cbs, cb2); ptrs = ms_list_append(ptrs, ptr2); } } result = wait_for_list_with_parse_events(mss, counter, value, timeout_ms, cbs, ptrs); ms_list_free(mss); ms_list_free(cbs); ms_list_free(ptrs); return result; }
int ms_ticker_detach(MSTicker *ticker,MSFilter *f){ MSList *sources=NULL; MSList *filters=NULL; MSList *it; if (f->ticker==NULL) { ms_message("Filter %s is not scheduled; nothing to do.",f->desc->name); return 0; } ms_mutex_lock(&ticker->lock); filters=ms_filter_find_neighbours(f); sources=get_sources(filters); if (sources==NULL){ ms_fatal("No sources found around filter %s",f->desc->name); ms_list_free(filters); ms_mutex_unlock(&ticker->lock); return -1; } for(it=sources;it!=NULL;it=ms_list_next(it)){ ticker->execution_list=ms_list_remove(ticker->execution_list,it->data); } ms_mutex_unlock(&ticker->lock); ms_list_for_each(filters,(void (*)(void*))ms_filter_postprocess); ms_list_free(filters); ms_list_free(sources); return 0; }
void linphone_core_setup_local_rtp_profile(LinphoneCore *lc) { int i; MSList *audiopt,*videopt; PayloadType *payload; bool_t prepend; lc->local_profile=rtp_profile_clone_full(&av_profile); /* first look at the list given by configuration file to see if it is correct */ audiopt=fix_codec_list(lc->local_profile,lc->codecs_conf.audio_codecs); videopt=fix_codec_list(lc->local_profile,lc->codecs_conf.video_codecs); /* now find and add payloads that are not listed in the configuration codec list */ for (i=0;i<127;i++) { payload=rtp_profile_get_payload(lc->local_profile,i); if (payload!=NULL){ if (payload_type_get_user_data(payload)!=NULL) continue; /* find a mediastreamer codec for this payload type */ if (ms_filter_codec_supported(payload->mime_type)){ MSFilterDesc *desc=ms_filter_get_encoder(payload->mime_type); ms_message("Adding new codec %s/%i",payload->mime_type,payload->clock_rate); payload_type_set_enable(payload,1); payload_type_set_user_data(payload,(void *)desc->text); prepend=FALSE; /* by default, put speex and theora on top of list*/ if (strcmp(payload->mime_type,"speex")==0) prepend=TRUE; if (strcmp(payload->mime_type,"theora")==0) prepend=TRUE; switch (payload->type){ case PAYLOAD_AUDIO_CONTINUOUS: case PAYLOAD_AUDIO_PACKETIZED: if (prepend) audiopt=ms_list_prepend(audiopt,(void *)payload); else audiopt=ms_list_append(audiopt,(void *)payload); break; case PAYLOAD_VIDEO: if (prepend) videopt=ms_list_prepend(videopt,(void *)payload); else videopt=ms_list_append(videopt,(void *)payload); break; default: ms_error("Unsupported rtp media type."); } } } } ms_list_for_each(lc->codecs_conf.audio_codecs,(void (*)(void*))payload_type_destroy); ms_list_for_each(lc->codecs_conf.video_codecs,(void (*)(void *))payload_type_destroy); ms_list_free(lc->codecs_conf.audio_codecs); ms_list_free(lc->codecs_conf.video_codecs); /* set the fixed lists instead:*/ lc->codecs_conf.audio_codecs=audiopt; lc->codecs_conf.video_codecs=videopt; }
void ms_web_cam_manager_destroy(void){ if (scm!=NULL){ ms_list_for_each(scm->cams,(void (*)(void*))ms_web_cam_destroy); ms_list_free(scm->cams); ms_list_free(scm->descs); } ms_free(scm); scm=NULL; }
static void linphone_vcard_phone_numbers_and_sip_addresses(void) { LinphoneVcard *lvc = linphone_vcard_new_from_vcard4_buffer("BEGIN:VCARD\r\nVERSION:4.0\r\nFN:Sylvain Berfini\r\nIMPP:sip:[email protected]\r\nIMPP;TYPE=home:sip:[email protected]\r\nTEL;TYPE=work:0952636505\r\nEND:VCARD\r\n"); LinphoneFriend *lf = linphone_friend_new_from_vcard(lvc); MSList *sip_addresses = linphone_friend_get_addresses(lf); MSList *phone_numbers = linphone_friend_get_phone_numbers(lf); LinphoneAddress *addr = NULL; BC_ASSERT_EQUAL(ms_list_size(sip_addresses), 2, int, "%i"); BC_ASSERT_EQUAL(ms_list_size(phone_numbers), 1, int, "%i"); if (sip_addresses) ms_list_free_with_data(sip_addresses, (void (*)(void *))linphone_address_unref); if (phone_numbers) ms_list_free(phone_numbers); linphone_friend_unref(lf); lvc = linphone_vcard_new_from_vcard4_buffer("BEGIN:VCARD\r\nVERSION:4.0\r\nFN:Sylvain Berfini\r\nTEL;TYPE=work:0952636505\r\nTEL:0476010203\r\nEND:VCARD\r\n"); lf = linphone_friend_new_from_vcard(lvc); sip_addresses = linphone_friend_get_addresses(lf); phone_numbers = linphone_friend_get_phone_numbers(lf); BC_ASSERT_EQUAL(ms_list_size(sip_addresses), 0, int, "%i"); BC_ASSERT_EQUAL(ms_list_size(phone_numbers), 2, int, "%i"); if (sip_addresses) ms_list_free_with_data(sip_addresses, (void (*)(void *))linphone_address_unref); if (phone_numbers) ms_list_free(phone_numbers); addr = linphone_address_new("sip:[email protected]"); linphone_friend_add_address(lf, addr); linphone_address_unref(addr); sip_addresses = linphone_friend_get_addresses(lf); BC_ASSERT_EQUAL(ms_list_size(sip_addresses), 1, int, "%i"); if (sip_addresses) ms_list_free_with_data(sip_addresses, (void (*)(void *))linphone_address_unref); linphone_friend_remove_phone_number(lf, "0952636505"); phone_numbers = linphone_friend_get_phone_numbers(lf); BC_ASSERT_EQUAL(ms_list_size(phone_numbers), 1, int, "%i"); if (phone_numbers) ms_list_free(phone_numbers); linphone_friend_remove_phone_number(lf, "0476010203"); phone_numbers = linphone_friend_get_phone_numbers(lf); BC_ASSERT_EQUAL(ms_list_size(phone_numbers), 0, int, "%i"); if (phone_numbers) ms_list_free(phone_numbers); addr = linphone_address_new("sip:[email protected]"); linphone_friend_remove_address(lf, addr); linphone_address_unref(addr); sip_addresses = linphone_friend_get_addresses(lf); BC_ASSERT_EQUAL(ms_list_size(sip_addresses), 0, int, "%i"); if (sip_addresses) ms_list_free_with_data(sip_addresses, (void (*)(void *))linphone_address_unref); linphone_friend_add_phone_number(lf, "+33952636505"); phone_numbers = linphone_friend_get_phone_numbers(lf); BC_ASSERT_EQUAL(ms_list_size(phone_numbers), 1, int, "%i"); if (phone_numbers) ms_list_free(phone_numbers); linphone_friend_unref(lf); lf = NULL; lvc = NULL; }
void ms_filter_unregister_all(){ if (desc_list!=NULL) { ms_list_free(desc_list); desc_list=NULL; } if (stats_list!=NULL){ ms_list_for_each(stats_list,ms_free); ms_list_free(stats_list); stats_list=NULL; } }
/** * Destroy the factory. * This should be done after destroying all objects created by the factory. **/ void ms_factory_destroy(MSFactory *factory){ ms_factory_uninit_plugins(factory); if (factory->evq) ms_event_queue_destroy(factory->evq); factory->formats=ms_list_free_with_data(factory->formats,(void(*)(void*))ms_fmt_descriptor_destroy); factory->desc_list=ms_list_free(factory->desc_list); ms_list_for_each(factory->stats_list,ms_free); factory->stats_list=ms_list_free(factory->stats_list); ms_list_for_each(factory->platform_tags, ms_free); factory->platform_tags = ms_list_free(factory->platform_tags); if (factory->plugins_dir) ms_free(factory->plugins_dir); ms_free(factory); if (factory==fallback_factory) fallback_factory=NULL; }
void ms_snd_card_manager_destroy(void){ if (scm!=NULL){ MSList *elem; for(elem=scm->descs;elem!=NULL;elem=elem->next){ MSSndCardDesc *desc = (MSSndCardDesc*)elem->data; if (desc->unload!=NULL) desc->unload(scm); } ms_list_for_each(scm->cards,(void (*)(void*))ms_snd_card_destroy); ms_list_free(scm->cards); ms_list_free(scm->descs); } ms_free(scm); scm=NULL; }
void lp_section_destroy(LpSection *sec){ ortp_free(sec->name); ms_list_for_each(sec->items,lp_item_destroy); ms_list_for_each(sec->params,lp_section_param_destroy); ms_list_free(sec->items); free(sec); }
static void linphone_ldap_contact_search_destroy( LinphoneLDAPContactSearch* obj ) { //ms_message("~LinphoneLDAPContactSearch(%p)", obj); ms_list_for_each(obj->found_entries, linphone_ldap_contact_search_destroy_friend); obj->found_entries = ms_list_free(obj->found_entries); if( obj->filter ) ms_free(obj->filter); }
static void io_recv_error_without_active_register(){ LinphoneCoreManager *mgr; LinphoneCore* lc; int register_ok; stats* counters ; int number_of_udp_proxy=0; MSList* proxys; mgr=configure_lcm(); lc=mgr->lc; counters = get_stats(lc); register_ok=counters->number_of_LinphoneRegistrationOk; number_of_udp_proxy=get_number_of_udp_proxy(lc); for (proxys=ms_list_copy(linphone_core_get_proxy_config_list(lc));proxys!=NULL;proxys=proxys->next) { LinphoneProxyConfig* proxy_cfg=(LinphoneProxyConfig*)proxys->data; linphone_proxy_config_edit(proxy_cfg); linphone_proxy_config_enable_register(proxy_cfg,FALSE); linphone_proxy_config_done(proxy_cfg); } ms_list_free(proxys); CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationCleared,register_ok /*because 1 udp*/)); sal_set_recv_error(lc->sal, 0); /*nothing should happen because no active registration*/ CU_ASSERT_FALSE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationProgress,2*(register_ok-number_of_udp_proxy) /*because 1 udp*/)); CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0) sal_set_recv_error(lc->sal, 1); /*reset*/ linphone_core_manager_destroy(mgr); }
/** * Adds authentication information to the LinphoneCore. * * This information will be used during all SIP transacations that require authentication. **/ void linphone_core_add_auth_info(LinphoneCore *lc, const LinphoneAuthInfo *info) { LinphoneAuthInfo *ai; MSList *elem; MSList *l; /* find if we are attempting to modify an existing auth info */ ai=(LinphoneAuthInfo*)linphone_core_find_auth_info(lc,info->realm,info->username); if (ai!=NULL){ lc->auth_info=ms_list_remove(lc->auth_info,ai); linphone_auth_info_destroy(ai); } lc->auth_info=ms_list_append(lc->auth_info,linphone_auth_info_clone(info)); /* retry pending authentication operations */ for(l=elem=sal_get_pending_auths(lc->sal);elem!=NULL;elem=elem->next){ const char *username,*realm; SalOp *op=(SalOp*)elem->data; LinphoneAuthInfo *ai; sal_op_get_auth_requested(op,&realm,&username); ai=(LinphoneAuthInfo*)linphone_core_find_auth_info(lc,realm,username); if (ai){ SalAuthInfo sai; sai.username=ai->username; sai.userid=ai->userid; sai.realm=ai->realm; sai.password=ai->passwd; sal_op_authenticate(op,&sai); ai->usecount++; } } ms_list_free(l); write_auth_infos(lc); }
static void subscribe_forking(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc_tcp"); LinphoneCoreManager* pauline2 = linphone_core_manager_new( "pauline_rc_tcp"); LinphoneContent content={0}; LinphoneEvent *lev; int expires= 600; MSList* lcs=ms_list_append(NULL,marie->lc); lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,pauline2->lc); content.type="application"; content.subtype="somexml"; content.data=(char*)liblinphone_tester_get_subscribe_content(); content.size=strlen(liblinphone_tester_get_subscribe_content()); lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,&content); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline2->stat.number_of_LinphoneSubscriptionIncomingReceived,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,1000)); /*make sure marie receives first notification before terminating*/ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); linphone_event_terminate(lev); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(pauline2); ms_list_free(lcs); }
static void _lp_config_destroy(LpConfig *lpconfig){ if (lpconfig->filename!=NULL) ortp_free(lpconfig->filename); if (lpconfig->tmpfilename) ortp_free(lpconfig->tmpfilename); ms_list_for_each(lpconfig->sections,(void (*)(void*))lp_section_destroy); ms_list_free(lpconfig->sections); free(lpconfig); }
MSList* linphone_friend_get_addresses(LinphoneFriend *lf) { LinphoneVcard *vcard = NULL; MSList *sipAddresses = NULL; MSList *addresses = NULL; MSList *iterator = NULL; if (!lf) { return NULL; } vcard = linphone_friend_get_vcard(lf); if (!vcard) { return NULL; } sipAddresses = linphone_vcard_get_sip_addresses(vcard); iterator = sipAddresses; while (iterator) { const char *sipAddress = (const char *)iterator->data; LinphoneAddress *addr = linphone_address_new(sipAddress); if (addr) { addresses = ms_list_append(addresses, addr); } iterator = ms_list_next(iterator); } if (sipAddresses) ms_list_free(sipAddresses); return addresses; }
void ms_video_presets_manager_destroy(MSVideoPresetsManager *manager) { if (manager != NULL) { ms_list_for_each(manager->presets, (MSIterateFunc)free_preset); ms_list_free(manager->presets); ms_free(manager); } }
void ms_snd_card_manager_reload(MSSndCardManager *m){ MSList *elem; ms_list_for_each(m->cards,(void (*)(void*))ms_snd_card_destroy); ms_list_free(m->cards); m->cards=NULL; for(elem=m->descs;elem!=NULL;elem=elem->next) card_detect(m,(MSSndCardDesc*)elem->data); }
void buddy_lookup_request_free(BuddyLookupRequest *req){ if (req->key) ms_free(req->key); if (req->results){ ms_list_for_each(req->results,(void (*)(void*))buddy_info_free); ms_list_free(req->results); } ms_free(req); }
void ms_web_cam_manager_reload(MSWebCamManager *m){ MSList *elem; ms_list_for_each(m->cams,(void (*)(void*))ms_web_cam_destroy); ms_list_free(m->cams); m->cams=NULL; for(elem=m->descs;elem!=NULL;elem=elem->next) cam_detect(m,(MSWebCamDesc*)elem->data); }
static void sal_media_description_destroy(SalMediaDescription *md){ int i; for(i=0;i<SAL_MEDIA_DESCRIPTION_MAX_STREAMS;i++){ ms_list_for_each(md->streams[i].payloads,(void (*)(void *))payload_type_destroy); ms_list_free(md->streams[i].payloads); md->streams[i].payloads=NULL; } ms_free(md); }
void linphone_destroy_qos(LinhoneQos *qos) { if (!qos) return; ms_list_for_each(qos->list, (MSIterateFunc)qos_release_analyze_list); ms_list_free(qos->list); ms_free(qos); }
/** * Erase all proxies from config. * * @ingroup proxy **/ void linphone_core_clear_proxy_config(LinphoneCore *lc){ MSList* list=ms_list_copy(linphone_core_get_proxy_config_list((const LinphoneCore*)lc)); MSList* copy=list; for(;list!=NULL;list=list->next){ linphone_core_remove_proxy_config(lc,(LinphoneProxyConfig *)list->data); } ms_list_free(copy); linphone_proxy_config_write_all_to_config_file(lc); }
static void conf_stream_free(LinphoneConferenceStream *stream) { if(stream->audio_ticker!=NULL)ms_ticker_destroy(stream->audio_ticker); if(stream->audio_fileplayer!=NULL) ms_filter_destroy(stream->audio_fileplayer); if(stream->audio_filerecorder!=NULL) ms_filter_destroy(stream->audio_filerecorder); if(stream->audio_mixer!=NULL) ms_filter_destroy(stream->audio_mixer); if(stream->audio_record_sink!=NULL) ms_filter_destroy(stream->audio_record_sink); if(stream->video_record_sink!=NULL) ms_filter_destroy(stream->video_record_sink); MSList *list = stream->audio_ports; for(;list!=NULL;list=list->next){ ConfAudioPort* port = (ConfAudioPort*) list->data; audio_slot_destory(port); } ms_list_free(stream->audio_ports); if(stream->has_video){ if(stream->video_ticker!=NULL){ ms_cond_destroy(&stream->video_ticker->cond); ms_ticker_destroy(stream->video_ticker); } if(stream->video_mixer!=NULL) ms_filter_destroy(stream->video_mixer); if(stream->video_output!=NULL) ms_filter_destroy(stream->video_output); if(stream->video_static_image!=NULL) ms_filter_destroy(stream->video_static_image); if(stream->video_static_image_tee!=NULL) ms_filter_destroy(stream->video_static_image_tee); MSList *list = stream->video_ports; for(;list!=NULL;list=list->next){ ConfVideoPort* port = (ConfVideoPort*) list->data; video_slot_destory(port); } ms_list_free(stream->video_ports); } if(stream->display_name!=NULL) ms_free(stream->display_name); if(stream->static_image_path!=NULL) ms_free(stream->static_image_path); ms_free(stream); }
void sip_setup_unregister_all(void) { MSList *elem; for(elem=registered_sip_setups; elem!=NULL; elem=elem->next) { SipSetup *ss=(SipSetup*)elem->data; if (ss->initialized) { if (ss->exit) ss->exit(); ss->initialized=FALSE; } } registered_sip_setups = ms_list_free(registered_sip_setups); }
bool_t wait_for_until(LinphoneCore* lc_1, LinphoneCore* lc_2,int* counter,int value,int timout) { MSList* lcs=NULL; bool_t result; if (lc_1) lcs=ms_list_append(lcs,lc_1); if (lc_2) lcs=ms_list_append(lcs,lc_2); result=wait_for_list(lcs,counter,value,timout); ms_list_free(lcs); return result; }
static void call_forking_declined(bool_t declined_globaly){ LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc_tcp"); LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* marie3 = linphone_core_manager_new( "marie_rc"); MSList* lcs=ms_list_append(NULL,pauline->lc); lcs=ms_list_append(lcs,marie->lc); lcs=ms_list_append(lcs,marie2->lc); lcs=ms_list_append(lcs,marie3->lc); linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(marie2->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(marie3->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL); linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback*/ CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*all devices from Marie should be ringing*/ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*marie1 finally declines the call*/ linphone_core_decline_call(marie->lc,linphone_core_get_current_call(marie->lc), declined_globaly ? LinphoneReasonDeclined : LinphoneReasonBusy ); if (declined_globaly){ CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); /*all devices should stop ringing*/ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); }else{ /*pauline should continue ringing and be able to hear a call taken by marie2 */ linphone_core_accept_call(marie2->lc, linphone_core_get_current_call(marie2->lc)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallStreamsRunning,1,2000)); liblinphone_tester_check_rtcp(pauline,marie2); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_terminate_call(marie2->lc,linphone_core_get_current_call(marie2->lc)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); } linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(marie3); ms_list_free(lcs); }
/** * Clear all authentication information. **/ void linphone_core_clear_all_auth_info(LinphoneCore *lc){ MSList *elem; int i; for(i=0,elem=lc->auth_info;elem!=NULL;elem=ms_list_next(elem),i++){ LinphoneAuthInfo *info=(LinphoneAuthInfo*)elem->data; linphone_auth_info_destroy(info); linphone_auth_info_write_config(lc->config,NULL,i); } ms_list_free(lc->auth_info); lc->auth_info=NULL; }
bool_t wait_for_three_cores(LinphoneCore *lc1, LinphoneCore *lc2, LinphoneCore *lc3, int timeout) { MSList *lcs = NULL; bool_t result; int dummy = 0; if (lc1) lcs = ms_list_append(lcs, lc1); if (lc2) lcs = ms_list_append(lcs, lc2); if (lc3) lcs = ms_list_append(lcs, lc3); result = wait_for_list(lcs, &dummy, 1, timeout); ms_list_free(lcs); return result; }