Merge branch 'master' of git://git.linphone.org/linphone

This commit is contained in:
Sandrine Avakian 2015-12-03 13:46:42 +01:00
commit 3995ab275d
18 changed files with 206 additions and 82 deletions

View file

@ -215,8 +215,7 @@ static void linphone_chat_message_process_response_from_post_file(void *data,
linphone_content_get_subtype(msg->file_transfer_information)));
/* insert it in a multipart body handler which will manage the boundaries of multipart msg */
bh = belle_sip_multipart_body_handler_new(linphone_chat_message_file_transfer_on_progress, msg,
first_part_bh);
bh = belle_sip_multipart_body_handler_new(linphone_chat_message_file_transfer_on_progress, msg, first_part_bh, NULL);
linphone_chat_message_ref(msg);
_release_http_request(msg);

View file

@ -2929,6 +2929,16 @@ static RtpSession * create_audio_rtp_io_session(LinphoneCall *call) {
return rtp_session;
}
static void linphone_call_set_on_hold_file(LinphoneCall *call, const char *file){
if (call->onhold_file){
ms_free(call->onhold_file);
call->onhold_file = NULL;
}
if (file){
call->onhold_file = ms_strdup(file);
}
}
static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallState next_state, bool_t use_arc){
LinphoneCore *lc=call->core;
int used_pt=-1;
@ -3069,12 +3079,6 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
&io);
if (err == 0){
post_configure_audio_streams(call, (call->all_muted || call->audio_muted) && !call->playing_ringbacktone);
if (file_to_play){
MSFilter *player = audio_stream_open_remote_play(call->audiostream, file_to_play);
if (player){
ms_filter_call_method_noarg(player, MS_PLAYER_START);
}
}
}
}
@ -3097,6 +3101,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, LinphoneCallSta
call->current_params->low_bandwidth=call->params->low_bandwidth;
}else ms_warning("No audio stream accepted ?");
}
linphone_call_set_on_hold_file(call, file_to_play);
}
#ifdef VIDEO_ENABLED
@ -3428,6 +3433,13 @@ void linphone_call_start_media_streams(LinphoneCall *call, LinphoneCallState nex
if (call->audiostream) audio_stream_link_video(call->audiostream,call->videostream);
linphone_call_start_video_stream(call, next_state);
}
/*the onhold file is to be played once both audio and video are ready.*/
if (call->onhold_file && !call->params->in_conference && call->audiostream){
MSFilter *player = audio_stream_open_remote_play(call->audiostream, call->onhold_file);
if (player){
ms_filter_call_method_noarg(player, MS_PLAYER_START);
}
}
call->up_bw=linphone_core_get_upload_bandwidth(lc);

View file

@ -520,7 +520,7 @@ static void process_response_from_post_file_log_collection(void *data, const bel
(belle_sip_header_t *)belle_sip_header_content_type_create(linphone_content_get_type(core->log_collection_upload_information), linphone_content_get_subtype(core->log_collection_upload_information)));
/* Insert it in a multipart body handler which will manage the boundaries of multipart message */
bh = belle_sip_multipart_body_handler_new(log_collection_upload_on_progress, core, (belle_sip_body_handler_t *)first_part_bh);
bh = belle_sip_multipart_body_handler_new(log_collection_upload_on_progress, core, (belle_sip_body_handler_t *)first_part_bh, NULL);
ua = ms_strdup_printf("%s/%s", linphone_core_get_user_agent_name(), linphone_core_get_user_agent_version());
uri = belle_generic_uri_parse(linphone_core_get_log_collection_upload_server_url(core));
req = belle_http_request_create("POST", uri, belle_sip_header_create("User-Agent", ua), NULL);
@ -1609,7 +1609,7 @@ static void linphone_core_register_default_codecs(LinphoneCore *lc){
linphone_core_register_payload_type(lc,&payload_type_speex_nb,"vbr=on",TRUE);
linphone_core_register_payload_type(lc,&payload_type_pcmu8000,NULL,TRUE);
linphone_core_register_payload_type(lc,&payload_type_pcma8000,NULL,TRUE);
/* Text codecs in order or preference (RED first (more robust), then T140) */
linphone_core_register_payload_type(lc, &payload_type_t140_red, NULL, TRUE);
linphone_core_register_payload_type(lc, &payload_type_t140, NULL, TRUE);
@ -2576,7 +2576,7 @@ void linphone_core_iterate(LinphoneCore *lc){
lc->prevtime_ms = curtime_ms;
}else{
lc->prevtime_ms += 1000;
}
}
@ -6732,7 +6732,7 @@ const char *linphone_reason_to_string(LinphoneReason err){
case LinphoneReasonIOError:
return "IO error";
case LinphoneReasonDoNotDisturb:
return "Do not distrub";
return "Do not disturb";
case LinphoneReasonUnauthorized:
return "Unauthorized";
case LinphoneReasonNotAcceptable:

View file

@ -3360,11 +3360,11 @@ LINPHONE_PUBLIC bool_t linphone_core_video_supported(LinphoneCore *lc);
LINPHONE_PUBLIC LINPHONE_DEPRECATED void linphone_core_enable_video(LinphoneCore *lc, bool_t vcap_enabled, bool_t display_enabled);
/**
* Returns TRUE if video is enabled, FALSE otherwise.
* Returns TRUE if either capture or display is enabled, FALSE otherwise.
* same as ( #linphone_core_video_capture_enabled | #linphone_core_video_display_enabled )
* @ingroup media_parameters
* @deprecated Use #linphone_core_video_capture_enabled and #linphone_core_video_display_enabled instead.
**/
LINPHONE_PUBLIC LINPHONE_DEPRECATED bool_t linphone_core_video_enabled(LinphoneCore *lc);
LINPHONE_PUBLIC bool_t linphone_core_video_enabled(LinphoneCore *lc);
/**
* Enable or disable video capture.

View file

@ -6570,4 +6570,23 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneCoreImpl_getSipTransportTi
return linphone_core_get_sip_transport_timeout((LinphoneCore*)pcore);
}
/*
* Class: org_linphone_core_LinphoneCoreImpl
* Method: setNortpTimeout
* Signature: (JI)V
*/
JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneCoreImpl_setNortpTimeout(JNIEnv *env, jobject obj, jlong core, jint timeout){
linphone_core_set_nortp_timeout((LinphoneCore*)core, timeout);
}
/*
* Class: org_linphone_core_LinphoneCoreImpl
* Method: getNortpTimeout
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneCoreImpl_getNortpTimeout(JNIEnv *env, jobject obj, jlong core){
return linphone_core_get_nortp_timeout((LinphoneCore*)core);
}

View file

@ -213,7 +213,6 @@ struct _LinphoneChatMessage {
LinphoneChatMessageCbs *callbacks;
LinphoneChatMessageDir dir;
char* message;
LinphoneChatMessageStateChangedCb message_state_changed_cb;
void* message_state_changed_user_data;
void* message_userdata;
char* appdata;
@ -231,6 +230,15 @@ struct _LinphoneChatMessage {
belle_http_request_t *http_request; /**< keep a reference to the http_request in case of file transfer in order to be able to cancel the transfer */
belle_http_request_listener_t *http_listener; /* our listener, only owned by us*/
char *file_transfer_filepath;
#if __clang__ || ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4)
#pragma GCC diagnostic push
#endif
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
LinphoneChatMessageStateChangedCb message_state_changed_cb;
#if __clang__ || ((__GNUC__ == 4 && __GNUC_MINOR__ >= 6) || __GNUC__ > 4)
#pragma GCC diagnostic pop
#endif
};
BELLE_SIP_DECLARE_VPTR(LinphoneChatMessage);
@ -310,6 +318,7 @@ struct _LinphoneCall{
belle_sip_source_t *dtmfs_timer; /*DTMF timer needed to send a DTMF sequence*/
char *dtls_certificate_fingerprint; /**> This fingerprint is computed during stream init and is stored in call to be used when making local media description */
char *onhold_file; /*set if a on-hold file is to be played*/
LinphoneChatRoom *chat_room;
bool_t refer_pending;
bool_t expect_media_in_ack;
@ -1386,6 +1395,8 @@ bool_t linphone_core_lime_for_file_sharing_enabled(const LinphoneCore *lc);
BELLE_SIP_DECLARE_VPTR(LinphoneTunnelConfig);
int linphone_core_get_default_proxy_config_index(LinphoneCore *lc);
#ifdef __cplusplus
}
#endif

View file

@ -93,7 +93,7 @@ void linphone_proxy_config_write_all_to_config_file(LinphoneCore *lc){
}
/*to ensure removed configs are erased:*/
linphone_proxy_config_write_to_config_file(lc->config,NULL,i);
lp_config_set_int(lc->config,"sip","default_proxy",linphone_core_get_default_proxy(lc,NULL));
lp_config_set_int(lc->config,"sip","default_proxy",linphone_core_get_default_proxy_config_index(lc));
}
static void linphone_proxy_config_init(LinphoneCore* lc, LinphoneProxyConfig *cfg) {
@ -1167,7 +1167,7 @@ void linphone_core_clear_proxy_config(LinphoneCore *lc){
linphone_proxy_config_write_all_to_config_file(lc);
}
static int linphone_core_get_default_proxy_config_index(LinphoneCore *lc) {
int linphone_core_get_default_proxy_config_index(LinphoneCore *lc) {
int pos = -1;
if (lc->default_proxy != NULL) {
pos = ms_list_position(lc->sip_conf.proxies, ms_list_find(lc->sip_conf.proxies, (void *)lc->default_proxy));

View file

@ -652,7 +652,7 @@ gboolean linphone_gtk_directory_search_focus_in(GtkWidget *entry){
void linphone_gtk_directory_search_activate(GtkWidget *entry){
LinphoneProxyConfig *cfg;
GtkWidget *w;
linphone_core_get_default_proxy(linphone_gtk_get_core(),&cfg);
cfg = linphone_core_get_default_proxy_config(linphone_gtk_get_core());
w=linphone_gtk_show_buddy_lookup_window(linphone_proxy_config_get_sip_setup_context(cfg));
if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(entry),"active"))==1)
linphone_gtk_buddy_lookup_set_keyword(w,gtk_entry_get_text(GTK_ENTRY(entry)));
@ -809,7 +809,7 @@ static GtkWidget *linphone_gtk_create_contact_menu(GtkWidget *contact_list){
SipSetupContext * ssc=NULL;
bool_t show_menu_separator=FALSE;
linphone_core_get_default_proxy(lc,&cfg);
cfg = linphone_core_get_default_proxy_config(lc);
if (cfg){
ssc=linphone_proxy_config_get_sip_setup_context(cfg);
}

View file

@ -914,7 +914,7 @@ void linphone_gtk_draw_mute_button(GtkButton *button, gboolean active){
void linphone_gtk_mute_clicked(GtkButton *button){
int active=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button),"active"));
linphone_core_mute_mic(linphone_gtk_get_core(),!active);
linphone_core_enable_mic(linphone_gtk_get_core(),active);
linphone_gtk_draw_mute_button(button,!active);
}

View file

@ -143,7 +143,7 @@ void linphone_gtk_exit_login_frame(void){
void linphone_gtk_logout_clicked(void){
LinphoneCore *lc=linphone_gtk_get_core();
LinphoneProxyConfig *cfg=NULL;
linphone_core_get_default_proxy(lc,&cfg);
cfg = linphone_core_get_default_proxy_config(lc);
if (cfg){
SipSetupContext *ss=linphone_proxy_config_get_sip_setup_context(cfg);
if (ss){

View file

@ -69,11 +69,7 @@ static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphonePr
static void linphone_gtk_notify_recv(LinphoneCore *lc, LinphoneFriend * fid);
static void linphone_gtk_new_unknown_subscriber(LinphoneCore *lc, LinphoneFriend *lf, const char *url);
static void linphone_gtk_auth_info_requested(LinphoneCore *lc, const char *realm, const char *username, const char *domain);
static void linphone_gtk_display_status(LinphoneCore *lc, const char *status);
static void linphone_gtk_configuring_status(LinphoneCore *lc, LinphoneConfiguringState status, const char *message);
static void linphone_gtk_display_message(LinphoneCore *lc, const char *msg);
static void linphone_gtk_display_warning(LinphoneCore *lc, const char *warning);
static void linphone_gtk_display_url(LinphoneCore *lc, const char *msg, const char *url);
static void linphone_gtk_call_log_updated(LinphoneCore *lc, LinphoneCallLog *cl);
static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cs, const char *msg);
static void linphone_gtk_call_encryption_changed(LinphoneCore *lc, LinphoneCall *call, bool_t enabled, const char *token);
@ -267,12 +263,7 @@ static void linphone_gtk_init_liblinphone(const char *config_file,
vtable.notify_presence_received=linphone_gtk_notify_recv;
vtable.new_subscription_requested=linphone_gtk_new_unknown_subscriber;
vtable.auth_info_requested=linphone_gtk_auth_info_requested;
vtable.display_status=linphone_gtk_display_status;
vtable.display_message=linphone_gtk_display_message;
vtable.display_warning=linphone_gtk_display_warning;
vtable.display_url=linphone_gtk_display_url;
vtable.call_log_updated=linphone_gtk_call_log_updated;
//vtable.text_received=linphone_gtk_text_received;
vtable.message_received=linphone_gtk_text_received;
vtable.is_composing_received=linphone_gtk_is_composing_received;
vtable.refer_received=linphone_gtk_refer_received;
@ -1133,34 +1124,12 @@ static void linphone_gtk_dtmf_received(LinphoneCore *lc, LinphoneCall *call, int
ms_message("Dtmf %c received.",dtmf);
}
static void linphone_gtk_display_status(LinphoneCore *lc, const char *status){
GtkWidget *w=linphone_gtk_get_main_window();
GtkWidget *status_bar=linphone_gtk_get_widget(w,"status_bar");
gtk_statusbar_push(GTK_STATUSBAR(status_bar),
gtk_statusbar_get_context_id(GTK_STATUSBAR(status_bar),""),
status);
}
static void linphone_gtk_configuring_status(LinphoneCore *lc, LinphoneConfiguringState status, const char *message) {
if (config_fetching_dialog) linphone_gtk_close_config_fetching(config_fetching_dialog, status);
config_fetching_dialog=NULL;
}
static void linphone_gtk_display_message(LinphoneCore *lc, const char *msg){
linphone_gtk_display_something(GTK_MESSAGE_INFO,msg);
}
static void linphone_gtk_display_warning(LinphoneCore *lc, const char *warning){
linphone_gtk_display_something(GTK_MESSAGE_WARNING,warning);
}
static void linphone_gtk_display_url(LinphoneCore *lc, const char *msg, const char *url){
char richtext[4096];
snprintf(richtext,sizeof(richtext),"%s %s",msg,url);
linphone_gtk_display_something(GTK_MESSAGE_INFO,richtext);
}
static void linphone_gtk_call_log_updated(LinphoneCore *lc, LinphoneCallLog *cl){
GtkWidget *w=(GtkWidget*)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"call_logs");
if (w) linphone_gtk_call_log_update(w);
@ -1624,7 +1593,7 @@ void linphone_gtk_load_identities(void){
store=GTK_LIST_STORE(gtk_combo_box_get_model(box));
}
gtk_list_store_clear(store);
linphone_core_get_default_proxy(linphone_gtk_get_core(),&def);
def = linphone_core_get_default_proxy_config(linphone_gtk_get_core());
def_identity=g_strdup_printf(_("%s (Default)"),linphone_core_get_primary_contact(linphone_gtk_get_core()));
gtk_list_store_append(store,&iter);
gtk_list_store_set(store,&iter,0,def_identity,1,NULL,2,NULL,-1);
@ -1651,7 +1620,7 @@ static void linphone_gtk_dtmf_pressed(GtkButton *button){
gtk_editable_insert_text(GTK_EDITABLE(uri_bar),label,1,&pos);
linphone_core_play_dtmf (linphone_gtk_get_core(),label[0],-1);
if (linphone_core_in_call(linphone_gtk_get_core())){
linphone_core_send_dtmf(linphone_gtk_get_core(),label[0]);
linphone_call_send_dtmf(linphone_core_get_current_call(linphone_gtk_get_core()),label[0]);
}
}
@ -1738,8 +1707,7 @@ static void linphone_gtk_configure_main_window(void){
void linphone_gtk_manage_login(void){
LinphoneCore *lc=linphone_gtk_get_core();
LinphoneProxyConfig *cfg=NULL;
linphone_core_get_default_proxy(lc,&cfg);
LinphoneProxyConfig *cfg=linphone_core_get_default_proxy_config(lc);
if (cfg){
SipSetup *ss=linphone_proxy_config_get_sip_setup(cfg);
if (ss && (sip_setup_get_capabilities(ss) & SIP_SETUP_CAP_LOGIN)){

View file

@ -2220,4 +2220,15 @@ public interface LinphoneCore {
**/
public int getHttpProxyPort();
/*
* Set the nortp timeout (timeout after which call is closed if no RTP or RTCP packets are received).
*/
public void setNortpTimeout(int seconds);
/**
* Get the nortp timeout.
* @return
*/
public int getNortpTimeout();
}

View file

@ -1111,7 +1111,7 @@ class LinphoneCoreImpl implements LinphoneCore {
private native void setSipDscp(long nativePtr, int dscp);
@Override
public synchronized void setSipDscp(int dscp) {
setSipDscp(nativePtr,dscp);
setSipDscp(nativePtr, dscp);
}
private native int getSipDscp(long nativePtr);
@ -1276,7 +1276,7 @@ class LinphoneCoreImpl implements LinphoneCore {
private native void setMtu(long nativePtr, int mtu);
@Override
public synchronized void setMtu(int mtu) {
setMtu(nativePtr,mtu);
setMtu(nativePtr, mtu);
}
private native int getMtu(long nativePtr);
@Override
@ -1285,7 +1285,7 @@ class LinphoneCoreImpl implements LinphoneCore {
}
@Override
public synchronized void enableSdp200Ack(boolean enable) {
enableSdp200Ack(nativePtr,enable);
enableSdp200Ack(nativePtr, enable);
}
@Override
public synchronized boolean isSdp200AckEnabled() {
@ -1340,7 +1340,7 @@ class LinphoneCoreImpl implements LinphoneCore {
@Override
public synchronized void enableAdaptiveRateControl(boolean enable) {
enableAdaptiveRateControl(nativePtr,enable);
enableAdaptiveRateControl(nativePtr, enable);
}
@Override
@ -1423,7 +1423,7 @@ class LinphoneCoreImpl implements LinphoneCore {
private native void setPreferredFramerate(long nativePtr, float fps);
@Override
public void setPreferredFramerate(float fps) {
setPreferredFramerate(nativePtr,fps);
setPreferredFramerate(nativePtr, fps);
}
private native float getPreferredFramerate(long nativePtr);
@Override
@ -1578,5 +1578,15 @@ class LinphoneCoreImpl implements LinphoneCore {
public int getSipTransportTimeout(){
return getSipTransportTimeout(nativePtr);
}
private native void setNortpTimeout(long nativePtr, int timeout);
@Override
public void setNortpTimeout(int timeout){
setNortpTimeout(nativePtr, timeout);
}
private native int getNortpTimeout(long nativePtr);
@Override
public int getNortpTimeout(){
return getNortpTimeout(nativePtr);
}
}

View file

@ -10,6 +10,7 @@ mediastreamer2/src/audiofilters/dtmfgen.c
mediastreamer2/src/audiofilters/equalizer.c
mediastreamer2/src/audiofilters/gsm.c
mediastreamer2/src/audiofilters/genericplc.c
mediastreamer2/src/audiofilters/msgenericplc.c
mediastreamer2/src/audiofilters/macsnd.c
mediastreamer2/src/audiofilters/msconf.c
mediastreamer2/src/audiofilters/msfileplayer.c

View file

@ -5613,6 +5613,40 @@ static void call_with_ice_and_rtcp_mux_without_reinvite(void){
_call_with_rtcp_mux(TRUE, TRUE, TRUE,FALSE);
}
static void call_with_zrtp_configured_calling_base(LinphoneCoreManager *marie, LinphoneCoreManager *pauline) {
bool_t call_ok;
linphone_core_set_media_encryption(marie->lc, LinphoneMediaEncryptionZRTP);
BC_ASSERT_TRUE((call_ok=call(pauline,marie)));
liblinphone_tester_check_rtcp(marie,pauline);
BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))
, LinphoneMediaEncryptionNone, int, "%i");
BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))
, LinphoneMediaEncryptionNone, int, "%i");
end_call(pauline, marie);
}
static void call_with_zrtp_configured_calling_side(void) {
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc");
call_with_zrtp_configured_calling_base(marie,pauline);
linphone_core_set_user_agent(pauline->lc, "Natted Linphone", NULL);
linphone_core_set_user_agent(marie->lc, "Natted Linphone", NULL);
call_with_zrtp_configured_calling_base(marie,pauline);
linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce);
linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce);
call_with_zrtp_configured_calling_base(marie,pauline);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
test_t call_tests[] = {
{ "Early declined call", early_declined_call },
{ "Call declined", call_declined },
@ -5776,7 +5810,8 @@ test_t call_tests[] = {
{ "Call with rtcp-mux", call_with_rtcp_mux},
{ "Call with rtcp-mux not accepted", call_with_rtcp_mux_not_accepted},
{ "Call with ICE and rtcp-mux", call_with_ice_and_rtcp_mux},
{ "Call with ICE and rtcp-mux without ICE re-invite", call_with_ice_and_rtcp_mux_without_reinvite}
{ "Call with ICE and rtcp-mux without ICE re-invite", call_with_ice_and_rtcp_mux_without_reinvite},
{ "call with ZRTP configured calling side only", call_with_zrtp_configured_calling_side}
};
test_suite_t call_test_suite = {"Single Call", NULL, NULL, liblinphone_tester_before_each, liblinphone_tester_after_each,

View file

@ -96,7 +96,7 @@ LinphoneBuffer * tester_file_transfer_send(LinphoneChatMessage *msg, const Linph
size_t size_to_send;
uint8_t *buf;
FILE *file_to_send = linphone_chat_message_get_user_data(msg);
BC_ASSERT_PTR_NOT_NULL(file_to_send);
if (file_to_send == NULL){
return NULL;
@ -802,6 +802,37 @@ static void lime_text_message(void) {
linphone_core_manager_destroy(pauline);
}
static void lime_text_message_to_non_lime(void) {
FILE *ZIDCachePaulineFD;
LinphoneChatRoom* chat_room;
char* filepath;
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc");
/* make sure lime is enabled */
linphone_core_enable_lime(marie->lc, 0);
linphone_core_enable_lime(pauline->lc, 1);
/* set the zid caches files : create two ZID cache from this valid one inserting the auto-generated sip URI for the peer account as keys in ZID cache are indexed by peer sip uri */
ZIDCachePaulineFD = fopen_from_write_dir("tmpZIDCachePauline.xml", "w");
fprintf(ZIDCachePaulineFD, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<cache><selfZID>005dbe0399643d953a2202dd</selfZID><peer><ZID>ef7692d0792a67491ae2d44e</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>%s</uri><rcvKey>08df5907d30959b8cb70f6fff2d8febd88fb41b0c8afc39e4b972f86dd5cfe2d</rcvKey><sndKey>60f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a</sndKey><rcvSId>5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndSId>bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvIndex>00000078</rcvIndex><sndIndex>000001cf</sndIndex><pvs>01</pvs></peer><peer><ZID>1234567889643d953a2202ee</ZID><rs1>9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045</rs1><aux>f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e</aux><rs2>2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899</rs2><uri>%s</uri><sndKey>81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa</sndKey><rcvKey>25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193</rcvKey><sndSId>f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193</sndSId><rcvSId>22ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193</rcvSId><sndIndex>0000002e</sndIndex><rcvIndex>00000000</rcvIndex><pvs>01</pvs></peer></cache>", linphone_address_as_string_uri_only(marie->identity), linphone_address_as_string_uri_only(marie->identity));
fclose(ZIDCachePaulineFD);
filepath = bc_tester_file("tmpZIDCachePauline.xml");
linphone_core_set_zrtp_secrets_file(pauline->lc, filepath);
ms_free(filepath);
chat_room = linphone_core_get_chat_room(pauline->lc, marie->identity);
linphone_chat_room_send_message(chat_room,"Bla bla bla bla");
//since we cannot decrypt message, we should not receive any message
BC_ASSERT_FALSE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1));
BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,0, int, "%d");
BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity));
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
void lime_transfer_message_base(bool_t encrypt_file) {
FILE *ZIDCacheMarieFD, *ZIDCachePaulineFD;
LinphoneCoreManager *marie, *pauline;
@ -1295,7 +1326,7 @@ static void real_time_text(bool_t audio_stream_enabled, bool_t srtp_enabled, boo
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc");
LinphoneCallParams *marie_params = NULL;
LinphoneCall *pauline_call, *marie_call;
if (mess_with_marie_payload_number) {
MSList *elem;
for (elem = marie->lc->codecs_conf.text_codecs; elem != NULL; elem = elem->next) {
@ -1315,12 +1346,12 @@ static void real_time_text(bool_t audio_stream_enabled, bool_t srtp_enabled, boo
}
}
}
if (ice_enabled) {
linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce);
linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce);
}
if (srtp_enabled) {
BC_ASSERT_TRUE(linphone_core_media_encryption_supported(marie->lc, LinphoneMediaEncryptionSRTP));
linphone_core_set_media_encryption(marie->lc, LinphoneMediaEncryptionSRTP);
@ -1336,7 +1367,7 @@ static void real_time_text(bool_t audio_stream_enabled, bool_t srtp_enabled, boo
linphone_core_set_nortp_timeout(marie->lc, 10);
linphone_core_set_nortp_timeout(pauline->lc, 10);
}
BC_ASSERT_TRUE(call_with_caller_params(marie, pauline, marie_params));
pauline_call = linphone_core_get_current_call(pauline->lc);
marie_call = linphone_core_get_current_call(marie->lc);
@ -1353,7 +1384,7 @@ static void real_time_text(bool_t audio_stream_enabled, bool_t srtp_enabled, boo
int i;
LinphoneChatMessage* rtt_message = linphone_chat_room_create_message(pauline_chat_room,NULL);
LinphoneChatRoom *marie_chat_room = linphone_call_get_chat_room(marie_call);
for (i = 0; i < strlen(message); i++) {
linphone_chat_message_put_char(rtt_message, message[i]);
BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingActiveReceived, i+1, 1000));
@ -1369,7 +1400,7 @@ static void real_time_text(bool_t audio_stream_enabled, bool_t srtp_enabled, boo
BC_ASSERT_FALSE(marie->stat.number_of_LinphoneCallEnd > 0);
BC_ASSERT_FALSE(pauline->stat.number_of_LinphoneCallEnd > 0);
}
if (ice_enabled) {
BC_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection));
}
@ -1505,7 +1536,7 @@ static void real_time_text_message_compat(bool_t end_with_crlf, bool_t end_with_
marie_params = linphone_core_create_call_params(marie->lc, NULL);
linphone_call_params_enable_realtime_text(marie_params,TRUE);
BC_ASSERT_TRUE(call_with_caller_params(marie, pauline, marie_params));
pauline_call=linphone_core_get_current_call(pauline->lc);
marie_call=linphone_core_get_current_call(marie->lc);
@ -1527,7 +1558,7 @@ static void real_time_text_message_compat(bool_t end_with_crlf, bool_t end_with_
BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingActiveReceived, i+1, 1000));
BC_ASSERT_EQUAL(linphone_chat_room_get_char(marie_chat_room), message[i], char, "%c");
}
if (end_with_crlf) {
linphone_chat_message_put_char(rtt_message, crlf);
} else if (end_with_lf) {
@ -1560,7 +1591,7 @@ static void real_time_text_message_accented_chars(void) {
marie_params = linphone_core_create_call_params(marie->lc, NULL);
linphone_call_params_enable_realtime_text(marie_params,TRUE);
BC_ASSERT_TRUE(call_with_caller_params(marie, pauline, marie_params));
pauline_call=linphone_core_get_current_call(pauline->lc);
marie_call=linphone_core_get_current_call(marie->lc);
@ -1589,7 +1620,7 @@ static void real_time_text_message_accented_chars(void) {
BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingActiveReceived, i+1, 1000));
BC_ASSERT_EQUAL(linphone_chat_room_get_char(marie_chat_room), message[i], unsigned long, "%lu");
}
linphone_chat_room_send_chat_message(pauline_chat_room, rtt_message);
BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageReceived, 1));
BC_ASSERT_EQUAL(strcmp(marie->stat.last_received_chat_message->message, "ãæçéîøùÿ"), 0, int, "%i");
@ -1618,7 +1649,7 @@ static void real_time_text_copy_paste(void) {
marie_params = linphone_core_create_call_params(marie->lc, NULL);
linphone_call_params_enable_realtime_text(marie_params,TRUE);
BC_ASSERT_TRUE(call_with_caller_params(marie, pauline, marie_params));
pauline_call = linphone_core_get_current_call(pauline->lc);
marie_call = linphone_core_get_current_call(marie->lc);
@ -1632,7 +1663,7 @@ static void real_time_text_copy_paste(void) {
int i;
LinphoneChatMessage* rtt_message = linphone_chat_room_create_message(pauline_chat_room,NULL);
LinphoneChatRoom *marie_chat_room = linphone_call_get_chat_room(marie_call);
for (i = 1; i <= strlen(message); i++) {
linphone_chat_message_put_char(rtt_message, message[i-1]);
if (i % 4 == 0) {
@ -1688,6 +1719,7 @@ test_t message_tests[] = {
{"IsComposing notification", is_composing_notification},
#ifdef HAVE_LIME
{"Lime text message", lime_text_message},
{"Lime text message to non lime", lime_text_message_to_non_lime},
{"Lime transfer message", lime_transfer_message},
{"Lime transfer message without encryption", lime_transfer_message_without_encryption},
{"Lime unitary", lime_unit},

View file

@ -279,6 +279,7 @@ static void quality_reporting_interval_report(void) {
linphone_core_manager_destroy(pauline);
}
#ifdef VIDEO_ENABLED
static void quality_reporting_session_report_if_video_stopped(void) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc_rtcp_xr");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc");
@ -325,6 +326,7 @@ static void quality_reporting_session_report_if_video_stopped(void) {
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
#endif
void publish_report_with_route_state_changed(LinphoneCore *lc, LinphoneEvent *ev, LinphonePublishState state){
if (state == LinphonePublishProgress) {
@ -358,6 +360,7 @@ static void quality_reporting_sent_using_custom_route(void) {
linphone_core_manager_destroy(pauline);
}
#ifdef VIDEO_ENABLED
static void quality_reporting_interval_report_video_and_rtt(void) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc_rtcp_xr");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc_rtcp_xr");
@ -418,6 +421,7 @@ static void quality_reporting_interval_report_video_and_rtt(void) {
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
#endif
test_t quality_reporting_tests[] = {
{ "Not used if no config", quality_reporting_not_used_without_config},
@ -426,8 +430,10 @@ test_t quality_reporting_tests[] = {
{ "Call term session report invalid if missing mandatory fields", quality_reporting_invalid_report},
{ "Call term session report sent if call ended normally", quality_reporting_at_call_termination},
{ "Interval report if interval is configured", quality_reporting_interval_report},
#ifdef VIDEO_ENABLED
{ "Interval report if interval is configured with video and realtime text", quality_reporting_interval_report_video_and_rtt},
{ "Session report sent if video stopped during call", quality_reporting_session_report_if_video_stopped},
#endif
{ "Sent using custom route", quality_reporting_sent_using_custom_route},
};

View file

@ -55,7 +55,7 @@ static void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCal
LinphoneCallParams * call_params;
switch(cstate){
case LinphoneCallIncomingReceived:
ms_message("Incoming call arrive !\n");
ms_message("Incoming call arriving !\n");
/* accept the incoming call*/
call_params = linphone_core_create_call_params(lc, call);
linphone_call_params_enable_video(call_params,TRUE);
@ -63,7 +63,6 @@ static void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCal
linphone_call_params_set_video_direction(call_params,LinphoneMediaDirectionSendOnly);
linphone_core_accept_call_with_params(lc,call,call_params);
linphone_call_params_destroy(call_params);
break;
default:
break;
@ -74,6 +73,7 @@ static void helper(const char *progname) {
printf("%s --help\n"
"\t\t\t--listening-uri <uri> uri to listen on, default [sip:localhost:5060]\n"
"\t\t\t--max-call-duration max duration of a call in seconds, default [3600]\n"
"\t\t\t--media-file <wav or mkv file to play to caller>\n"
"\t\t\t--verbose\n", progname);
exit(0);
}
@ -88,6 +88,7 @@ int main(int argc, char *argv[]){
char * tmp = NULL;
LpConfig * lp_config = lp_config_new(NULL);
int max_call_duration=3600;
static const char *media_file = NULL;
policy.automatically_accept=TRUE;
signal(SIGINT,stop);
@ -115,6 +116,11 @@ int main(int argc, char *argv[]){
helper();
break;
}*/
} else if (strcmp(argv[i], "--media-file") == 0){
i++;
if (i<argc){
media_file = argv[i];
}else helper(argv[0]);
} else {
helper(argv[0]);
}
@ -138,8 +144,22 @@ int main(int argc, char *argv[]){
/*instead of using sound capture card, a file is played to the calling party*/
linphone_core_set_play_file(lc,PACKAGE_DATA_DIR "/sounds/linphone/hello16000.wav");
linphone_core_set_use_files(lc,TRUE);
linphone_core_enable_echo_cancellation(lc, FALSE); /*no need for local echo cancellation when playing files*/
if (!media_file){
linphone_core_set_play_file(lc,PACKAGE_DATA_DIR "/sounds/linphone/hello16000.wav");
linphone_core_set_preferred_framerate(lc,5);
}else{
PayloadType *pt = linphone_core_find_payload_type(lc, "opus", 48000, -1);
/*if opus is present, give it a bitrate for good quality with music, and stereo enabled*/
if (pt){
linphone_core_set_payload_type_bitrate(lc, pt, 150);
payload_type_set_send_fmtp(pt, "stereo=1");
payload_type_set_recv_fmtp(pt, "stereo=1");
}
linphone_core_set_play_file(lc, media_file);
linphone_core_set_preferred_video_size_by_name(lc, "720p");
}
{
MSWebCamDesc *desc = ms_mire_webcam_desc_get();
@ -158,7 +178,7 @@ int main(int argc, char *argv[]){
linphone_core_set_sip_transports(lc,&tp);
linphone_core_set_audio_port_range(lc,1024,65000);
linphone_core_set_preferred_framerate(lc,5);
linphone_core_set_video_port_range(lc,1024,65000);
linphone_core_set_primary_contact(lc,tmp=linphone_address_as_string(addr));
ms_free(tmp);
@ -169,8 +189,8 @@ int main(int argc, char *argv[]){
ms_usleep(50000);
if (print_stats) {
ms_message("*********************************");
ms_message("*Current number of call [%10i] *",ms_list_size(linphone_core_get_calls(lc)));
ms_message("*Number of call until now [%10i] *",ms_list_size(linphone_core_get_call_logs(lc)));
ms_message("*Current number of calls [%10i] *",ms_list_size(linphone_core_get_calls(lc)));
ms_message("*Number of calls until now [%10i] *",ms_list_size(linphone_core_get_call_logs(lc)));
ms_message("*********************************");
print_stats=FALSE;
}