Add dynamic loading of config file for proxy config
This commit is contained in:
parent
718d4c20e6
commit
928247b158
6 changed files with 112 additions and 74 deletions
33
res/raw/assistant_create.rc
Normal file
33
res/raw/assistant_create.rc
Normal file
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<config xmlns="http://www.linphone.org/xsds/lpconfig.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.linphone.org/xsds/lpconfig.xsd lpconfig.xsd">
|
||||
|
||||
<section name="proxy_default_values">
|
||||
<entry name="avpf" overwrite="true">1</entry>
|
||||
<entry name="dial_escape_plus" overwrite="true">0</entry>
|
||||
<entry name="publish" overwrite="true">0</entry>
|
||||
<entry name="quality_reporting_collector" overwrite="true">sip:voip-metrics@sip.linphone.org;transport=tls</entry>
|
||||
<entry name="quality_reporting_enabled" overwrite="true">1</entry>
|
||||
<entry name="quality_reporting_interval" overwrite="true">180</entry>
|
||||
<entry name="reg_expires" overwrite="true">31536000</entry>
|
||||
<entry name="reg_identity" overwrite="true">sip:?@sip.linphone.org</entry>
|
||||
<entry name="reg_proxy" overwrite="true"><sip:sip.linphone.org;transport=tls></entry>
|
||||
<entry name="reg_sendregister" overwrite="true">1</entry>
|
||||
<entry name="refkey" overwrite="true">push_notification</entry>
|
||||
<entry name="realm" overwrite="true">sip.linphone.org</entry>
|
||||
</section>
|
||||
|
||||
<section name="sip">
|
||||
<entry name="rls_uri" overwrite="true">sips:rls@sip.linphone.org</entry>
|
||||
</section>
|
||||
|
||||
<section name="assistant">
|
||||
<entry name="domain" overwrite="true">sip.linphone.org</entry>
|
||||
<entry name="password_max_length" overwrite="true">-1</entry>
|
||||
<entry name="password_min_length" overwrite="true">1</entry>
|
||||
<entry name="username_length" overwrite="true">-1</entry>
|
||||
<entry name="username_max_length" overwrite="true">64</entry>
|
||||
<entry name="username_min_length" overwrite="true">1</entry>
|
||||
<entry name="username_regex" overwrite="true">^[a-z0-9+_.\-]*$</entry>
|
||||
<entry name="xmlrpc_url" overwrite="true">https://sip3.linphone.org:444/wizard.php</entry>
|
||||
</section>
|
||||
</config>
|
|
@ -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 {
|
||||
|
||||
|
|
|
@ -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,57 +515,25 @@ 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);
|
||||
|
||||
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) {
|
||||
if (transport != null) {
|
||||
builder.setTransport(transport);
|
||||
}
|
||||
}
|
||||
|
||||
if (getResources().getBoolean(R.bool.enable_push_id)) {
|
||||
String regId = mPrefs.getPushNotificationRegistrationID();
|
||||
|
@ -542,11 +542,10 @@ private static AssistantActivity instance;
|
|||
String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId;
|
||||
builder.setContactParameters(contactInfos);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
builder.saveNewAccount();
|
||||
if(!newAccount) {
|
||||
if (!newAccount) {
|
||||
displayRegistrationInProgressDialog();
|
||||
}
|
||||
accountCreated = true;
|
||||
|
@ -554,6 +553,7 @@ private static AssistantActivity instance;
|
|||
Log.e(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void displayRegistrationInProgressDialog() {
|
||||
if(LinphoneManager.getLc().isNetworkReachable()) {
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue