diff --git a/res/raw/assistant_create.rc b/res/raw/assistant_create.rc new file mode 100644 index 000000000..c4cf45d46 --- /dev/null +++ b/res/raw/assistant_create.rc @@ -0,0 +1,33 @@ + + + +
+ 1 + 0 + 0 + sip:voip-metrics@sip.linphone.org;transport=tls + 1 + 180 + 31536000 + sip:?@sip.linphone.org + <sip:sip.linphone.org;transport=tls> + 1 + push_notification + sip.linphone.org +
+ +
+ sips:rls@sip.linphone.org +
+ +
+ sip.linphone.org + -1 + 1 + -1 + 64 + 1 + ^[a-z0-9+_.\-]*$ + https://sip3.linphone.org:444/wizard.php +
+
diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index aff1766ac..1a6bf8384 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -185,6 +185,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mLinphoneFactoryConfigFile = basePath + "/linphonerc"; mLinphoneConfigFile = basePath + "/.linphonerc"; mLinphoneRootCaFile = basePath + "/rootca.pem"; + mDynamicConfigFile = basePath + "/assistant_create.rc"; mRingSoundFile = basePath + "/ringtone.mkv"; mRingbackSoundFile = basePath + "/ringback.wav"; mPauseSoundFile = basePath + "/hold.mkv"; @@ -217,6 +218,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private final String mLPConfigXsd; private final String mLinphoneFactoryConfigFile; private final String mLinphoneRootCaFile; + private final String mDynamicConfigFile; public final String mLinphoneConfigFile; private final String mRingSoundFile; private final String mRingbackSoundFile; @@ -873,6 +875,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag copyFromPackage(R.raw.linphonerc_factory, new File(mLinphoneFactoryConfigFile).getName()); copyIfNotExist(R.raw.lpconfig, mLPConfigXsd); copyFromPackage(R.raw.rootca, new File(mLinphoneRootCaFile).getName()); + copyFromPackage(R.raw.assistant_create, new File(mDynamicConfigFile).getName()); } public void copyIfNotExist(int ressourceId, String target) throws IOException { @@ -1719,6 +1722,10 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mLc.setDnsServers(servers); } + public String getmDynamicConfigFile() { + return mDynamicConfigFile; + } + @SuppressWarnings("serial") public static class LinphoneConfigException extends LinphoneException { diff --git a/src/android/org/linphone/assistant/AssistantActivity.java b/src/android/org/linphone/assistant/AssistantActivity.java index 68bfec526..931fa45ef 100644 --- a/src/android/org/linphone/assistant/AssistantActivity.java +++ b/src/android/org/linphone/assistant/AssistantActivity.java @@ -35,6 +35,7 @@ import org.linphone.core.DialPlan; import org.linphone.core.LinphoneAccountCreator; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneAddress.TransportType; +import org.linphone.core.LinphoneAuthInfo; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCoreException; @@ -104,7 +105,6 @@ private static AssistantActivity instance; public DialPlan country; public String phone_number; public String email; - public String activation_code; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -345,31 +345,63 @@ private static AssistantActivity instance; } } - private void logIn(String username, String password, String ha1, String prefix, String domain, TransportType transport, boolean sendEcCalibrationResult) { + private void logIn(String username, String password, String ha1, String prefix, String domain, TransportType transport) { saveCreatedAccount(username, password, ha1, prefix, domain, transport); } - public void checkAccount(String username, String password, String prefix, String domain) { - saveCreatedAccount(username, password, null, prefix, domain, null); + public void configureLinphoneProxyConfig(LinphoneAccountCreator accountCreator) { + LinphoneCore lc = LinphoneManager.getLc(); + LinphoneProxyConfig proxyConfig = lc.createProxyConfig(); + LinphoneAddress addr; + LinphoneAuthInfo authInfo; + + try { + String identity = proxyConfig.getIdentity(); + identity = identity.replace("?", accountCreator.getUsername()); + addr = LinphoneCoreFactory.instance().createLinphoneAddress(identity); + + addr.setDisplayName(accountCreator.getUsername()); + address = addr; + proxyConfig.edit(); + + + proxyConfig.setIdentity(addr.asString()); + + proxyConfig.done(); + + authInfo = LinphoneCoreFactory.instance().createAuthInfo( + accountCreator.getUsername(), + null, + accountCreator.getPassword(), + accountCreator.getHa1(), + proxyConfig.getRealm(), + proxyConfig.getDomain()); + + + lc.addProxyConfig(proxyConfig); + + lc.addAuthInfo(authInfo); + + lc.setDefaultProxyConfig(proxyConfig); + if (!newAccount) { + displayRegistrationInProgressDialog(); + } + accountCreated = true; + } catch (LinphoneCoreException e) { + Log.e("Canno't configure proxy config ", e); + } } - public void linphoneLogIn(String username, String password, String ha1, String prefix, boolean validate) { - if (validate) { - checkAccount(username, password, prefix, getString(R.string.default_domain)); - } else { - if(accountCreated) { - retryLogin(username, password, prefix, getString(R.string.default_domain), null); - } else { - logIn(username, password, ha1, prefix, getString(R.string.default_domain), null, true); - } - } + public void linphoneLogIn(LinphoneAccountCreator accountCreator) { + LinphoneManager.getLc().getConfig().loadXmlFile(LinphoneManager.getInstance().getmDynamicConfigFile()); + configureLinphoneProxyConfig(accountCreator); } public void genericLogIn(String username, String password, String prefix, String domain, TransportType transport) { if (accountCreated) { retryLogin(username, password, prefix, domain, transport); } else { - logIn(username, password, null, prefix, domain, transport, false); + logIn(username, password, null, prefix, domain, transport); } } @@ -483,56 +515,24 @@ private static AssistantActivity instance; Log.e(e); } - boolean isMainAccountLinphoneDotOrg = domain.equals(getString(R.string.default_domain)); AccountBuilder builder = new AccountBuilder(LinphoneManager.getLc()) - .setUsername(username) - .setDomain(domain) - .setHa1(ha1) - .setPassword(password); + .setUsername(username) + .setDomain(domain) + .setHa1(ha1) + .setPassword(password); - if(prefix != null){ + if (prefix != null) { builder.setPrefix(prefix); } - if (isMainAccountLinphoneDotOrg) { - if (getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) { - builder.setProxy(domain) - .setTransport(TransportType.LinphoneTransportTcp); - } - else { - builder.setProxy(domain) - .setTransport(TransportType.LinphoneTransportTls); - } - - builder.setExpires("604800") - .setAvpfEnabled(true) - .setAvpfRRInterval(3) - .setQualityReportingCollector("sip:voip-metrics@sip.linphone.org") - .setQualityReportingEnabled(true) - .setQualityReportingInterval(180) - .setRealm("sip.linphone.org") - .setNoDefault(false); - - mPrefs.enabledFriendlistSubscription(getResources().getBoolean(R.bool.use_friendlist_subscription)); - LinphoneManager.getInstance().subscribeFriendList(getResources().getBoolean(R.bool.use_friendlist_subscription)); - - mPrefs.setStunServer(getString(R.string.default_stun)); - mPrefs.setIceEnabled(true); - - accountCreator.setPassword(password); - accountCreator.setHa1(ha1); - accountCreator.setUsername(username); - } else { - String forcedProxy = ""; - if (!TextUtils.isEmpty(forcedProxy)) { - builder.setProxy(forcedProxy) - .setOutboundProxyEnabled(true) - .setAvpfRRInterval(5); - } - - if(transport != null) { - builder.setTransport(transport); - } + String forcedProxy = ""; + if (!TextUtils.isEmpty(forcedProxy)) { + builder.setProxy(forcedProxy) + .setOutboundProxyEnabled(true) + .setAvpfRRInterval(5); + } + if (transport != null) { + builder.setTransport(transport); } if (getResources().getBoolean(R.bool.enable_push_id)) { @@ -542,16 +542,16 @@ private static AssistantActivity instance; String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId; builder.setContactParameters(contactInfos); } - } - try { - builder.saveNewAccount(); - if(!newAccount) { - displayRegistrationInProgressDialog(); + try { + builder.saveNewAccount(); + if (!newAccount) { + displayRegistrationInProgressDialog(); + } + accountCreated = true; + } catch (LinphoneCoreException e) { + Log.e(e); } - accountCreated = true; - } catch (LinphoneCoreException e) { - Log.e(e); } } diff --git a/src/android/org/linphone/assistant/CreateAccountActivationFragment.java b/src/android/org/linphone/assistant/CreateAccountActivationFragment.java index 5072fbacd..21d286303 100644 --- a/src/android/org/linphone/assistant/CreateAccountActivationFragment.java +++ b/src/android/org/linphone/assistant/CreateAccountActivationFragment.java @@ -102,7 +102,7 @@ public class CreateAccountActivationFragment extends Fragment implements OnClick if (status.equals(LinphoneAccountCreator.RequestStatus.AccountNotActivated)) { Toast.makeText(getActivity(), getString(R.string.assistant_account_not_validated), Toast.LENGTH_LONG).show(); } else if (status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated)) { - AssistantActivity.instance().saveCreatedAccount(username, password, null, null, getString(R.string.default_domain), null); + AssistantActivity.instance().linphoneLogIn(accountCreator); AssistantActivity.instance().isAccountVerified(username); } else { Toast.makeText(getActivity(), getString(R.string.wizard_server_unavailable), Toast.LENGTH_LONG).show(); diff --git a/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java b/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java index 03a646022..586f35991 100644 --- a/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java +++ b/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java @@ -146,14 +146,14 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin if (status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated)) { checkAccount.setEnabled(true); if (accountCreator.getUsername() != null) { - AssistantActivity.instance().saveCreatedAccount(accountCreator.getUsername(), null , accountCreator.getHa1(), dialcode, getString(R.string.default_domain), null); + AssistantActivity.instance().linphoneLogIn(accountCreator); if(!recoverAccount){ AssistantActivity.instance().isAccountVerified(accountCreator.getUsername()); } else { AssistantActivity.instance().success(); } } else { - AssistantActivity.instance().saveCreatedAccount(accountCreator.getPhoneNumber(), null, accountCreator.getHa1(), dialcode, getString(R.string.default_domain), null); + AssistantActivity.instance().linphoneLogIn(accountCreator); if(!recoverAccount) { AssistantActivity.instance().isAccountVerified(accountCreator.getPhoneNumber()); } else { diff --git a/src/android/org/linphone/assistant/LinphoneLoginFragment.java b/src/android/org/linphone/assistant/LinphoneLoginFragment.java index 563ccb0ea..1a1a03691 100644 --- a/src/android/org/linphone/assistant/LinphoneLoginFragment.java +++ b/src/android/org/linphone/assistant/LinphoneLoginFragment.java @@ -328,10 +328,8 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On } if (status.equals(LinphoneAccountCreator.RequestStatus.AccountExist) || status.equals(LinphoneAccountCreator.RequestStatus.AccountExistWithAlias)) { String phone = accountCreator.getPhoneNumber(); - String dial = null; if (phone != null && phone.length() > 0) - dial = accountCreator.getPrefix(phone); - AssistantActivity.instance().linphoneLogIn(login.getText().toString(), password.getText().toString(), null, dial, getResources().getBoolean(R.bool.assistant_account_validation_mandatory)); + AssistantActivity.instance().linphoneLogIn(accountCreator); } else { LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status), AssistantActivity.instance()); }