From df65d113730693274f1b35a516b0a065aa7c755c Mon Sep 17 00:00:00 2001 From: Guillaume Beraudo Date: Fri, 30 Sep 2011 12:18:16 +0200 Subject: [PATCH] Function linphone_core_find_call_from_uri(). --- coreapi/linphonecore.c | 19 +++++++++++++++++++ coreapi/linphonecore.h | 2 ++ coreapi/linphonecore_jni.cc | 8 ++++++++ coreapi/sal_eXosip2.c | 2 +- .../org/linphone/core/LinphoneCore.java | 2 ++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index a22959a18..cce64048e 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -4328,3 +4328,22 @@ void linphone_core_set_zrtp_secrets_file(LinphoneCore *lc, const char* file){ } lc->zrtp_secrets_cache=file ? ms_strdup(file) : NULL; } + +// if (stringUri.equals(call.getRemoteAddress().asStringUriOnly())) { +const LinphoneCall* linphone_core_find_call_from_uri(LinphoneCore *lc, const char *uri) { + if (uri == NULL) return NULL; + MSList *calls=lc->calls; + while(calls) { + const LinphoneCall *c=(LinphoneCall*)calls->data; + calls=calls->next; + const LinphoneAddress *address = linphone_call_get_remote_address(c); + char *current_uri=linphone_address_as_string_uri_only(address); + if (strcmp(uri,current_uri)==0) { + ms_free(current_uri); + return c; + } else { + ms_free(current_uri); + } + } + return NULL; +} diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index bdd6b06d6..368746cda 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -1017,6 +1017,8 @@ bool_t linphone_call_are_all_streams_encrypted(LinphoneCall *call); const char* linphone_call_get_authentication_token(LinphoneCall *call); bool_t linphone_call_get_authentication_token_verified(LinphoneCall *call); +const LinphoneCall* linphone_core_find_call_from_uri(LinphoneCore *lc, const char *uri); + int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call); int linphone_core_add_all_to_conference(LinphoneCore *lc); int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call); diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index cc15d5d44..b6c7ca47c 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -1420,6 +1420,14 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setZrtpSecretsCache(JNIE } } +extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_findCallFromUri(JNIEnv *env,jobject thiz,jlong pCore, jstring jUri) { + const char* cUri=env->GetStringUTFChars(jUri, NULL); + const LinphoneCall *call=linphone_core_find_call_from_uri((LinphoneCore *) pCore,cUri); + env->ReleaseStringUTFChars(jUri, cUri); + return (jlong) call; +} + + extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_setVideoDevice(JNIEnv *env,jobject thiz,jlong pCore,jint id) { LinphoneCore* lc = (LinphoneCore *) pCore; const char** devices = linphone_core_get_video_devices(lc); diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c index 8486d7e96..5b9500509 100644 --- a/coreapi/sal_eXosip2.c +++ b/coreapi/sal_eXosip2.c @@ -761,7 +761,7 @@ int sal_call_refer_with_replaces(SalOp *h, SalOp *other_call_h){ } SalOp *sal_call_get_replaces(SalOp *h){ - if (h->replaces!=NULL){ + if (h!=NULL && h->replaces!=NULL){ int cid; eXosip_lock(); cid=eXosip_call_find_by_replaces(h->replaces); diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 14ffb29a6..aef993ea0 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -619,4 +619,6 @@ public interface LinphoneCore { void transferCall(LinphoneCall call, String referTo); void transferCallToAnother(LinphoneCall callToTransfer, LinphoneCall destination); + + LinphoneCall findCallFromUri(String uri); }