Reject incoming calls from people already in call with.

Note that the other call will change state to paused by other.
This commit is contained in:
Guillaume Beraudo 2011-10-26 13:11:44 +02:00
parent 65dc7621f4
commit f203f82182
2 changed files with 17 additions and 1 deletions

View file

@ -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);

View file

@ -623,5 +623,6 @@ public interface LinphoneCore {
LinphoneCall findCallFromUri(String uri);
int getMaxCalls();
boolean isMyself(String uri);
}