diff --git a/res/xml/account_preferences.xml b/res/xml/account_preferences.xml
index 042e9241f..187e482fa 100644
--- a/res/xml/account_preferences.xml
+++ b/res/xml/account_preferences.xml
@@ -28,6 +28,10 @@
android:title="@string/pref_advanced"
android:key="@string/pref_advanced_key">
+
+
-
-
entries = new ArrayList();
+ List values = new ArrayList();
+ entries.add(getString(R.string.pref_transport_udp));
+ values.add(getString(R.string.pref_transport_udp_key));
+ entries.add(getString(R.string.pref_transport_tcp));
+ values.add(getString(R.string.pref_transport_tcp_key));
+
+ if (!getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
+ entries.add(getString(R.string.pref_transport_tls));
+ values.add(getString(R.string.pref_transport_tls_key));
+ }
+ setListPreferenceValues(pref, entries, values);
+
+ pref.setSummary(mPrefs.getAccountTransportString(n));
+ pref.setDefaultValue(mPrefs.getAccountTransportKey(n));
+ }
+
+ private static void setListPreferenceValues(ListPreference pref, List entries, List values) {
+ CharSequence[] contents = new CharSequence[entries.size()];
+ entries.toArray(contents);
+ pref.setEntries(contents);
+ contents = new CharSequence[values.size()];
+ values.toArray(contents);
+ pref.setEntryValues(contents);
+ }
}
diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java
index 98a53a9c0..0c1e0af9e 100644
--- a/src/org/linphone/LinphonePreferences.java
+++ b/src/org/linphone/LinphonePreferences.java
@@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import org.linphone.core.LinphoneAddress;
import org.linphone.core.LinphoneAuthInfo;
import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneAddress.TransportType;
import org.linphone.core.LinphoneCore.FirewallPolicy;
import org.linphone.core.LinphoneCore.MediaEncryption;
import org.linphone.core.LinphoneCore.RegistrationState;
@@ -154,6 +155,7 @@ public class LinphonePreferences {
private boolean tempOutboundProxy;
private String tempContactsParams;
private String tempExpire;
+ private TransportType tempTransport;
/**
* Creates a new account using values previously set using setNew* functions
@@ -163,9 +165,15 @@ public class LinphonePreferences {
String identity = "sip:" + tempUsername + "@" + tempDomain;
String proxy = "sip:";
proxy += tempProxy == null ? tempDomain : tempProxy;
+ LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy);
String route = tempOutboundProxy ? tempProxy : null;
- LinphoneProxyConfig prxCfg = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, route, true);
+ if (tempTransport == null) {
+ tempTransport = TransportType.LinphoneTransportUdp;
+ }
+ proxyAddr.setTransport(tempTransport);
+
+ LinphoneProxyConfig prxCfg = LinphoneCoreFactory.instance().createProxyConfig(identity, proxyAddr.asStringUriOnly(), route, true);
if (tempContactsParams != null)
prxCfg.setContactUriParameters(tempContactsParams);
if (tempExpire != null) {
@@ -190,6 +198,80 @@ public class LinphonePreferences {
tempOutboundProxy = false;
tempContactsParams = null;
tempExpire = null;
+ tempTransport = null;
+ }
+
+ public void setNewAccountTransport(TransportType transport) {
+ tempTransport = transport;
+ }
+
+ public void setAccountTransport(int n, String transport) {
+ LinphoneProxyConfig proxyConfig = getProxyConfig(n);
+
+ if (proxyConfig != null && transport != null) {
+ LinphoneAddress proxyAddr;
+ try {
+ proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy());
+
+ if (transport.equals(getString(R.string.pref_transport_udp_key))) {
+ proxyAddr.setTransport(TransportType.LinphoneTransportUdp);
+ } else if (transport.equals(getString(R.string.pref_transport_tcp_key))) {
+ proxyAddr.setTransport(TransportType.LinphoneTransportTcp);
+ } else if (transport.equals(getString(R.string.pref_transport_tls_key))) {
+ proxyAddr.setTransport(TransportType.LinphoneTransportTls);
+ }
+
+ LinphoneProxyConfig prxCfg = getProxyConfig(n);
+ prxCfg.setProxy(proxyAddr.asStringUriOnly());
+ prxCfg.done();
+
+ if (isAccountOutboundProxySet(n)) {
+ setAccountOutboundProxyEnabled(n, true);
+ }
+ } catch (LinphoneCoreException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public TransportType getAccountTransport(int n) {
+ TransportType transport = null;
+ LinphoneProxyConfig proxyConfig = getProxyConfig(n);
+
+ if (proxyConfig != null) {
+ LinphoneAddress proxyAddr;
+ try {
+ proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy());
+ transport = proxyAddr.getTransport();
+ } catch (LinphoneCoreException e) {
+ e.printStackTrace();
+ }
+ }
+
+ return transport;
+ }
+
+ public String getAccountTransportKey(int n) {
+ TransportType transport = getAccountTransport(n);
+ String key = getString(R.string.pref_transport_udp_key);
+
+ if (transport != null && transport == TransportType.LinphoneTransportTcp)
+ key = getString(R.string.pref_transport_tcp_key);
+ else if (transport != null && transport == TransportType.LinphoneTransportTls)
+ key = getString(R.string.pref_transport_tls_key);
+
+ return key;
+ }
+
+ public String getAccountTransportString(int n) {
+ TransportType transport = getAccountTransport(n);
+
+ if (transport != null && transport == TransportType.LinphoneTransportTcp)
+ return getString(R.string.pref_transport_tcp);
+ else if (transport != null && transport == TransportType.LinphoneTransportTls)
+ return getString(R.string.pref_transport_tls);
+
+ return getString(R.string.pref_transport_udp);
}
public void setNewAccountUsername(String username) {
@@ -278,14 +360,21 @@ public class LinphonePreferences {
if (proxy == null || proxy.length() <= 0) {
proxy = getAccountDomain(n);
}
+
if (!proxy.contains("sip:")) {
proxy = "sip:" + proxy;
}
try {
+ LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy);
+ if (!proxy.contains("transport=")) {
+ proxyAddr.setTransport(getAccountTransport(n));
+ }
+
LinphoneProxyConfig prxCfg = getProxyConfig(n);
- prxCfg.setProxy(proxy);
+ prxCfg.setProxy(proxyAddr.asStringUriOnly());
prxCfg.done();
+
if (isAccountOutboundProxySet(n)) {
setAccountOutboundProxyEnabled(n, true);
}
@@ -296,9 +385,6 @@ public class LinphonePreferences {
public String getAccountProxy(int n) {
String proxy = getProxyConfig(n).getProxy();
- if (proxy != null && proxy.startsWith("sip:")) {
- proxy = proxy.substring(4);
- }
return proxy;
}
@@ -311,9 +397,6 @@ public class LinphonePreferences {
LinphoneProxyConfig prxCfg = getProxyConfig(n);
if (enabled) {
String route = prxCfg.getProxy();
- if (!route.contains("sip:")) {
- route = "sip:" + route;
- }
prxCfg.setRoute(route);
} else {
prxCfg.setRoute(null);
@@ -568,14 +651,6 @@ public class LinphonePreferences {
}
}
- public boolean isUpnpEnabled() {
- return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
- }
-
- public boolean isIceEnabled() {
- return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
- }
-
public void useRandomPort(boolean enabled) {
useRandomPort(enabled, true);
}
@@ -586,92 +661,39 @@ public class LinphonePreferences {
if (enabled) {
setSipPort(LINPHONE_CORE_RANDOM_PORT);
} else {
- if (getTransport().equals(getString(R.string.pref_transport_tls)))
- setSipPort(5061);
- else
- setSipPort(5060);
+ setSipPort(5060);
}
}
}
-
+
public boolean isUsingRandomPort() {
return getConfig().getBool("app", "random_port", true);
}
-
+
public String getSipPort() {
Transports transports = getLc().getSignalingTransportPorts();
int port;
if (transports.udp > 0)
port = transports.udp;
- else if (transports.tcp > 0)
- port = transports.tcp;
else
- port = transports.tls;
+ port = transports.tcp;
return String.valueOf(port);
}
-
+
public void setSipPort(int port) {
Transports transports = getLc().getSignalingTransportPorts();
- if (transports.udp > 0)
- transports.udp = port;
- else if (transports.tcp > 0)
- transports.tcp = port;
- else
- transports.tls = port;
+ transports.udp = port;
+ transports.tcp = port;
+ transports.tls = LINPHONE_CORE_RANDOM_PORT;
getLc().setSignalingTransportPorts(transports);
}
-
- public String getTransportKey() {
- Transports transports = getLc().getSignalingTransportPorts();
- String transport = getString(R.string.pref_transport_udp_key);
- if (transports.tcp > 0)
- transport = getString(R.string.pref_transport_tcp_key);
- else if (transports.tls > 0)
- transport = getString(R.string.pref_transport_tls_key);
- return transport;
+
+ public boolean isUpnpEnabled() {
+ return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
}
- public String getTransport() {
- Transports transports = getLc().getSignalingTransportPorts();
- String transport = getString(R.string.pref_transport_udp);
- if (transports.tcp > 0)
- transport = getString(R.string.pref_transport_tcp);
- else if (transports.tls > 0)
- transport = getString(R.string.pref_transport_tls);
- return transport;
- }
-
- public void setTransport(String transportKey) {
- if (transportKey == null)
- return;
-
- Transports transports = getLc().getSignalingTransportPorts();
- if (transports.udp > 0) {
- if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) {
- transports.tcp = transports.udp;
- transports.udp = transports.tls;
- } else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) {
- transports.tls = transports.udp;
- transports.udp = transports.tcp;
- }
- } else if (transports.tcp > 0) {
- if (transportKey.equals(getString(R.string.pref_transport_udp_key))) {
- transports.udp = transports.tcp;
- transports.tcp = transports.tls;
- } else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) {
- transports.tls = transports.tcp;
- transports.tcp = transports.udp;
- }
- } else if (transports.tls > 0) {
- if (transportKey.equals(getString(R.string.pref_transport_udp_key))) {
- transports.udp = transports.tls;
- transports.tls = transports.tcp;
- } else if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) {
- transports.tcp = transports.tls;
- transports.tls = transports.udp;
- }
- }
- getLc().setSignalingTransportPorts(transports);
+ public boolean isIceEnabled() {
+ return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
}
public MediaEncryption getMediaEncryption() {
diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java
index 554882320..fd34df775 100644
--- a/src/org/linphone/SettingsFragment.java
+++ b/src/org/linphone/SettingsFragment.java
@@ -377,30 +377,6 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
key = getString(R.string.pref_media_encryption_key_zrtp);
pref.setDefaultValue(key);
}
-
- private void initializeTransportPreferences(ListPreference pref) {
- List entries = new ArrayList();
- List values = new ArrayList();
- entries.add(getString(R.string.pref_transport_udp));
- values.add(getString(R.string.pref_transport_udp_key));
- entries.add(getString(R.string.pref_transport_tcp));
- values.add(getString(R.string.pref_transport_tcp_key));
-
- if (!getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
- entries.add(getString(R.string.pref_transport_tls));
- values.add(getString(R.string.pref_transport_tls_key));
- }
- setListPreferenceValues(pref, entries, values);
-
- String value = mPrefs.getTransport();
- pref.setSummary(value);
- String key = getString(R.string.pref_transport_udp_key);
- if (value.equals(getString(R.string.pref_transport_tcp)))
- key = getString(R.string.pref_transport_tcp_key);
- else if (value.equals(getString(R.string.pref_transport_tls)))
- key = getString(R.string.pref_transport_tls_key);
- pref.setDefaultValue(key);
- }
private void initializePreferredVideoSizePreferences(ListPreference pref) {
List entries = new ArrayList();
@@ -631,8 +607,7 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
private void initNetworkSettings() {
initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key)));
- initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key)));
-
+
((CheckBoxPreference) findPreference(getString(R.string.pref_wifi_only_key))).setChecked(mPrefs.isWifiOnlyEnabled());
// Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled
@@ -731,15 +706,6 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib
}
});
- findPreference(getString(R.string.pref_transport_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- mPrefs.setTransport(newValue.toString());
- preference.setSummary(mPrefs.getTransport());
- return true;
- }
- });
-
findPreference(getString(R.string.pref_media_encryption_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
diff --git a/src/org/linphone/setup/SetupActivity.java b/src/org/linphone/setup/SetupActivity.java
index 92649780a..9fe6c2ee3 100644
--- a/src/org/linphone/setup/SetupActivity.java
+++ b/src/org/linphone/setup/SetupActivity.java
@@ -21,6 +21,7 @@ import org.linphone.LinphoneManager;
import org.linphone.LinphonePreferences;
import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
import org.linphone.R;
+import org.linphone.core.LinphoneAddress.TransportType;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCoreException;
@@ -291,11 +292,11 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
if (isMainAccountLinphoneDotOrg && useLinphoneDotOrgCustomPorts) {
if (getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
mPrefs.setNewAccountProxy(domain + ":5228");
- mPrefs.setTransport(getString(R.string.pref_transport_tcp_key));
+ mPrefs.setNewAccountTransport(TransportType.LinphoneTransportTcp);
}
else {
mPrefs.setNewAccountProxy(domain + ":5223");
- mPrefs.setTransport(getString(R.string.pref_transport_tls_key));
+ mPrefs.setNewAccountTransport(TransportType.LinphoneTransportTls);
}
mPrefs.setNewAccountExpires("604800");
diff --git a/submodules/linphone b/submodules/linphone
index 3e8765620..7bfd12788 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit 3e876562027c51f61e3fe32f37bc66075e0b7854
+Subproject commit 7bfd12788a1753f17a2a054152addfc8d465ebc9