static void info_message_with_args(bool_t with_content) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); LinphoneInfoMessage *info; const LinphoneContent *content; const char *hvalue; CU_ASSERT_TRUE(call(pauline,marie)); info=linphone_core_create_info_message(marie->lc); linphone_info_message_add_header(info,"Weather","still bad"); if (with_content) { LinphoneContent* ct=linphone_core_create_content(marie->lc); linphone_content_set_type(ct,"application"); linphone_content_set_subtype(ct,"somexml"); linphone_content_set_buffer(ct,info_content,strlen(info_content)); linphone_info_message_set_content(info,ct); linphone_content_unref(ct); } { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ reset_counters(&marie->stat); reset_counters(&pauline->stat); } linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),info); linphone_info_message_destroy(info); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_inforeceived,1)); CU_ASSERT_PTR_NOT_NULL(pauline->stat.last_received_info_message); hvalue=linphone_info_message_get_header(pauline->stat.last_received_info_message, "Weather"); content=linphone_info_message_get_content(pauline->stat.last_received_info_message); CU_ASSERT_PTR_NOT_NULL(hvalue); if (hvalue) CU_ASSERT_TRUE(strcmp(hvalue,"still bad")==0); if (with_content){ CU_ASSERT_PTR_NOT_NULL(content); if (content) { CU_ASSERT_PTR_NOT_NULL(linphone_content_get_buffer(content)); CU_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content)); CU_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content)); if (linphone_content_get_type(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0); if (linphone_content_get_subtype(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0); if (linphone_content_get_buffer(content))CU_ASSERT_TRUE(strcmp((const char*)linphone_content_get_buffer(content),info_content)==0); CU_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content)); } } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); }
void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, SalStreamType stream_type, const LinphoneContent *content){ char * body = (char*)linphone_content_get_buffer(content); char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; on_report_send_mandatory(call,stream_type,content); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); BC_ASSERT_TRUE(!remote_metrics_start || on_report_send_verify_metrics(&report->local_metrics,body) < remote_metrics_start); }
static void linphone_content_clone(LinphoneContent *obj, const LinphoneContent *ref) { obj->owned_fields = TRUE; linphone_content_set_sal_body_handler(obj, sal_body_handler_new()); if ((linphone_content_get_type(ref) != NULL) || (linphone_content_get_subtype(ref) != NULL)) { linphone_content_set_type(obj, linphone_content_get_type(ref)); linphone_content_set_subtype(obj, linphone_content_get_subtype(ref)); } if (linphone_content_get_encoding(ref) != NULL) { linphone_content_set_encoding(obj, linphone_content_get_encoding(ref)); } linphone_content_set_name(obj, linphone_content_get_name(ref)); linphone_content_set_key(obj, linphone_content_get_key(ref), linphone_content_get_key_size(ref)); if (linphone_content_get_buffer(ref) != NULL) { linphone_content_set_buffer(obj, linphone_content_get_buffer(ref), linphone_content_get_size(ref)); } else { linphone_content_set_size(obj, linphone_content_get_size(ref)); } }
void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content){ LinphoneCoreManager *mgr; const char * ua = linphone_event_get_custom_header(lev, "User-Agent"); BC_ASSERT_PTR_NOT_NULL_FATAL(content); if (!linphone_content_is_multipart(content) && (!ua || !strstr(ua, "flexisip"))) { /*disable check for full presence serveur support*/ /*hack to disable content checking for list notify */ BC_ASSERT_STRING_EQUAL(notify_content,(const char*)linphone_content_get_buffer(content)); } mgr=get_manager(lc); mgr->stat.number_of_NotifyReceived++; }
void on_report_send_with_rtcp_xr_remote(const LinphoneCall *call, SalStreamType stream_type, const LinphoneContent *content){ char * body = (char*)linphone_content_get_buffer(content); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; on_report_send_mandatory(call,stream_type,content); if (report->remote_metrics.rtcp_sr_count+report->remote_metrics.rtcp_xr_count>0){ BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteMetrics:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); on_report_send_verify_metrics(&report->remote_metrics,body); } }
void on_report_send_mandatory(const LinphoneCall *call, SalStreamType stream_type, const LinphoneContent *content){ char * body = (char *)linphone_content_get_buffer(content); char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; MediaStream * ms; if (stream_type == LINPHONE_CALL_STATS_AUDIO){ ms = (MediaStream*)call->audiostream; }else{ ms = (MediaStream*)call->videostream; } BC_ASSERT_TRUE( __strstr(body, "VQIntervalReport\r\n") == body || __strstr(body, "VQSessionReport\r\n") == body || __strstr(body, "VQSessionReport: CallTerm\r\n") == body ); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "CallID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "OrigID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalGroup:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteGroup:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalAddr:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteAddr:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "START=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "STOP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PD=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SR=")); /* We should have not reached RemoteMetrics section yet */ BC_ASSERT_TRUE(!remote_metrics_start || body < remote_metrics_start); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "DialogID:")); if (report->remote_metrics.rtcp_sr_count>0&&ms!=NULL&&ms->rc!=NULL){ /* Hack: reset rtcp_sr_count to 0 because in case of interval reports, we need one RTCP SR by interval. */ report->remote_metrics.rtcp_sr_count=0; BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "AdaptiveAlg:")); } }
void on_report_send_mandatory(const LinphoneCall *call, SalStreamType stream_type, const LinphoneContent *content){ char * body = (char *)linphone_content_get_buffer(content); char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); BC_ASSERT_TRUE( __strstr(body, "VQIntervalReport\r\n") == body || __strstr(body, "VQSessionReport\r\n") == body || __strstr(body, "VQSessionReport: CallTerm\r\n") == body ); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "CallID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "OrigID:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalGroup:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteGroup:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalAddr:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteAddr:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "START=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "STOP=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PT=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PD=")); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SR=")); /* We should have not reached RemoteMetrics section yet */ BC_ASSERT_TRUE(!remote_metrics_start || body < remote_metrics_start); BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "DialogID:")); }
const char * linphone_content_get_string_buffer(const LinphoneContent *content) { return (const char *)linphone_content_get_buffer(content); }
void on_report_send_remove_fields(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ char *body = (char*)linphone_content_get_buffer(content); /*corrupt start of the report*/ strncpy(body, "corrupted report is corrupted", strlen("corrupted report is corrupted")); }