diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index dc03944a5..6cee4473d 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -108,6 +108,21 @@ static bool_t is_duplicate_call(LinphoneCore *lc, const LinphoneAddress *from, c } #endif +static bool_t already_a_call_with_remote_address(const LinphoneCore *lc, const LinphoneAddress *remote) { + ms_warning(" searching for already_a_call_with_remote_address."); + + MSList *elem; + for(elem=lc->calls;elem!=NULL;elem=elem->next){ + const LinphoneCall *call=(LinphoneCall*)elem->data; + const LinphoneAddress *cRemote=linphone_call_get_remote_address(call); + if (linphone_address_weak_equal(cRemote,remote)) { + ms_warning("already_a_call_with_remote_address found."); + return TRUE; + } + } + return FALSE; +} + static bool_t already_a_call_pending(LinphoneCore *lc){ MSList *elem; for(elem=lc->calls;elem!=NULL;elem=elem->next){ @@ -161,7 +176,7 @@ static void call_received(SalOp *h){ from_addr=linphone_address_new(from); to_addr=linphone_address_new(to); - if (already_a_call_pending(lc)){ + if (already_a_call_with_remote_address(lc,from_addr) || already_a_call_pending(lc)){ ms_warning("Receiving another call while one is ringing or initiated, refusing this one with busy message."); sal_call_decline(h,SalReasonBusy,NULL); sal_op_release(h); diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 88f1be6ff..0d560f4e2 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -623,5 +623,6 @@ public interface LinphoneCore { LinphoneCall findCallFromUri(String uri); int getMaxCalls(); + boolean isMyself(String uri); }