mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-29 17:29:20 +00:00
Merge branch 'master' into dev_rat
This commit is contained in:
commit
0a4084bc4a
35 changed files with 375 additions and 110 deletions
|
|
@ -42,6 +42,7 @@ option(ENABLE_CONSOLE_UI "Turn on or off compilation of console interface." YES)
|
|||
option(ENABLE_DATE "Use build date in internal version number." NO)
|
||||
cmake_dependent_option(ENABLE_DAEMON "Enable the linphone daemon interface." YES "NOT WIN32" NO)
|
||||
option(ENABLE_DOC "Enable documentation generation with Doxygen." YES)
|
||||
option(ENABLE_JAVADOC "Add a target to generate documentation for Java API" NO)
|
||||
option(ENABLE_GTK_UI "Turn on or off compilation of gtk interface." YES)
|
||||
option(ENABLE_LDAP "Enable LDAP support." NO)
|
||||
option(ENABLE_LIME "Enable Instant Messaging Encryption." YES)
|
||||
|
|
|
|||
|
|
@ -101,6 +101,14 @@ void linphone_account_creator_cbs_set_activate_phone_number_link(LinphoneAccount
|
|||
cbs->activate_phone_number_link = cb;
|
||||
}
|
||||
|
||||
void linphone_account_creator_cbs_set_is_account_linked(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb) {
|
||||
cbs->is_account_linked = cb;
|
||||
}
|
||||
|
||||
LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_get_is_account_linked(const LinphoneAccountCreatorCbs *cbs) {
|
||||
return cbs->is_account_linked;
|
||||
}
|
||||
|
||||
LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_get_is_account_activated(const LinphoneAccountCreatorCbs *cbs) {
|
||||
return cbs->is_account_activated;
|
||||
}
|
||||
|
|
@ -302,8 +310,11 @@ LinphoneAccountCreatorStatus linphone_account_creator_set_phone_number(LinphoneA
|
|||
|
||||
// if phone is valid, we lastly want to check that length is OK
|
||||
{
|
||||
const LinphoneDialPlan* plan = linphone_dial_plan_by_ccc(country_code);
|
||||
const LinphoneDialPlan* plan = linphone_dial_plan_by_ccc(creator->phone_country_code);
|
||||
int size = (int)strlen(phone_number);
|
||||
if (linphone_dial_plan_is_generic(plan)) {
|
||||
return LinphoneAccountCreatorCountryCodeInvalid;
|
||||
}
|
||||
if (size < plan->nnl - 1) {
|
||||
return LinphoneAccountCreatorPhoneNumberTooShort;
|
||||
} else if (size > plan->nnl + 1) {
|
||||
|
|
@ -698,6 +709,36 @@ LinphoneAccountCreatorStatus linphone_account_creator_link_phone_number_with_acc
|
|||
linphone_xml_rpc_request_unref(request);
|
||||
return LinphoneAccountCreatorOK;
|
||||
}
|
||||
|
||||
static void _get_phone_number_for_account_cb(LinphoneXmlRpcRequest *request) {
|
||||
LinphoneAccountCreator *creator = (LinphoneAccountCreator *)linphone_xml_rpc_request_get_user_data(request);
|
||||
if (creator->callbacks->is_account_linked != NULL) {
|
||||
LinphoneAccountCreatorStatus status = LinphoneAccountCreatorReqFailed;
|
||||
const char* resp = linphone_xml_rpc_request_get_string_response(request);
|
||||
if (linphone_xml_rpc_request_get_status(request) == LinphoneXmlRpcStatusOk) {
|
||||
status = (strcmp(resp, "ERROR_USERNAME_PARAMETER_NOT_FOUND") == 0
|
||||
|| strcmp(resp, "ERROR_ACCOUNT_DOESNT_EXIST") == 0
|
||||
|| strcmp(resp, "ERROR_ALIAS_DOESNT_EXIST") == 0) ? LinphoneAccountCreatorAccountNotLinked : LinphoneAccountCreatorAccountLinked;
|
||||
}
|
||||
creator->callbacks->link_phone_number_with_account(creator, status, resp);
|
||||
}
|
||||
}
|
||||
|
||||
LinphoneAccountCreatorStatus linphone_account_creator_is_account_linked(LinphoneAccountCreator *creator) {
|
||||
LinphoneXmlRpcRequest *request;
|
||||
if (!creator->username || !creator->domain) {
|
||||
return LinphoneAccountCreatorReqFailed;
|
||||
}
|
||||
request = linphone_xml_rpc_request_new_with_args("get_phone_number_for_account",LinphoneXmlRpcArgString,
|
||||
LinphoneXmlRpcArgString, creator->username,
|
||||
LinphoneXmlRpcArgString, creator->domain,
|
||||
LinphoneXmlRpcArgNone);
|
||||
linphone_xml_rpc_request_set_user_data(request, creator);
|
||||
linphone_xml_rpc_request_cbs_set_response(linphone_xml_rpc_request_get_callbacks(request), _get_phone_number_for_account_cb);
|
||||
linphone_xml_rpc_session_send_request(creator->xmlrpc_session, request);
|
||||
linphone_xml_rpc_request_unref(request);
|
||||
return LinphoneAccountCreatorOK;
|
||||
}
|
||||
/****************** END OF LINK PHONE NUMBER WITH ACCOUNT SECTION *************/
|
||||
|
||||
/****************** START OF ACTIVE PHONE NUMBER LINK **************************/
|
||||
|
|
|
|||
|
|
@ -49,6 +49,9 @@ typedef enum _LinphoneAccountCreatorStatus {
|
|||
LinphoneAccountCreatorAccountAlreadyActivated,
|
||||
LinphoneAccountCreatorAccountNotActivated,
|
||||
|
||||
LinphoneAccountCreatorAccountLinked,
|
||||
LinphoneAccountCreatorAccountNotLinked,
|
||||
|
||||
LinphoneAccountCreatorEmailInvalid,
|
||||
LinphoneAccountCreatorUsernameInvalid,
|
||||
LinphoneAccountCreatorUsernameTooShort,
|
||||
|
|
@ -63,6 +66,7 @@ typedef enum _LinphoneAccountCreatorStatus {
|
|||
LinphoneAccountCreatorRouteInvalid,
|
||||
LinphoneAccountCreatorDisplayNameInvalid,
|
||||
LinphoneAccountCreatorTransportNotSupported,
|
||||
LinphoneAccountCreatorCountryCodeInvalid,
|
||||
} LinphoneAccountCreatorStatus;
|
||||
|
||||
/**
|
||||
|
|
@ -311,6 +315,13 @@ LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_activate_p
|
|||
|
||||
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_recover_phone_account(LinphoneAccountCreator *creator);
|
||||
|
||||
/**
|
||||
* Send an XML-RPC request to ask if an account is linked with a phone number
|
||||
* @param[in] creator LinphoneAccountCreator object
|
||||
* @return if this account is linked with a phone number
|
||||
**/
|
||||
LINPHONE_PUBLIC LinphoneAccountCreatorStatus linphone_account_creator_is_account_linked(LinphoneAccountCreator *creator);
|
||||
|
||||
/**
|
||||
* Configure an account (create a proxy config and authentication info for it).
|
||||
* @param[in] creator LinphoneAccountCreator object
|
||||
|
|
@ -345,6 +356,20 @@ LINPHONE_PUBLIC void *linphone_account_creator_cbs_get_user_data(const LinphoneA
|
|||
**/
|
||||
LINPHONE_PUBLIC void linphone_account_creator_cbs_set_user_data(LinphoneAccountCreatorCbs *cbs, void *ud);
|
||||
|
||||
/**
|
||||
* Get the current linked tested callback.
|
||||
* @param[in] cbs LinphoneAccountCreatorCbs object.
|
||||
* @return The current linked tested callback.
|
||||
**/
|
||||
LINPHONE_PUBLIC LinphoneAccountCreatorCbsStatusCb linphone_account_creator_cbs_get_is_account_linked(const LinphoneAccountCreatorCbs *cbs);
|
||||
|
||||
/**
|
||||
* Set the linked tested callback
|
||||
* @param[in] cbs LinphoneAccountCreatorCbs object.
|
||||
* @param[in] cb The existence tested callback to be used.
|
||||
**/
|
||||
LINPHONE_PUBLIC void linphone_account_creator_cbs_set_is_account_linked(LinphoneAccountCreatorCbs *cbs, LinphoneAccountCreatorCbsStatusCb cb);
|
||||
|
||||
/**
|
||||
* Get the existence tested callback.
|
||||
* @param[in] cbs LinphoneAccountCreatorCbs object.
|
||||
|
|
|
|||
|
|
@ -355,6 +355,9 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req
|
|||
}
|
||||
#endif
|
||||
}
|
||||
/*because in case of tunnel, transport can be changed*/
|
||||
transport=belle_sip_uri_get_transport_param(next_hop_uri);
|
||||
|
||||
if ((strcmp(method,"REGISTER")==0 || strcmp(method,"SUBSCRIBE")==0) && transport &&
|
||||
(strcasecmp(transport,"TCP")==0 || strcasecmp(transport,"TLS")==0)){
|
||||
/*RFC 5923: add 'alias' parameter to tell the server that we want it to keep the connection for future requests*/
|
||||
|
|
|
|||
|
|
@ -310,3 +310,9 @@ const LinphoneDialPlan* linphone_dial_plan_by_ccc(const char *ccc) {
|
|||
const LinphoneDialPlan* linphone_dial_plan_get_all() {
|
||||
return dial_plans;
|
||||
}
|
||||
|
||||
const bool_t linphone_dial_plan_is_generic(const LinphoneDialPlan *ccc) {
|
||||
if (strcmp(ccc->country, most_common_dialplan.country) == 0)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,9 +70,8 @@ LINPHONE_PUBLIC const char *linphone_publish_state_to_string(LinphonePublishStat
|
|||
|
||||
static void linphone_event_release(LinphoneEvent *lev){
|
||||
if (lev->op) {
|
||||
/*this will stop the refreesher*/
|
||||
sal_op_release(lev->op);
|
||||
lev->op = NULL;
|
||||
/*this will stop the refresher*/
|
||||
sal_op_stop_refreshing(lev->op);
|
||||
}
|
||||
linphone_event_unref(lev);
|
||||
}
|
||||
|
|
@ -133,14 +132,9 @@ void linphone_event_set_publish_state(LinphoneEvent *lev, LinphonePublishState s
|
|||
linphone_core_notify_publish_state_changed(lev->lc,lev,state);
|
||||
switch(state){
|
||||
case LinphonePublishCleared:
|
||||
if (lev->expires!=-1){
|
||||
linphone_event_release(lev);
|
||||
}
|
||||
linphone_event_release(lev);
|
||||
break;
|
||||
case LinphonePublishOk:
|
||||
if (lev->expires==-1){
|
||||
linphone_event_release(lev);
|
||||
}
|
||||
break;
|
||||
case LinphonePublishError:
|
||||
linphone_event_release(lev);
|
||||
|
|
@ -200,7 +194,7 @@ int linphone_event_send_subscribe(LinphoneEvent *lev, const LinphoneContent *bod
|
|||
switch (lev->subscription_state){
|
||||
case LinphoneSubscriptionIncomingReceived:
|
||||
case LinphoneSubscriptionTerminated:
|
||||
case LinphoneSubscriptionOutgoingInit:
|
||||
case LinphoneSubscriptionOutgoingProgress:
|
||||
ms_error("linphone_event_send_subscribe(): cannot update subscription while in state [%s]", linphone_subscription_state_to_string(lev->subscription_state));
|
||||
return -1;
|
||||
break;
|
||||
|
|
@ -223,7 +217,7 @@ int linphone_event_send_subscribe(LinphoneEvent *lev, const LinphoneContent *bod
|
|||
err=sal_subscribe(lev->op,NULL,NULL,lev->name,lev->expires,body_handler);
|
||||
if (err==0){
|
||||
if (lev->subscription_state==LinphoneSubscriptionNone)
|
||||
linphone_event_set_state(lev,LinphoneSubscriptionOutgoingInit);
|
||||
linphone_event_set_state(lev,LinphoneSubscriptionOutgoingProgress);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
|
@ -372,8 +366,8 @@ void linphone_event_terminate(LinphoneEvent *lev){
|
|||
|
||||
if (lev->publish_state!=LinphonePublishNone){
|
||||
if (lev->publish_state==LinphonePublishOk && lev->expires!=-1){
|
||||
sal_publish(lev->op,NULL,NULL,NULL,0,NULL);
|
||||
}else sal_op_unpublish(lev->op);
|
||||
sal_op_unpublish(lev->op);
|
||||
}
|
||||
linphone_event_set_publish_state(lev,LinphonePublishCleared);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ typedef enum _LinphoneSubscriptionDir LinphoneSubscriptionDir;
|
|||
|
||||
/**
|
||||
* Enum for subscription states.
|
||||
* LinphoneSubscriptionTerminated and LinphoneSubscriptionError are final states.
|
||||
**/
|
||||
enum _LinphoneSubscriptionState{
|
||||
LinphoneSubscriptionNone, /**< Initial state, should not be used.**/
|
||||
|
|
@ -57,13 +58,10 @@ enum _LinphoneSubscriptionState{
|
|||
LinphoneSubscriptionPending, /**<Subscription is pending, waiting for user approval*/
|
||||
LinphoneSubscriptionActive, /**<Subscription is accepted.*/
|
||||
LinphoneSubscriptionTerminated, /**<Subscription is terminated normally*/
|
||||
LinphoneSubscriptionError, /**<Subscription encountered an error, indicated by linphone_event_get_reason()*/
|
||||
LinphoneSubscriptionError, /**<Subscription was terminated by an error, indicated by linphone_event_get_reason().*/
|
||||
LinphoneSubscriptionExpiring, /**<Subscription is about to expire, only sent if [sip]->refresh_generic_subscribe property is set to 0.*/
|
||||
};
|
||||
/*typo compatibility*/
|
||||
#define LinphoneSubscriptionOutoingInit LinphoneSubscriptionOutgoingInit
|
||||
|
||||
#define LinphoneSubscriptionOutgoingInit LinphoneSubscriptionOutgoingProgress
|
||||
/**
|
||||
* Typedef for subscription state enum.
|
||||
**/
|
||||
|
|
|
|||
|
|
@ -45,6 +45,25 @@ if (ENABLE_DOC)
|
|||
endif()
|
||||
endif()
|
||||
|
||||
if(ENABLE_JAVADOC)
|
||||
find_package(Java REQUIRED)
|
||||
set(JAVADOC_PACKAGES "org.linphone.core org.linphone.mediastream")
|
||||
set(JAVADOC_CLASSPATHS
|
||||
"${PROJECT_SOURCE_DIR}/java/common"
|
||||
"${PROJECT_SOURCE_DIR}/java/j2se"
|
||||
"${PROJECT_SOURCE_DIR}/mediastreamer2/java/src"
|
||||
)
|
||||
string(REPLACE ";" ":" JAVADOC_CLASSPATHS "${JAVADOC_CLASSPATHS}")
|
||||
set(JAVADOC_TITLE "Linphone SDK ${PROJECT_VERSION} reference documentation")
|
||||
set(JAVADOC_JAVA_REFERENCE "http://docs.oracle.com/javase/8/docs/api/")
|
||||
set(JAVADOC_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc/java")
|
||||
set(JAVADOC_LOGFILE "${CMAKE_CURRENT_BINARY_DIR}/javadoc.log")
|
||||
configure_file("generate_javadoc.sh.in" "generate_javadoc.sh" @ONLY)
|
||||
add_custom_target(javadoc ALL
|
||||
COMMAND "${CMAKE_CURRENT_BINARY_DIR}/generate_javadoc.sh"
|
||||
)
|
||||
endif()
|
||||
|
||||
if (ENABLE_TOOLS)
|
||||
set(USE_BUNDLE )
|
||||
if (IOS)
|
||||
|
|
|
|||
11
coreapi/help/generate_javadoc.sh.in
Executable file
11
coreapi/help/generate_javadoc.sh.in
Executable file
|
|
@ -0,0 +1,11 @@
|
|||
#!/bin/bash
|
||||
|
||||
packages='@JAVADOC_PACKAGES@'
|
||||
classpaths='@JAVADOC_CLASSPATHS@'
|
||||
title='@JAVADOC_TITLE@'
|
||||
javaref='@JAVADOC_JAVA_REFERENCE@'
|
||||
outputdir='@JAVADOC_OUTPUT_DIR@'
|
||||
|
||||
@Java_JAVADOC_EXECUTABLE@ ${packages} -classpath ${classpaths} -doctitle "${title}" -link ${javaref} -d ${outputdir} 2>&1 | tee @JAVADOC_LOGFILE@
|
||||
grep -E '^[0-9]{1,3} errors?' @JAVADOC_LOGFILE@ &> /dev/null && exit 1
|
||||
exit 0
|
||||
|
|
@ -5056,12 +5056,17 @@ void linphone_call_repair_if_broken(LinphoneCall *call){
|
|||
LinphoneCallParams *params;
|
||||
|
||||
if (!call->broken) return;
|
||||
|
||||
/*First, make sure that the proxy from which we received this call, or to which we routed this call is registered*/
|
||||
if (!call->dest_proxy || linphone_proxy_config_get_state(call->dest_proxy) != LinphoneRegistrationOk) return;
|
||||
|
||||
if (!call->core->media_network_reachable) return;
|
||||
|
||||
/*Make sure that the proxy from which we received this call, or to which we routed this call is registered first*/
|
||||
if (call->dest_proxy){
|
||||
/*in all other cases, ie no proxy config, or a proxy config for which no registration was requested, we can start the
|
||||
* call repair immediately.*/
|
||||
if (linphone_proxy_config_register_enabled(call->dest_proxy)
|
||||
&& linphone_proxy_config_get_state(call->dest_proxy) != LinphoneRegistrationOk) return;
|
||||
}
|
||||
|
||||
|
||||
switch (call->state){
|
||||
case LinphoneCallStreamsRunning:
|
||||
case LinphoneCallPaused:
|
||||
|
|
|
|||
|
|
@ -2411,6 +2411,17 @@ static bool_t transports_unchanged(const LCSipTransports * tr1, const LCSipTrans
|
|||
tr2->tls_port==tr1->tls_port;
|
||||
}
|
||||
|
||||
static void __linphone_core_invalidate_registers(LinphoneCore* lc){
|
||||
const bctbx_list_t *elem=linphone_core_get_proxy_config_list(lc);
|
||||
for(;elem!=NULL;elem=elem->next){
|
||||
LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data;
|
||||
if (linphone_proxy_config_register_enabled(cfg)) {
|
||||
/*this will force a re-registration at next iterate*/
|
||||
cfg->commit = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int _linphone_core_apply_transports(LinphoneCore *lc){
|
||||
Sal *sal=lc->sal;
|
||||
const char *anyaddr;
|
||||
|
|
@ -5103,7 +5114,7 @@ void linphone_core_enable_mic(LinphoneCore *lc, bool_t enable) {
|
|||
call = (LinphoneCall *)elem->data;
|
||||
call->audio_muted = !enable;
|
||||
if (call->audiostream)
|
||||
linphone_core_mute_audio_stream(lc, call->audiostream, enable);
|
||||
linphone_core_mute_audio_stream(lc, call->audiostream, call->audio_muted);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6514,14 +6525,7 @@ void sip_config_uninit(LinphoneCore *lc)
|
|||
|
||||
lc->auth_info=bctbx_list_free_with_data(lc->auth_info,(void (*)(void*))linphone_auth_info_destroy);
|
||||
|
||||
/*now that we are unregisted, we no longer need the tunnel.*/
|
||||
#ifdef TUNNEL_ENABLED
|
||||
if (lc->tunnel) {
|
||||
linphone_tunnel_destroy(lc->tunnel);
|
||||
lc->tunnel=NULL;
|
||||
ms_message("Tunnel destroyed.");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (lc->vcard_context) {
|
||||
linphone_vcard_context_destroy(lc->vcard_context);
|
||||
|
|
@ -6537,9 +6541,20 @@ void sip_config_uninit(LinphoneCore *lc)
|
|||
belle_sip_object_unref(lc->http_crypto_config);
|
||||
lc->http_crypto_config=NULL;
|
||||
}
|
||||
|
||||
/*now that we are unregisted, there is no more channel using tunnel socket we no longer need the tunnel.*/
|
||||
#ifdef TUNNEL_ENABLED
|
||||
if (lc->tunnel) {
|
||||
linphone_tunnel_destroy(lc->tunnel);
|
||||
lc->tunnel=NULL;
|
||||
ms_message("Tunnel destroyed.");
|
||||
}
|
||||
#endif
|
||||
|
||||
sal_iterate(lc->sal); /*make sure event are purged*/
|
||||
sal_uninit(lc->sal);
|
||||
lc->sal=NULL;
|
||||
|
||||
|
||||
if (lc->sip_conf.guessed_contact)
|
||||
ms_free(lc->sip_conf.guessed_contact);
|
||||
|
|
@ -6876,16 +6891,6 @@ void linphone_core_refresh_registers(LinphoneCore* lc) {
|
|||
}
|
||||
}
|
||||
|
||||
void __linphone_core_invalidate_registers(LinphoneCore* lc){
|
||||
const bctbx_list_t *elem=linphone_core_get_proxy_config_list(lc);
|
||||
for(;elem!=NULL;elem=elem->next){
|
||||
LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data;
|
||||
if (linphone_proxy_config_register_enabled(cfg)) {
|
||||
linphone_proxy_config_edit(cfg);
|
||||
linphone_proxy_config_done(cfg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void disable_internal_network_reachability_detection(LinphoneCore *lc){
|
||||
if (lc->auto_net_state_mon) {
|
||||
|
|
@ -7431,6 +7436,10 @@ void linphone_core_set_media_encryption_mandatory(LinphoneCore *lc, bool_t m) {
|
|||
void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *params) {
|
||||
params->has_audio = TRUE;
|
||||
params->has_video=linphone_core_video_enabled(lc) && lc->video_policy.automatically_initiate;
|
||||
if (!linphone_core_video_enabled(lc) && lc->video_policy.automatically_initiate){
|
||||
ms_error("LinphoneCore has video disabled for both capture and display, but video policy is to start the call with video. "
|
||||
"This is a possible mis-use of the API. In this case, video is disabled in default LinphoneCallParams");
|
||||
}
|
||||
params->media_encryption=linphone_core_get_media_encryption(lc);
|
||||
params->in_conference=FALSE;
|
||||
params->realtimetext_enabled = linphone_core_realtime_text_enabled(lc);
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ enum _LinphoneReason{
|
|||
LinphoneReasonIOError, /**<Transport error: connection failures, disconnections etc...*/
|
||||
LinphoneReasonDoNotDisturb, /**<Do not disturb reason*/
|
||||
LinphoneReasonUnauthorized, /**<Operation is unauthorized because missing credential*/
|
||||
LinphoneReasonNotAcceptable, /**<Operation like call update rejected by peer*/
|
||||
LinphoneReasonNotAcceptable, /**<Operation is rejected due to incompatible or unsupported media parameters*/
|
||||
LinphoneReasonNoMatch, /**<Operation could not be executed by server or remote client because it didn't have any context for it*/
|
||||
LinphoneReasonMovedPermanently, /**<Resource moved permanently*/
|
||||
LinphoneReasonGone, /**<Resource no longer exists*/
|
||||
|
|
|
|||
|
|
@ -3346,6 +3346,20 @@ extern "C" void Java_org_linphone_core_LinphoneCallStatsImpl_updateStats(JNIEnv
|
|||
linphone_call_get_video_stats((LinphoneCall*)call_ptr);
|
||||
}
|
||||
|
||||
extern "C" jstring Java_org_linphone_core_LinphoneCallStatsImpl_getEncoderName(JNIEnv *env, jobject thiz, jlong stats_ptr, jlong call_ptr, jlong payload_ptr) {
|
||||
LinphoneCore *lc = linphone_call_get_core((LinphoneCall*)call_ptr);
|
||||
PayloadType* jpayload = (PayloadType*)payload_ptr;
|
||||
jstring jencodername =env->NewStringUTF(ms_factory_get_encoder(linphone_core_get_ms_factory(lc), jpayload->mime_type)->text);
|
||||
return jencodername;
|
||||
}
|
||||
|
||||
extern "C" jstring Java_org_linphone_core_LinphoneCallStatsImpl_getDecoderName(JNIEnv *env, jobject thiz, jlong stats_ptr, jlong call_ptr, jlong payload_ptr) {
|
||||
LinphoneCore *lc = linphone_call_get_core((LinphoneCall*)call_ptr);
|
||||
PayloadType* jpayload = (PayloadType*)payload_ptr;
|
||||
jstring jdecodername =env->NewStringUTF(ms_factory_get_decoder(linphone_core_get_ms_factory(lc), jpayload->mime_type)->text);
|
||||
return jdecodername;
|
||||
}
|
||||
|
||||
/*payloadType*/
|
||||
extern "C" jstring Java_org_linphone_core_PayloadTypeImpl_toString(JNIEnv* env,jobject thiz,jlong ptr) {
|
||||
PayloadType* pt = (PayloadType*)ptr;
|
||||
|
|
@ -8052,6 +8066,32 @@ static void account_creator_activate_phone_number_link(LinphoneAccountCreator *c
|
|||
ms_error("cannot attach VM\n");
|
||||
return;
|
||||
}
|
||||
|
||||
LinphoneAccountCreatorCbs *cbs = linphone_account_creator_get_callbacks(creator);
|
||||
jobject listener = (jobject) linphone_account_creator_cbs_get_user_data(cbs);
|
||||
if (listener == NULL) {
|
||||
ms_error("account_creator_response() notification without listener");
|
||||
return ;
|
||||
}
|
||||
|
||||
LinphoneCore *lc = (LinphoneCore *)creator->core;
|
||||
LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc);
|
||||
|
||||
jclass clazz = (jclass) env->GetObjectClass(listener);
|
||||
jmethodID method = env->GetMethodID(clazz, "onAccountCreatorPhoneNumberLinkActivated","(Lorg/linphone/core/LinphoneAccountCreator;Lorg/linphone/core/LinphoneAccountCreator$Status;)V");
|
||||
env->DeleteLocalRef(clazz);
|
||||
|
||||
jobject statusObject = env->CallStaticObjectMethod(ljb->accountCreatorStatusClass, ljb->accountCreatorStatusFromIntId, (jint)status);
|
||||
env->CallVoidMethod(listener, method, getAccountCreator(env, creator), statusObject);
|
||||
}
|
||||
|
||||
static void account_creator_is_account_linked(LinphoneAccountCreator *creator, LinphoneAccountCreatorStatus status, const char *resp) {
|
||||
JNIEnv *env = 0;
|
||||
jint result = jvm->AttachCurrentThread(&env,NULL);
|
||||
if (result != 0) {
|
||||
ms_error("cannot attach VM\n");
|
||||
return;
|
||||
}
|
||||
|
||||
LinphoneAccountCreatorCbs *cbs = linphone_account_creator_get_callbacks(creator);
|
||||
jobject listener = (jobject) linphone_account_creator_cbs_get_user_data(cbs);
|
||||
|
|
@ -8064,7 +8104,7 @@ static void account_creator_activate_phone_number_link(LinphoneAccountCreator *c
|
|||
LinphoneJavaBindings *ljb = (LinphoneJavaBindings *)linphone_core_get_user_data(lc);
|
||||
|
||||
jclass clazz = (jclass) env->GetObjectClass(listener);
|
||||
jmethodID method = env->GetMethodID(clazz, "onAccountCreatorPhoneNumberLinkActivated","(Lorg/linphone/core/LinphoneAccountCreator;Lorg/linphone/core/LinphoneAccountCreator$Status;)V");
|
||||
jmethodID method = env->GetMethodID(clazz, "onAccountCreatorIsAccountLinked","(Lorg/linphone/core/LinphoneAccountCreator;Lorg/linphone/core/LinphoneAccountCreator$Status;)V");
|
||||
env->DeleteLocalRef(clazz);
|
||||
|
||||
jobject statusObject = env->CallStaticObjectMethod(ljb->accountCreatorStatusClass, ljb->accountCreatorStatusFromIntId, (jint)status);
|
||||
|
|
@ -8301,6 +8341,11 @@ extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_activateAccoun
|
|||
return (jint) linphone_account_creator_activate_account(account_creator);
|
||||
}
|
||||
|
||||
extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_isAccountLinked(JNIEnv *env, jobject thiz, jlong ptr) {
|
||||
LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr;
|
||||
return (jint) linphone_account_creator_is_account_linked(account_creator);
|
||||
}
|
||||
|
||||
extern "C" jint Java_org_linphone_core_LinphoneAccountCreatorImpl_isAccountActivated(JNIEnv *env, jobject thiz, jlong ptr) {
|
||||
LinphoneAccountCreator *account_creator = (LinphoneAccountCreator *)ptr;
|
||||
return (jint) linphone_account_creator_is_account_activated(account_creator);
|
||||
|
|
|
|||
|
|
@ -134,6 +134,11 @@ LINPHONE_PUBLIC const LinphoneDialPlan* linphone_dial_plan_get_all(void);
|
|||
**/
|
||||
LINPHONE_PUBLIC const LinphoneDialPlan* linphone_dial_plan_by_ccc(const char *ccc);
|
||||
|
||||
/**
|
||||
* Return if given plan is generic
|
||||
**/
|
||||
LINPHONE_PUBLIC const bool_t linphone_dial_plan_is_generic(const LinphoneDialPlan *ccc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -652,6 +652,9 @@ struct _LinphoneProxyConfig
|
|||
/*use to check if server config has changed between edit() and done()*/
|
||||
LinphoneAddress *saved_proxy;
|
||||
LinphoneAddress *saved_identity;
|
||||
int saved_expires;
|
||||
bool_t saved_sendregister;
|
||||
bool_t unused[3];
|
||||
/*---*/
|
||||
LinphoneAddress *pending_contact; /*use to store previous contact in case of network failure*/
|
||||
LinphoneEvent *long_term_event;
|
||||
|
|
@ -1160,7 +1163,6 @@ bool_t linphone_core_sound_resources_available(LinphoneCore *lc);
|
|||
void linphone_core_notify_refer_state(LinphoneCore *lc, LinphoneCall *referer, LinphoneCall *newcall);
|
||||
unsigned int linphone_core_get_audio_features(LinphoneCore *lc);
|
||||
|
||||
void __linphone_core_invalidate_registers(LinphoneCore* lc);
|
||||
void _linphone_core_codec_config_write(LinphoneCore *lc);
|
||||
|
||||
#define HOLD_OFF (0)
|
||||
|
|
@ -1336,6 +1338,7 @@ struct _LinphoneAccountCreatorCbs {
|
|||
LinphoneAccountCreatorCbsStatusCb link_phone_number_with_account;
|
||||
LinphoneAccountCreatorCbsStatusCb activate_phone_number_link;
|
||||
LinphoneAccountCreatorCbsStatusCb recover_phone_account;
|
||||
LinphoneAccountCreatorCbsStatusCb is_account_linked;
|
||||
};
|
||||
|
||||
BELLE_SIP_DECLARE_VPTR(LinphoneAccountCreatorCbs);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ Copyright (C) 2000 Simon MORLAT (simon.morlat@linphone.org)
|
|||
|
||||
/*store current config related to server location*/
|
||||
static void linphone_proxy_config_store_server_config(LinphoneProxyConfig* cfg) {
|
||||
cfg->saved_sendregister = cfg->reg_sendregister;
|
||||
if (cfg->saved_identity) linphone_address_destroy(cfg->saved_identity);
|
||||
if (cfg->identity_address)
|
||||
cfg->saved_identity = linphone_address_clone(cfg->identity_address);
|
||||
|
|
@ -64,7 +65,7 @@ LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_confi
|
|||
LinphoneAddress *current_proxy=cfg->reg_proxy?linphone_address_new(cfg->reg_proxy):NULL;
|
||||
LinphoneProxyConfigAddressComparisonResult result_identity;
|
||||
LinphoneProxyConfigAddressComparisonResult result;
|
||||
|
||||
|
||||
result = linphone_proxy_config_address_equal(cfg->saved_identity,cfg->identity_address);
|
||||
if (result == LinphoneProxyConfigAddressDifferent) goto end;
|
||||
result_identity = result;
|
||||
|
|
@ -79,6 +80,7 @@ LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_confi
|
|||
|
||||
end:
|
||||
if (current_proxy) linphone_address_destroy(current_proxy);
|
||||
ms_message("linphone_proxy_config_is_server_config_changed : %i", result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -762,7 +764,7 @@ int linphone_proxy_config_done(LinphoneProxyConfig *cfg)
|
|||
if (!linphone_proxy_config_check(cfg->lc,cfg))
|
||||
return -1;
|
||||
|
||||
/*check if server address as changed*/
|
||||
/*check if server address has changed*/
|
||||
res = linphone_proxy_config_is_server_config_changed(cfg);
|
||||
if (res != LinphoneProxyConfigAddressEqual) {
|
||||
/* server config has changed, need to unregister from previous first*/
|
||||
|
|
@ -778,22 +780,26 @@ int linphone_proxy_config_done(LinphoneProxyConfig *cfg)
|
|||
if (res == LinphoneProxyConfigAddressDifferent) {
|
||||
_linphone_proxy_config_unpublish(cfg);
|
||||
}
|
||||
|
||||
}
|
||||
cfg->commit = TRUE;
|
||||
}
|
||||
if ((cfg->saved_sendregister != cfg->reg_sendregister)
|
||||
|| (cfg->saved_expires != cfg->expires)){
|
||||
cfg->commit = TRUE;
|
||||
}
|
||||
|
||||
if (linphone_proxy_config_compute_publish_params_hash(cfg)) {
|
||||
ms_message("Publish params have changed on proxy config [%p]",cfg);
|
||||
if (cfg->long_term_event) {
|
||||
if (!cfg->publish) {
|
||||
/*publish is terminated*/
|
||||
linphone_event_terminate(cfg->long_term_event);
|
||||
} else {
|
||||
if (cfg->publish) {
|
||||
const char * sip_etag = linphone_event_get_custom_header(cfg->long_term_event, "SIP-ETag");
|
||||
if (sip_etag) {
|
||||
if (cfg->sip_etag) ms_free(cfg->sip_etag);
|
||||
cfg->sip_etag = ms_strdup(sip_etag);
|
||||
}
|
||||
}
|
||||
/*publish is terminated*/
|
||||
linphone_event_terminate(cfg->long_term_event);
|
||||
linphone_event_unref(cfg->long_term_event);
|
||||
cfg->long_term_event = NULL;
|
||||
}
|
||||
|
|
@ -801,7 +807,7 @@ int linphone_proxy_config_done(LinphoneProxyConfig *cfg)
|
|||
} else {
|
||||
ms_message("Publish params have not changed on proxy config [%p]",cfg);
|
||||
}
|
||||
cfg->commit=TRUE;
|
||||
|
||||
linphone_proxy_config_write_all_to_config_file(cfg->lc);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ public interface LinphoneAccountCreator {
|
|||
void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, Status status);
|
||||
void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, Status status);
|
||||
void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, Status status);
|
||||
void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, Status status);
|
||||
}
|
||||
|
||||
public static class Status {
|
||||
|
|
@ -48,20 +49,23 @@ public interface LinphoneAccountCreator {
|
|||
public final static Status AccountActivated = new Status(7, "AccountActivated");
|
||||
public final static Status AccountAlreadyActivated = new Status(8, "AccountAlreadyActivated");
|
||||
public final static Status AccountNotActivated = new Status(9, "AccountNotActivated");
|
||||
public final static Status EmailInvalid = new Status(10, "EmailInvalid");
|
||||
public final static Status UsernameInvalid = new Status(11, "UsernameInvalid");
|
||||
public final static Status UsernameTooShort = new Status(12, "UsernameTooShort");
|
||||
public final static Status UsernameTooLong = new Status(13, "UsernameTooLong");
|
||||
public final static Status UsernameInvalidSize = new Status(14, "UsernameInvalidSize");
|
||||
public final static Status PhoneNumberInvalid = new Status(15, "PhoneNumberInvalid");
|
||||
public final static Status PhoneNumberTooShort = new Status(16, "PhoneNumberTooShort");
|
||||
public final static Status PhoneNumberTooLong = new Status(17, "PhoneNumberTooLong");
|
||||
public final static Status PasswordTooShort = new Status(18, "PasswordTooShort");
|
||||
public final static Status PasswordTooLong = new Status(19, "PasswordTooLong");
|
||||
public final static Status DomainInvalid = new Status(20, "DomainInvalid");
|
||||
public final static Status RouteInvalid = new Status(21, "RouteInvalid");
|
||||
public final static Status DisplayNameInvalid = new Status(22, "DisplayNameInvalid");
|
||||
public final static Status TransportNotSupported = new Status(23, "TransportNotSupported");
|
||||
public final static Status AccountLinked = new Status(10, "AccountLinked");
|
||||
public final static Status AccountNotLinked = new Status(11, "AccountNotLinked");
|
||||
public final static Status EmailInvalid = new Status(12, "EmailInvalid");
|
||||
public final static Status UsernameInvalid = new Status(13, "UsernameInvalid");
|
||||
public final static Status UsernameTooShort = new Status(14, "UsernameTooShort");
|
||||
public final static Status UsernameTooLong = new Status(15, "UsernameTooLong");
|
||||
public final static Status UsernameInvalidSize = new Status(16, "UsernameInvalidSize");
|
||||
public final static Status PhoneNumberInvalid = new Status(17, "PhoneNumberInvalid");
|
||||
public final static Status PhoneNumberTooShort = new Status(18, "PhoneNumberTooShort");
|
||||
public final static Status PhoneNumberTooLong = new Status(19, "PhoneNumberTooLong");
|
||||
public final static Status PasswordTooShort = new Status(20, "PasswordTooShort");
|
||||
public final static Status PasswordTooLong = new Status(21, "PasswordTooLong");
|
||||
public final static Status DomainInvalid = new Status(22, "DomainInvalid");
|
||||
public final static Status RouteInvalid = new Status(23, "RouteInvalid");
|
||||
public final static Status DisplayNameInvalid = new Status(24, "DisplayNameInvalid");
|
||||
public final static Status TransportNotSupported = new Status(25, "TransportNotSupported");
|
||||
public final static Status CountryCodeInvalid = new Status(26, "CountryCodeInvalid");
|
||||
|
||||
private Status(int value, String stringValue) {
|
||||
mValue = value;
|
||||
|
|
@ -137,7 +141,9 @@ public interface LinphoneAccountCreator {
|
|||
Status linkPhoneNumberWithAccount();
|
||||
|
||||
Status activatePhoneNumberLink();
|
||||
|
||||
|
||||
Status isAccountLinked();
|
||||
|
||||
Status recoverPhoneAccount();
|
||||
|
||||
LinphoneProxyConfig configure();
|
||||
|
|
|
|||
|
|
@ -177,4 +177,18 @@ public interface LinphoneCallStats {
|
|||
* @return The local late rate percentage.
|
||||
**/
|
||||
public float getLocalLateRate();
|
||||
|
||||
/**
|
||||
* Get the encoder name of specified payload
|
||||
* @param pl payload
|
||||
* @return The name of encoder
|
||||
*/
|
||||
public String getEncoderName(PayloadType pl);
|
||||
|
||||
/**
|
||||
* Get the decoder name of specified payload
|
||||
* @param pl payload
|
||||
* @return The name of decoder
|
||||
*/
|
||||
public String getDecoderName(PayloadType pl);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -181,4 +181,9 @@ abstract public class LinphoneCoreFactory {
|
|||
* Create TunnelConfig object, used to configure voip anti blocking extension.
|
||||
*/
|
||||
abstract public TunnelConfig createTunnelConfig();
|
||||
|
||||
/**
|
||||
* Create LinphoneAccountCreator object
|
||||
*/
|
||||
abstract public LinphoneAccountCreator createAccountCreator(LinphoneCore lc, String url);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,6 +177,12 @@ public class LinphoneAccountCreatorImpl implements LinphoneAccountCreator {
|
|||
public Status activateAccount() {
|
||||
return Status.fromInt(activateAccount(nativePtr));
|
||||
}
|
||||
|
||||
private native int isAccountLinked(long ptr);
|
||||
@Override
|
||||
public Status isAccountLinked() {
|
||||
return Status.fromInt(isAccountLinked(nativePtr));
|
||||
}
|
||||
|
||||
private native int isAccountActivated(long ptr);
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
|
|||
private float localLossRate;
|
||||
private float localLateRate;
|
||||
private long nativePtr;
|
||||
private long nativeCPtr;
|
||||
|
||||
private native int getMediaType(long nativeStatsPtr);
|
||||
private native int getIceState(long nativeStatsPtr);
|
||||
|
|
@ -48,10 +49,13 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
|
|||
private native float getJitterBufferSize(long nativeStatsPtr);
|
||||
private native float getLocalLossRate(long nativeStatsPtr);
|
||||
private native float getLocalLateRate(long nativeStatsPtr);
|
||||
private native String getEncoderName(long nativeStatsPtr, long nativeCallPtr, long payloadPtr);
|
||||
private native String getDecoderName(long nativeStatsPtr, long nativeCallPtr, long payloadPtr);
|
||||
private native void updateStats(long nativeCallPtr, int mediaType);
|
||||
|
||||
protected LinphoneCallStatsImpl(long nativeCallPtr, long nativeStatsPtr) {
|
||||
nativePtr=nativeStatsPtr;
|
||||
nativePtr = nativeStatsPtr;
|
||||
nativeCPtr = nativeCallPtr;
|
||||
mediaType = getMediaType(nativeStatsPtr);
|
||||
iceState = getIceState(nativeStatsPtr);
|
||||
downloadBandwidth = getDownloadBandwidth(nativeStatsPtr);
|
||||
|
|
@ -123,4 +127,16 @@ class LinphoneCallStatsImpl implements LinphoneCallStats {
|
|||
public float getLocalLateRate(){
|
||||
return localLateRate;
|
||||
}
|
||||
|
||||
public String getEncoderName(PayloadType pl) {
|
||||
if (pl == null)
|
||||
return "";
|
||||
return getEncoderName(nativePtr, nativeCPtr, ((PayloadTypeImpl)pl).nativePtr);
|
||||
}
|
||||
|
||||
public String getDecoderName(PayloadType pl) {
|
||||
if (pl == null)
|
||||
return "";
|
||||
return getDecoderName(nativePtr, nativeCPtr, ((PayloadTypeImpl)pl).nativePtr);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -239,4 +239,9 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
|
|||
public TunnelConfig createTunnelConfig() {
|
||||
return (TunnelConfig)_createTunnelConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LinphoneAccountCreator createAccountCreator(LinphoneCore lc, String url) {
|
||||
return new LinphoneAccountCreatorImpl(lc, url);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 26f884bf977977041fe6f98a0af186be1580bf22
|
||||
Subproject commit 8b4fca52b0e6939f908a33da9952cf4a8c862a07
|
||||
|
|
@ -254,19 +254,21 @@ static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManag
|
|||
bool_t is_remote_conf;
|
||||
bool_t focus_is_up = (focus && ((LinphoneConferenceServer *)focus)->reg_state == LinphoneRegistrationOk);
|
||||
bctbx_list_t* lcs=bctbx_list_append(NULL,marie->lc);
|
||||
|
||||
lcs=bctbx_list_append(lcs,pauline->lc);
|
||||
lcs=bctbx_list_append(lcs,laure->lc);
|
||||
if(focus) lcs=bctbx_list_append(lcs,focus->lc);
|
||||
if (focus) lcs=bctbx_list_append(lcs,focus->lc);
|
||||
|
||||
is_remote_conf = (strcmp(lp_config_get_string(marie->lc->config, "misc", "conference_type", "local"), "remote") == 0);
|
||||
if(is_remote_conf) BC_ASSERT_PTR_NOT_NULL(focus);
|
||||
|
||||
BC_ASSERT_TRUE(call(marie,pauline));
|
||||
if (!BC_ASSERT_TRUE(call(marie,pauline))) goto end;
|
||||
|
||||
marie_call_pauline=linphone_core_get_current_call(marie->lc);
|
||||
pauline_called_by_marie=linphone_core_get_current_call(pauline->lc);
|
||||
BC_ASSERT_TRUE(pause_call_1(marie,marie_call_pauline,pauline,pauline_called_by_marie));
|
||||
|
||||
BC_ASSERT_TRUE(call(marie,laure));
|
||||
if (!BC_ASSERT_TRUE(call(marie,laure))) goto end;
|
||||
initial_marie_stat=marie->stat;
|
||||
initial_pauline_stat=pauline->stat;
|
||||
initial_laure_stat=laure->stat;
|
||||
|
|
|
|||
|
|
@ -1381,8 +1381,8 @@ static void call_with_custom_headers(void) {
|
|||
linphone_call_params_add_custom_header(params,"Weather","bad");
|
||||
linphone_call_params_add_custom_header(params,"Working","yes");
|
||||
|
||||
BC_ASSERT_TRUE(call_with_caller_params(pauline,marie,params));
|
||||
linphone_call_params_destroy(params);
|
||||
if (!BC_ASSERT_TRUE(call_with_caller_params(pauline,marie,params))) goto end;
|
||||
|
||||
|
||||
call_marie=linphone_core_get_current_call(marie->lc);
|
||||
call_pauline=linphone_core_get_current_call(pauline->lc);
|
||||
|
|
@ -1419,7 +1419,9 @@ static void call_with_custom_headers(void) {
|
|||
ms_free(marie_remote_contact_header);
|
||||
|
||||
end_call(pauline, marie);
|
||||
|
||||
|
||||
end:
|
||||
linphone_call_params_destroy(params);
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -871,22 +871,50 @@ static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVide
|
|||
bool_t video_added_by_caller, bool_t video_added_by_callee, bool_t video_removed_by_caller, bool_t video_removed_by_callee) {
|
||||
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new(transport_supported(LinphoneTransportTls) ? "pauline_rc" : "pauline_tcp_rc");
|
||||
bool_t call_ok;
|
||||
unsigned int nb_media_starts = 1;
|
||||
const LinphoneCallParams *marie_remote_params;
|
||||
const LinphoneCallParams *pauline_current_params;
|
||||
|
||||
linphone_core_enable_video_capture(marie->lc, TRUE);
|
||||
linphone_core_enable_video_capture(pauline->lc, TRUE);
|
||||
linphone_core_enable_video_display(marie->lc, TRUE);
|
||||
linphone_core_enable_video_display(pauline->lc, TRUE);
|
||||
linphone_core_set_video_policy(pauline->lc, &caller_policy);
|
||||
linphone_core_set_video_policy(marie->lc, &callee_policy);
|
||||
linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce);
|
||||
linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce);
|
||||
|
||||
/* This is to activate media relay on Flexisip server.
|
||||
* Indeed, we want to test ICE with relay candidates as well, even though
|
||||
* they will not be used at the end.*/
|
||||
linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL);
|
||||
linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL);
|
||||
|
||||
linphone_core_set_audio_port(marie->lc, -1);
|
||||
linphone_core_set_video_port(marie->lc, -1);
|
||||
linphone_core_set_audio_port(pauline->lc, -1);
|
||||
linphone_core_set_video_port(pauline->lc, -1);
|
||||
|
||||
BC_ASSERT_TRUE(call_ok = call(pauline, marie));
|
||||
if (!call_ok) goto end;
|
||||
|
||||
|
||||
linphone_core_invite_address(pauline->lc, marie->identity);
|
||||
if (!BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneCallIncomingReceived, 1))) goto end;
|
||||
marie_remote_params = linphone_call_get_remote_params(linphone_core_get_current_call(marie->lc));
|
||||
BC_ASSERT_PTR_NOT_NULL(marie_remote_params);
|
||||
if (marie_remote_params){
|
||||
BC_ASSERT_TRUE(linphone_call_params_video_enabled(marie_remote_params) == caller_policy.automatically_initiate);
|
||||
}
|
||||
|
||||
linphone_core_accept_call(marie->lc, linphone_core_get_current_call(marie->lc));
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)
|
||||
&& wait_for(pauline->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1));
|
||||
|
||||
pauline_current_params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc));
|
||||
BC_ASSERT_PTR_NOT_NULL(pauline_current_params);
|
||||
if (pauline_current_params){
|
||||
BC_ASSERT_TRUE(linphone_call_params_video_enabled(pauline_current_params) ==
|
||||
(caller_policy.automatically_initiate && callee_policy.automatically_accept));
|
||||
}
|
||||
|
||||
/* Wait for ICE reINVITEs to complete. */
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2)
|
||||
&& wait_for(pauline->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 2));
|
||||
|
|
@ -954,7 +982,11 @@ static void call_with_ice_video_added_with_video_policies_to_false(void) {
|
|||
_call_with_ice_video(vpol, vpol, FALSE, TRUE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
#if ICE_WAS_WORKING_WITH_REAL_TIME_TEXT /*which is not the case at the moment*/
|
||||
static void call_with_ice_video_declined_then_added_by_callee(void) {
|
||||
LinphoneVideoPolicy caller_policy = { TRUE, TRUE };
|
||||
LinphoneVideoPolicy callee_policy = { FALSE, FALSE };
|
||||
_call_with_ice_video(caller_policy, callee_policy, FALSE, TRUE, FALSE, FALSE);
|
||||
}
|
||||
|
||||
static void call_with_ice_video_and_rtt(void) {
|
||||
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
|
||||
|
|
@ -980,7 +1012,7 @@ static void call_with_ice_video_and_rtt(void) {
|
|||
linphone_core_set_video_port(pauline->lc, -1);
|
||||
linphone_core_set_text_port(pauline->lc, -1);
|
||||
|
||||
params = linphone_core_create_default_call_parameters(pauline->lc);
|
||||
params = linphone_core_create_call_params(pauline->lc, NULL);
|
||||
linphone_call_params_enable_realtime_text(params, TRUE);
|
||||
BC_ASSERT_TRUE(call_ok = call_with_caller_params(pauline, marie, params));
|
||||
if (!call_ok) goto end;
|
||||
|
|
@ -998,7 +1030,6 @@ end:
|
|||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static void video_call_with_early_media_no_matching_audio_codecs(void) {
|
||||
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
|
||||
|
|
@ -1750,9 +1781,8 @@ test_t call_video_tests[] = {
|
|||
TEST_ONE_TAG("Call with ICE and video added 3", call_with_ice_video_added_3, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added and refused", call_with_ice_video_added_and_refused, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE and video added with video policies to false", call_with_ice_video_added_with_video_policies_to_false, "ICE"),
|
||||
#if ICE_WAS_WORKING_WITH_REAL_TIME_TEXT
|
||||
TEST_ONE_TAG("Call with ICE and video declined then added by callee", call_with_ice_video_declined_then_added_by_callee, "ICE"),
|
||||
TEST_ONE_TAG("Call with ICE, video and realtime text", call_with_ice_video_and_rtt, "ICE"),
|
||||
#endif
|
||||
TEST_ONE_TAG("Video call with ICE accepted using call params", video_call_ice_params, "ICE"),
|
||||
TEST_ONE_TAG("Audio call with ICE paused with caller video policy enabled", audio_call_with_ice_with_video_policy_enabled, "ICE"),
|
||||
TEST_NO_TAG("Video call recording (H264)", video_call_recording_h264_test),
|
||||
|
|
|
|||
|
|
@ -436,8 +436,9 @@ static void publish_test_with_args(bool_t refresh, int expires){
|
|||
|
||||
lev=linphone_core_create_publish(marie->lc,pauline->identity,"dodo",expires);
|
||||
linphone_event_add_custom_header(lev,"CustomHeader","someValue");
|
||||
linphone_event_send_publish(lev,content);
|
||||
linphone_event_ref(lev);
|
||||
linphone_event_send_publish(lev,content);
|
||||
|
||||
|
||||
BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000));
|
||||
BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000));
|
||||
|
|
|
|||
|
|
@ -675,6 +675,7 @@ static void call_with_sips_not_achievable(void){
|
|||
if (ei){
|
||||
BC_ASSERT_EQUAL(linphone_error_info_get_reason(ei), LinphoneReasonTemporarilyUnavailable, int, "%d");
|
||||
}
|
||||
linphone_call_unref(call);
|
||||
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline1);
|
||||
|
|
@ -946,7 +947,7 @@ static void dos_module_trigger(void) {
|
|||
} while (i < number_of_messge_to_send);
|
||||
// At this point we should be banned for a minute
|
||||
|
||||
ms_usleep(65000000); // Wait several seconds to ensure we are not banned anymore
|
||||
ms_sleep(65); // Wait several seconds to ensure we are not banned anymore
|
||||
BC_ASSERT_LOWER(marie->stat.number_of_LinphoneMessageReceived, number_of_messge_to_send, int, "%d");
|
||||
|
||||
reset_counters(&marie->stat);
|
||||
|
|
@ -1203,7 +1204,7 @@ test_t flexisip_tests[] = {
|
|||
TEST_NO_TAG("Call forking not responded", call_forking_not_responded),
|
||||
TEST_NO_TAG("Early-media call forking", early_media_call_forking),
|
||||
TEST_NO_TAG("Call with sips", call_with_sips),
|
||||
TEST_ONE_TAG("Call with sips not achievable", call_with_sips_not_achievable, "LeaksMemory"),
|
||||
TEST_NO_TAG("Call with sips not achievable", call_with_sips_not_achievable),
|
||||
TEST_NO_TAG("Call ipv6 to ipv6", call_with_ipv6),
|
||||
TEST_NO_TAG("Call ipv6 to ipv4", call_ipv6_to_ipv4),
|
||||
TEST_NO_TAG("Call ipv4 to ipv6", call_ipv4_to_ipv6),
|
||||
|
|
@ -1212,7 +1213,7 @@ test_t flexisip_tests[] = {
|
|||
/*TEST_ONE_TAG("Subscribe Notify with sipp double publish", test_subscribe_notify_with_sipp_publisher_double_publish, "LeaksMemory"),*/
|
||||
#endif
|
||||
TEST_NO_TAG("Publish/unpublish", test_publish_unpublish),
|
||||
TEST_ONE_TAG("List subscribe", test_list_subscribe,"LeaksMemory"),
|
||||
TEST_NO_TAG("List subscribe", test_list_subscribe),
|
||||
TEST_NO_TAG("File transfer message rcs to external body client", file_transfer_message_rcs_to_external_body_client),
|
||||
TEST_ONE_TAG("File transfer message external body to rcs client", file_transfer_message_external_body_to_rcs_client, "LeaksMemory"),
|
||||
TEST_ONE_TAG("File transfer message external body to external body client", file_transfer_message_external_body_to_external_body_client, "LeaksMemory"),
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ static void test_presence_list_base(bool_t enable_compression) {
|
|||
reset_counters(&laure->stat);
|
||||
reset_counters(&marie->stat);
|
||||
|
||||
/*keep in ming long terme presence*/
|
||||
/*keep in mind long terme presence*/
|
||||
|
||||
if (!BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphonePresenceActivityOnline, 1, 4000)))
|
||||
goto end;
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ realm=sip.example.org
|
|||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sipv4-nat64.example.org;transport=tls
|
||||
reg_route=sipv4-nat64.example.org;transport=tls
|
||||
reg_proxy=sipv4-nat64.example.org;transport=tcp
|
||||
reg_route=sipv4-nat64.example.org;transport=tcp
|
||||
reg_identity=sip:pauline@sip.example.org
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
|
|
|
|||
|
|
@ -15,8 +15,8 @@ realm=sip.example.org
|
|||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sipv4.example.org;transport=tls
|
||||
reg_route=sipv4.example.org;transport=tls
|
||||
reg_proxy=sipv4.example.org;transport=tcp
|
||||
reg_route=sipv4.example.org;transport=tcp
|
||||
reg_identity=sip:pauline@sip.example.org
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
|
|
|
|||
|
|
@ -47,11 +47,19 @@ static void linphone_stun_test_encode(void)
|
|||
|
||||
static void linphone_stun_test_grab_ip(void)
|
||||
{
|
||||
|
||||
LinphoneCoreManager* lc_stun = linphone_core_manager_new2("stun_rc", FALSE);
|
||||
LinphoneCall dummy_call;
|
||||
int ping_time;
|
||||
int tmp = 0;
|
||||
|
||||
/*this test verifies the very basic STUN support of liblinphone, which is deprecated.
|
||||
* It works only in IPv4 mode and there is no plan to make it work over ipv6.*/
|
||||
if (liblinphone_tester_ipv4_available()){
|
||||
goto end;
|
||||
}
|
||||
linphone_core_enable_ipv6(lc_stun->lc, FALSE);
|
||||
|
||||
memset(&dummy_call, 0, sizeof(LinphoneCall));
|
||||
dummy_call.main_audio_stream_index = 0;
|
||||
dummy_call.main_video_stream_index = 1;
|
||||
|
|
@ -85,6 +93,7 @@ static void linphone_stun_test_grab_ip(void)
|
|||
#endif
|
||||
ms_message("STUN test result: local text port maps to %s:%i", dummy_call.tc.addr, dummy_call.tc.port);
|
||||
|
||||
end:
|
||||
linphone_core_manager_destroy(lc_stun);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -424,7 +424,7 @@ void linphone_core_manager_stop(LinphoneCoreManager *mgr){
|
|||
if (mgr->lc) {
|
||||
const char *record_file = linphone_core_get_record_file(mgr->lc);
|
||||
char *chatdb = ms_strdup(linphone_core_get_chat_database_path(mgr->lc));
|
||||
if (!liblinphone_tester_keep_record_files && record_file) {
|
||||
if (!liblinphone_tester_keep_record_files && record_file && ortp_file_exist(record_file)) {
|
||||
if ((bc_get_number_of_failures() - mgr->number_of_bcunit_error_at_creation)>0) {
|
||||
ms_error("Test has failed, keeping recorded file [%s]", record_file);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,26 +24,21 @@
|
|||
#include "liblinphone_tester.h"
|
||||
|
||||
/* Retrieve the public IP from a given hostname */
|
||||
static const char* get_ip_from_hostname(const char * tunnel_hostname){
|
||||
int get_ip_from_hostname(const char * tunnel_hostname, char *ip, size_t ip_size){
|
||||
struct addrinfo hints;
|
||||
struct addrinfo *res = NULL, *it = NULL;
|
||||
struct sockaddr_in *add;
|
||||
char * output = NULL;
|
||||
struct addrinfo *res = NULL;
|
||||
int err;
|
||||
memset(&hints, 0, sizeof(hints));
|
||||
hints.ai_family = AF_UNSPEC;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
if ((err = getaddrinfo(tunnel_hostname, NULL, &hints, &res))){
|
||||
ms_error("error while retrieving IP from %s: %s", tunnel_hostname, gai_strerror(err));
|
||||
return NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
for (it=res; it!=NULL; it=it->ai_next){
|
||||
add = (struct sockaddr_in *) it->ai_addr;
|
||||
output = inet_ntoa( add->sin_addr );
|
||||
}
|
||||
bctbx_addrinfo_to_ip_address(res, ip, ip_size, NULL);
|
||||
freeaddrinfo(res);
|
||||
return output;
|
||||
return err;
|
||||
}
|
||||
static char* get_public_contact_ip(LinphoneCore* lc) {
|
||||
const LinphoneAddress * contact = linphone_proxy_config_get_contact(linphone_core_get_default_proxy_config(lc));
|
||||
|
|
@ -60,9 +55,10 @@ static void call_with_tunnel_base(LinphoneTunnelMode tunnel_mode, bool_t with_si
|
|||
LinphoneProxyConfig *proxy = linphone_core_get_default_proxy_config(pauline->lc);
|
||||
LinphoneAddress *server_addr = linphone_address_new(linphone_proxy_config_get_server_addr(proxy));
|
||||
LinphoneAddress *route = linphone_address_new(linphone_proxy_config_get_route(proxy));
|
||||
const char * tunnel_ip = get_ip_from_hostname("tunnel.linphone.org");
|
||||
char tunnel_ip[64];
|
||||
char *public_ip, *public_ip2=NULL;
|
||||
|
||||
BC_ASSERT_FALSE(get_ip_from_hostname("tunnel.linphone.org",tunnel_ip,sizeof(tunnel_ip)));
|
||||
|
||||
BC_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,1));
|
||||
public_ip = get_public_contact_ip(pauline->lc);
|
||||
BC_ASSERT_STRING_NOT_EQUAL(public_ip, tunnel_ip);
|
||||
|
|
@ -245,9 +241,10 @@ static void register_on_second_tunnel(void) {
|
|||
LinphoneTunnel *tunnel = linphone_core_get_tunnel(pauline->lc);
|
||||
LinphoneTunnelConfig *config1 = linphone_tunnel_config_new();
|
||||
LinphoneTunnelConfig *config2 = linphone_tunnel_config_new();
|
||||
const char * tunnel_ip = get_ip_from_hostname("tunnel.linphone.org");
|
||||
char tunnel_ip[64];
|
||||
char* public_ip;
|
||||
|
||||
|
||||
BC_ASSERT_FALSE(get_ip_from_hostname("tunnel.linphone.org",tunnel_ip,sizeof(tunnel_ip)));
|
||||
linphone_tunnel_simulate_udp_loss(tunnel, TRUE);
|
||||
|
||||
// add a first tunnel config with an invalid port
|
||||
|
|
|
|||
|
|
@ -799,8 +799,8 @@ test_t vcard_tests[] = {
|
|||
TEST_NO_TAG("vCard creation for existing friends", linphone_vcard_update_existing_friends_test),
|
||||
TEST_NO_TAG("vCard phone numbers and SIP addresses", linphone_vcard_phone_numbers_and_sip_addresses),
|
||||
#ifdef SQLITE_STORAGE_ENABLED
|
||||
TEST_ONE_TAG("Friends working if no db set", friends_if_no_db_set, "LeaksMemory"),
|
||||
TEST_ONE_TAG("Friends storage migration from rc to db", friends_migration, "LeaksMemory"),
|
||||
TEST_NO_TAG("Friends working if no db set", friends_if_no_db_set),
|
||||
TEST_NO_TAG("Friends storage migration from rc to db", friends_migration),
|
||||
TEST_NO_TAG("Friends storage in sqlite database", friends_sqlite_storage),
|
||||
#endif
|
||||
TEST_NO_TAG("CardDAV clean", carddav_clean), // This is to ensure the content of the test addressbook is in the correct state for the following tests
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue