diff --git a/res/values/strings.xml b/res/values/strings.xml index e8c7d15f4..edfd58b22 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1,6 +1,7 @@ + Bad URI : %s Authentication token is %s Communication not encrypted diff --git a/src/org/linphone/ConferenceActivity.java b/src/org/linphone/ConferenceActivity.java index 7d8150251..9770f3ed6 100644 --- a/src/org/linphone/ConferenceActivity.java +++ b/src/org/linphone/ConferenceActivity.java @@ -822,6 +822,24 @@ public class ConferenceActivity extends ListActivity implements } + private boolean checkValidTargetUri(String uri) { + boolean invalidUri; + try { + String target = lc().interpretUrl(uri).asStringUriOnly(); + LinphoneCall alreadyInCall = lc().findCallFromUri(target); + invalidUri = alreadyInCall != null || lc().isMyself(target); + } catch (LinphoneCoreException e) { + invalidUri = true; + } + + if (invalidUri) { + String msg = String.format(getString(R.string.bad_target_uri), uri); + Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); + return false; + } + return true; + } + private LinphoneCall callToTransfer; @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { @@ -838,6 +856,11 @@ public class ConferenceActivity extends ListActivity implements } String uri = data.getStringExtra(UriPickerActivity.EXTRA_CALLEE_URI); + if (!checkValidTargetUri(uri)) { + eventuallyResumeConfOrCallOnPickerReturn(true); + return; + } + switch (requestCode) { case ID_ADD_CALL: try { diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index cfaa8063e..f6ff0be5e 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -316,6 +316,10 @@ public final class LinphoneManager implements LinphoneCoreListener { LinphoneAddress lAddress; try { lAddress = mLc.interpretUrl(to); + if (mLc.isMyself(lAddress.asStringUriOnly())) { + listenerDispatcher.tryingNewOutgoingCallButWrongDestinationAddress(); + return; + } } catch (LinphoneCoreException e) { listenerDispatcher.tryingNewOutgoingCallButWrongDestinationAddress(); return; diff --git a/src/org/linphone/core/LinphoneCoreImpl.java b/src/org/linphone/core/LinphoneCoreImpl.java index b2a26a976..0e5cfbdb5 100644 --- a/src/org/linphone/core/LinphoneCoreImpl.java +++ b/src/org/linphone/core/LinphoneCoreImpl.java @@ -588,4 +588,8 @@ class LinphoneCoreImpl implements LinphoneCore { public int getMaxCalls() { return getMaxCalls(nativePtr); } + @Override + public boolean isMyself(String uri) { + return uri.equals(getDefaultProxyConfig().getIdentity()); + } } diff --git a/submodules/linphone b/submodules/linphone index 65dc7621f..f203f8218 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 65dc7621f45449893de50c28b94653c9af0ecb22 +Subproject commit f203f8218267fcc6e06846b19f8e432dee719397 diff --git a/test/org/linphone/TestConferenceActivity.java b/test/org/linphone/TestConferenceActivity.java index 31fd3a971..e6502b82a 100644 --- a/test/org/linphone/TestConferenceActivity.java +++ b/test/org/linphone/TestConferenceActivity.java @@ -324,6 +324,10 @@ public class TestConferenceActivity extends ConferenceActivity { public int getMaxCalls() { return 10; } + @Override + public boolean isMyself(String uri) { + return false; + } }