diff --git a/coreapi/chat.c b/coreapi/chat.c index f67e0c9eb..dbbec6ff8 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -44,6 +44,7 @@ static void linphone_chat_room_delete_remote_composing_refresh_timer(LinphoneCha static void _linphone_chat_message_destroy(LinphoneChatMessage *msg); static void linphone_chat_room_notify_is_composing(LinphoneChatRoom *cr, const char *text); static void linphone_chat_room_notify_imdn(LinphoneChatRoom *cr, const char *text); +static void linphone_chat_message_deactivate(LinphoneChatMessage *msg); BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneChatMessageCbs); @@ -310,6 +311,7 @@ void linphone_chat_room_release(LinphoneChatRoom *cr) { linphone_chat_room_delete_composing_idle_timer(cr); linphone_chat_room_delete_composing_refresh_timer(cr); linphone_chat_room_delete_remote_composing_refresh_timer(cr); + bctbx_list_for_each(cr->weak_messages, (bctbx_list_iterate_func)linphone_chat_message_deactivate); cr->lc = NULL; linphone_chat_room_unref(cr); } @@ -1619,12 +1621,16 @@ void linphone_chat_message_unref(LinphoneChatMessage *msg) { belle_sip_object_unref(msg); } -static void linphone_chat_message_release(LinphoneChatMessage *msg) { - /*mark the chat msg as orphan (it has no chat room anymore), and unref it*/ +static void linphone_chat_message_deactivate(LinphoneChatMessage *msg){ + /*mark the chat msg as orphan (it has no chat room anymore)*/ msg->chat_room = NULL; if (msg->file_transfer_information != NULL) { linphone_chat_message_cancel_file_transfer(msg); } +} + +static void linphone_chat_message_release(LinphoneChatMessage *msg) { + linphone_chat_message_deactivate(msg); linphone_chat_message_unref(msg); } diff --git a/coreapi/chat_file_transfer.c b/coreapi/chat_file_transfer.c index d9dac9011..7c83ec52d 100644 --- a/coreapi/chat_file_transfer.c +++ b/coreapi/chat_file_transfer.c @@ -78,7 +78,7 @@ static void linphone_chat_message_process_auth_requested_download(void *data, be static void linphone_chat_message_file_transfer_on_progress(belle_sip_body_handler_t *bh, belle_sip_message_t *m, void *data, size_t offset, size_t total) { LinphoneChatMessage *msg = (LinphoneChatMessage *)data; - if (msg->http_request && !file_transfer_in_progress_and_valid(msg)) { + if (!file_transfer_in_progress_and_valid(msg)) { ms_warning("Cancelled request for %s msg [%p], ignoring %s", msg->chat_room?"":"ORPHAN", msg, __FUNCTION__); _release_http_request(msg); return; diff --git a/coreapi/lime.h b/coreapi/lime.h index 7574c53d7..616a74059 100644 --- a/coreapi/lime.h +++ b/coreapi/lime.h @@ -92,7 +92,7 @@ LINPHONE_PUBLIC int lime_getCachedRcvKeyByZid(xmlDocPtr cacheBuffer, limeKey_t * * @return 0 on success, error code otherwise */ -LINPHONE_PUBLIC int lime_setCachedKey(xmlDocPtr cacheBuffer, limeKey_t *associatedKey, const uint8_t role, uint64_t validityTimeSpan); +LINPHONE_PUBLIC int lime_setCachedKey(xmlDocPtr cacheBuffer, limeKey_t *associatedKey, uint8_t role, uint64_t validityTimeSpan); /** * @brief Free all allocated data in the associated keys structure diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 8f7eba66a..24a8ea09f 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -41,6 +41,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "mediastreamer2/mssndcard.h" #include "mediastreamer2/msrtt4103.h" + static const char *EC_STATE_STORE = ".linphone.ecstate"; #define EC_STATE_MAX_LEN 1048576 // 1Mo @@ -4086,12 +4087,16 @@ float linphone_call_get_average_quality(LinphoneCall *call){ } static void update_local_stats(LinphoneCallStats *stats, MediaStream *stream) { + PayloadType *pt; + RtpSession *session = stream->sessions.rtp_session; const MSQualityIndicator *qi = media_stream_get_quality_indicator(stream); if (qi) { stats->local_late_rate=ms_quality_indicator_get_local_late_rate(qi); stats->local_loss_rate=ms_quality_indicator_get_local_loss_rate(qi); } media_stream_get_local_rtp_stats(stream, &stats->rtp_stats); + pt = rtp_profile_get_payload(rtp_session_get_profile(session), rtp_session_get_send_payload_type(session)); + stats->clockrate = pt ? pt->clock_rate : 8000; } const LinphoneCallStats *linphone_call_get_audio_stats(LinphoneCall *call) { @@ -4164,15 +4169,10 @@ float linphone_call_stats_get_receiver_loss_rate(const LinphoneCallStats *stats) return 100.0f * report_block_get_fraction_lost(rrb) / 256.0f; } -float linphone_call_stats_get_sender_interarrival_jitter(const LinphoneCallStats *stats, LinphoneCall *call) { - const LinphoneCallParams *params; - const PayloadType *pt; +float linphone_call_stats_get_sender_interarrival_jitter(const LinphoneCallStats *stats) { const report_block_t *srb = NULL; - - if (!stats || !call || !stats->sent_rtcp) - return 0.0; - params = linphone_call_get_current_params(call); - if (!params) + + if (!stats || !stats->sent_rtcp) return 0.0; /* Perform msgpullup() to prevent crashes in rtcp_is_SR() or rtcp_is_RR() if the RTCP packet is composed of several mblk_t structure */ if (stats->sent_rtcp->b_cont != NULL) @@ -4183,24 +4183,15 @@ float linphone_call_stats_get_sender_interarrival_jitter(const LinphoneCallStats srb = rtcp_RR_get_report_block(stats->sent_rtcp, 0); if (!srb) return 0.0; - if (stats->type == LINPHONE_CALL_STATS_AUDIO) - pt = linphone_call_params_get_used_audio_codec(params); - else - pt = linphone_call_params_get_used_video_codec(params); - if (!pt || (pt->clock_rate == 0)) + if (stats->clockrate == 0) return 0.0; - return (float)report_block_get_interarrival_jitter(srb) / (float)pt->clock_rate; + return (float)report_block_get_interarrival_jitter(srb) / (float)stats->clockrate; } -float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallStats *stats, LinphoneCall *call) { - const LinphoneCallParams *params; - const PayloadType *pt; +float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallStats *stats) { const report_block_t *rrb = NULL; - if (!stats || !call || !stats->received_rtcp) - return 0.0; - params = linphone_call_get_current_params(call); - if (!params) + if (!stats || !stats->received_rtcp) return 0.0; /* Perform msgpullup() to prevent crashes in rtcp_is_SR() or rtcp_is_RR() if the RTCP packet is composed of several mblk_t structure */ if (stats->received_rtcp->b_cont != NULL) @@ -4211,13 +4202,9 @@ float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallSta rrb = rtcp_RR_get_report_block(stats->received_rtcp, 0); if (!rrb) return 0.0; - if (stats->type == LINPHONE_CALL_STATS_AUDIO) - pt = linphone_call_params_get_used_audio_codec(params); - else - pt = linphone_call_params_get_used_video_codec(params); - if (!pt || (pt->clock_rate == 0)) + if (stats->clockrate == 0) return 0.0; - return (float)report_block_get_interarrival_jitter(rrb) / (float)pt->clock_rate; + return (float)report_block_get_interarrival_jitter(rrb) / (float)stats->clockrate; } const rtp_stats_t *linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats) { @@ -4262,47 +4249,29 @@ void linphone_call_stop_recording(LinphoneCall *call){ call->record_active=FALSE; } -static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *vs, MediaStream *ts){ - bool_t as_active = as ? (media_stream_get_state(as) == MSStreamStarted) : FALSE; - bool_t vs_active = vs ? (media_stream_get_state(vs) == MSStreamStarted) : FALSE; - bool_t ts_active = ts ? (media_stream_get_state(ts) == MSStreamStarted) : FALSE; - - call->stats[LINPHONE_CALL_STATS_AUDIO].download_bandwidth=(as_active) ? (float)(media_stream_get_down_bw(as)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_AUDIO].upload_bandwidth=(as_active) ? (float)(media_stream_get_up_bw(as)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_VIDEO].download_bandwidth=(vs_active) ? (float)(media_stream_get_down_bw(vs)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_VIDEO].upload_bandwidth=(vs_active) ? (float)(media_stream_get_up_bw(vs)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_TEXT].download_bandwidth=(ts_active) ? (float)(media_stream_get_down_bw(ts)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_TEXT].upload_bandwidth=(ts_active) ? (float)(media_stream_get_up_bw(ts)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_download_bandwidth=(as_active) ? (float)(media_stream_get_rtcp_down_bw(as)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_upload_bandwidth=(as_active) ? (float)(media_stream_get_rtcp_up_bw(as)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_download_bandwidth=(vs_active) ? (float)(media_stream_get_rtcp_down_bw(vs)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_upload_bandwidth=(vs_active) ? (float)(media_stream_get_rtcp_up_bw(vs)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_TEXT].rtcp_download_bandwidth=(ts_active) ? (float)(media_stream_get_rtcp_down_bw(ts)*1e-3) : 0.f; - call->stats[LINPHONE_CALL_STATS_TEXT].rtcp_upload_bandwidth=(ts_active) ? (float)(media_stream_get_rtcp_up_bw(ts)*1e-3) : 0.f; - /* If not ipV6, it's not necessary IpV4, should be UNSPEC, TODO */ - call->stats[LINPHONE_CALL_STATS_AUDIO].rtp_remote_family=(as_active) - ? ((ortp_stream_is_ipv6((OrtpStream*)&(as->sessions.rtp_session->rtp.gs))) ? LinphoneAddressFamilyInet6 : LinphoneAddressFamilyInet) : LinphoneAddressFamilyUnspec; - call->stats[LINPHONE_CALL_STATS_VIDEO].rtp_remote_family=(vs_active) - ? ((ortp_stream_is_ipv6((OrtpStream*)&(vs->sessions.rtp_session->rtp.gs))) ? LinphoneAddressFamilyInet6 : LinphoneAddressFamilyInet) : LinphoneAddressFamilyUnspec; - call->stats[LINPHONE_CALL_STATS_TEXT].rtp_remote_family=(ts_active) - ? ((ortp_stream_is_ipv6((OrtpStream*)&(ts->sessions.rtp_session->rtp.gs))) ? LinphoneAddressFamilyInet6 : LinphoneAddressFamilyInet) : LinphoneAddressFamilyUnspec; - +static void report_bandwidth_for_stream(LinphoneCall *call, MediaStream *ms, LinphoneStreamType type){ + bool_t active = ms ? (media_stream_get_state(ms) == MSStreamStarted) : FALSE; + LinphoneCallStats *stats = &call->stats[type]; + + stats->download_bandwidth=(active) ? (float)(media_stream_get_down_bw(ms)*1e-3) : 0.f; + stats->upload_bandwidth=(active) ? (float)(media_stream_get_up_bw(ms)*1e-3) : 0.f; + stats->rtcp_download_bandwidth=(active) ? (float)(media_stream_get_rtcp_down_bw(ms)*1e-3) : 0.f; + stats->rtcp_upload_bandwidth=(active) ? (float)(media_stream_get_rtcp_up_bw(ms)*1e-3) : 0.f; + stats->rtp_remote_family=(active) + ? (ortp_stream_is_ipv6(&ms->sessions.rtp_session->rtp.gs) ? LinphoneAddressFamilyInet6 : LinphoneAddressFamilyInet) : LinphoneAddressFamilyUnspec; + if (call->core->send_call_stats_periodical_updates){ - call->stats[LINPHONE_CALL_STATS_AUDIO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE; - linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]); - call->stats[LINPHONE_CALL_STATS_AUDIO].updated=0; - if (as_active) update_local_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO], as); - - call->stats[LINPHONE_CALL_STATS_VIDEO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE; - linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]); - call->stats[LINPHONE_CALL_STATS_VIDEO].updated=0; - if (vs_active) update_local_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO], vs); - - call->stats[LINPHONE_CALL_STATS_TEXT].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE; - linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_TEXT]); - call->stats[LINPHONE_CALL_STATS_TEXT].updated=0; - if (ts_active) update_local_stats(&call->stats[LINPHONE_CALL_STATS_TEXT], ts); + if (active) update_local_stats(stats, ms); + stats->updated |= LINPHONE_CALL_STATS_PERIODICAL_UPDATE; + linphone_core_notify_call_stats_updated(call->core, call, stats); + stats->updated=0; } +} + +static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *vs, MediaStream *ts){ + report_bandwidth_for_stream(call, as, LinphoneStreamTypeAudio); + report_bandwidth_for_stream(call, vs, LinphoneStreamTypeVideo); + report_bandwidth_for_stream(call, ts, LinphoneStreamTypeText); ms_message( "Bandwidth usage for call [%p]:\n" "\tRTP audio=[d=%5.1f,u=%5.1f], video=[d=%5.1f,u=%5.1f], text=[d=%5.1f,u=%5.1f] kbits/sec\n" diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 7fe1dff33..923279c14 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -2859,7 +2859,7 @@ void linphone_core_iterate(LinphoneCore *lc){ linphone_core_run_hooks(lc); linphone_core_do_plugin_tasks(lc); - if (lc->sip_network_reachable && lc->netup_time!=0 && (current_real_time-lc->netup_time)>3){ + if (lc->sip_network_reachable && lc->netup_time!=0 && (current_real_time-lc->netup_time)>=2){ /*not do that immediately, take your time.*/ linphone_core_send_initial_subscribes(lc); } diff --git a/coreapi/misc.c b/coreapi/misc.c index fa50c17c3..1d36282c7 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -1372,7 +1372,7 @@ const char *linphone_core_get_tone_file(const LinphoneCore *lc, LinphoneToneID i } void _linphone_core_set_tone(LinphoneCore *lc, LinphoneReason reason, LinphoneToneID id, const char *audiofile){ - LinphoneToneDescription *tone=linphone_core_get_call_error_tone(lc,reason); + LinphoneToneDescription *tone = linphone_core_lookup_tone(lc,reason, id); if (tone){ lc->tones=bctbx_list_remove(lc->tones,tone); linphone_tone_description_destroy(tone); @@ -1589,7 +1589,10 @@ bool_t linphone_core_file_format_supported(LinphoneCore *lc, const char *fmt){ } bool_t linphone_core_symmetric_rtp_enabled(LinphoneCore*lc){ - return lp_config_get_int(lc->config,"rtp","symmetric",1); + /* Clients don't really need rtp symmetric, unless they have a public IP address and want + * to interoperate with natted client. This case is not frequent with client apps. + */ + return lp_config_get_int(lc->config,"rtp","symmetric",0); } int linphone_core_set_network_simulator_params(LinphoneCore *lc, const OrtpNetworkSimulatorParams *params){ diff --git a/include/linphone/call_stats.h b/include/linphone/call_stats.h index 38519be26..a77cee580 100644 --- a/include/linphone/call_stats.h +++ b/include/linphone/call_stats.h @@ -52,23 +52,24 @@ typedef struct _LinphoneCallStats LinphoneCallStats; * At any time, the application can access last computed statistics using linphone_call_get_audio_stats() or linphone_call_get_video_stats(). **/ struct _LinphoneCallStats { - LinphoneStreamType type; /**< Type of the stream which the stats refer to */ - jitter_stats_t jitter_stats; /**stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,10000)); } #endif if (audio_dir != LinphoneMediaDirectionInvalid){ diff --git a/tester/call_video_tester.c b/tester/call_video_tester.c index c598beec9..c26dad204 100644 --- a/tester/call_video_tester.c +++ b/tester/call_video_tester.c @@ -1255,6 +1255,9 @@ static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, Linphone linphone_core_set_video_policy(marie->lc,&pol); linphone_core_set_video_device(marie->lc,liblinphone_tester_mire_id); + /*The send-only client shall set rtp symmetric in absence of media relay for this test.*/ + lp_config_set_int(marie->lc->config,"rtp","symmetric",1); + linphone_call_set_next_video_frame_decoded_callback(linphone_core_invite_address(pauline->lc,marie->identity) ,linphone_call_iframe_decoded_cb ,pauline->lc); @@ -1303,7 +1306,6 @@ static void accept_call_in_send_base(bool_t caller_has_ice) { accept_call_in_send_only_base(pauline,marie,lcs); - end_call(marie,pauline); bctbx_list_free(lcs); linphone_core_manager_destroy(marie); @@ -1540,7 +1542,11 @@ static void classic_video_entry_phone_setup(void) { if (ms_factory_get_encoder(linphone_core_get_ms_factory(callee_mgr->lc), "H264")->id == MS_VT_H264_ENC_ID){ MSVideoSize vsize = MS_VIDEO_SIZE_VGA; linphone_core_set_preferred_video_size(callee_mgr->lc, vsize); - linphone_core_set_preferred_video_size(callee_mgr->lc, vsize); + linphone_core_set_preferred_video_size(caller_mgr->lc, vsize); + linphone_core_set_download_bandwidth(callee_mgr->lc, 512); + linphone_core_set_download_bandwidth(caller_mgr->lc, 512); + linphone_core_set_upload_bandwidth(callee_mgr->lc, 512); + linphone_core_set_upload_bandwidth(caller_mgr->lc, 512); } } diff --git a/tester/presence_server_tester.c b/tester/presence_server_tester.c index 6857f4bbb..1e13d418f 100644 --- a/tester/presence_server_tester.c +++ b/tester/presence_server_tester.c @@ -162,7 +162,7 @@ static void subscriber_no_longer_reachable(void){ linphone_core_send_initial_subscribes(lc); } */ - wait_for_until(pauline1->lc, marie->lc, 0, 0, 3000); + wait_for_until(pauline1->lc, marie->lc, 0, 0, 4000); presence =linphone_presence_model_new_with_activity(LinphonePresenceActivityBusy,NULL); linphone_core_set_presence_model(pauline1->lc,presence); diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index c3d4ffc44..912c581d0 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -386,7 +386,7 @@ static void quality_reporting_interval_report_video_and_rtt(void) { if (create_call_for_quality_reporting_tests(marie, pauline, &call_marie, &call_pauline, marie_params, pauline_params)) { linphone_reporting_set_on_report_send(call_marie, on_report_send_mandatory); - linphone_proxy_config_set_quality_reporting_interval(call_marie->dest_proxy, 1); + linphone_proxy_config_set_quality_reporting_interval(call_marie->dest_proxy, 3); BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,NULL,0,3000)); BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(call_pauline))); @@ -396,8 +396,8 @@ static void quality_reporting_interval_report_video_and_rtt(void) { BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(pauline->lc)); // PUBLISH submission to the collector should be ok - BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1,60000)); - BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,1,60000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1,5000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,1,10000)); pauline_chat_room = linphone_call_get_chat_room(call_pauline); BC_ASSERT_PTR_NOT_NULL(pauline_chat_room); @@ -414,10 +414,10 @@ static void quality_reporting_interval_report_video_and_rtt(void) { } linphone_chat_room_send_chat_message(pauline_chat_room, rtt_message); } - + end_call(marie, pauline); - /*wait for publish triggered by the end of call to be completed*/ - wait_for_until(marie->lc,pauline->lc,NULL,0,6000); + /*wait that all publish complete*/ + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,marie->stat.number_of_LinphonePublishProgress,15000)); } linphone_call_params_unref(marie_params); diff --git a/tester/setup_tester.c b/tester/setup_tester.c index 4182ab6b0..2a4b08391 100644 --- a/tester/setup_tester.c +++ b/tester/setup_tester.c @@ -383,6 +383,25 @@ static void codec_setup(void){ } +static void custom_tones_setup(void){ + LinphoneCoreManager *mgr = linphone_core_manager_new2("empty_rc", FALSE); + const char *tone; + + linphone_core_set_tone(mgr->lc, LinphoneToneCallOnHold, "callonhold.wav"); + tone = linphone_core_get_tone_file(mgr->lc, LinphoneToneCallOnHold); + BC_ASSERT_PTR_NOT_NULL(tone); + if (tone){ + BC_ASSERT_STRING_EQUAL(tone, "callonhold.wav"); + } + linphone_core_set_tone(mgr->lc, LinphoneToneCallOnHold, "callonhold2.wav"); + tone = linphone_core_get_tone_file(mgr->lc, LinphoneToneCallOnHold); + BC_ASSERT_PTR_NOT_NULL(tone); + if (tone){ + BC_ASSERT_STRING_EQUAL(tone, "callonhold2.wav"); + } + linphone_core_manager_destroy(mgr); +} + test_t setup_tests[] = { TEST_NO_TAG("Version check", linphone_version_test), TEST_NO_TAG("Linphone Address", linphone_address_test), @@ -398,7 +417,8 @@ test_t setup_tests[] = { TEST_NO_TAG("Chat room", chat_room_test), TEST_NO_TAG("Devices reload", devices_reload_test), TEST_NO_TAG("Codec usability", codec_usability_test), - TEST_NO_TAG("Codec setup", codec_setup) + TEST_NO_TAG("Codec setup", codec_setup), + TEST_NO_TAG("Custom tones setup", custom_tones_setup) }; test_suite_t setup_test_suite = {"Setup", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,