Added username/password settings for STUN/TURN server

This commit is contained in:
Sylvain Berfini 2016-08-30 11:44:04 +02:00
parent 5213eccf30
commit 6f05c2a6ce
6 changed files with 119 additions and 42 deletions

View file

@ -206,4 +206,6 @@
<string name="pref_device_ringtone_key">pref_device_ringtone_key</string> <string name="pref_device_ringtone_key">pref_device_ringtone_key</string>
<string name="pref_auto_answer_key">pref_auto_answer_key</string> <string name="pref_auto_answer_key">pref_auto_answer_key</string>
<string name="pref_android_app_settings_key">pref_android_app_settings_key</string> <string name="pref_android_app_settings_key">pref_android_app_settings_key</string>
<string name="pref_turn_username_key">pref_turn_username_key</string>
<string name="pref_turn_passwd_key">pref_turn_passwd_key</string>
</resources> </resources>

View file

@ -290,9 +290,11 @@
<!-- Network settings --> <!-- Network settings -->
<string name="pref_network_title">Network</string> <string name="pref_network_title">Network</string>
<string name="pref_wifi_only">Use WiFi only</string> <string name="pref_wifi_only">Use WiFi only</string>
<string name="pref_stun_server">Stun server</string> <string name="pref_stun_server">STUN server</string>
<string name="pref_ice_enable">Enable ICE</string> <string name="pref_ice_enable">Enable ICE</string>
<string name="pref_turn_enable">Enable TURN</string> <string name="pref_turn_enable">Enable TURN</string>
<string name="pref_turn_username_title">STUN / TURN username (optional)</string>
<string name="pref_turn_passwd_title">STUN / TURN password (optional)</string>
<string name="pref_upnp_enable">Enable UPNP</string> <string name="pref_upnp_enable">Enable UPNP</string>
<string name="pref_transport_use_random_ports">Use random ports</string> <string name="pref_transport_use_random_ports">Use random ports</string>
<string name="pref_sip_port_title">SIP port to use</string> <string name="pref_sip_port_title">SIP port to use</string>

View file

@ -268,6 +268,18 @@
android:title="@string/pref_turn_enable" android:title="@string/pref_turn_enable"
android:key="@string/pref_turn_enable_key" android:key="@string/pref_turn_enable_key"
android:persistent="false"/> android:persistent="false"/>
<EditTextPreference
android:key="@string/pref_turn_username_key"
android:title="@string/pref_turn_username_title"
android:inputType="text|textNoSuggestions"
android:persistent="false"/>
<EditTextPreference
android:key="@string/pref_turn_passwd_key"
android:title="@string/pref_turn_passwd_title"
android:inputType="textPassword"
android:persistent="false"/>
<CheckBoxPreference <CheckBoxPreference
android:title="@string/pref_upnp_enable" android:title="@string/pref_upnp_enable"

View file

@ -909,46 +909,6 @@ public class LinphonePreferences {
public boolean isWifiOnlyEnabled() { public boolean isWifiOnlyEnabled() {
return getConfig().getBool("app", "wifi_only", false); return getConfig().getBool("app", "wifi_only", false);
} }
private LinphoneNatPolicy getOrCreateNatPolicy() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) {
nat = getLc().createNatPolicy();
}
return nat;
}
public String getStunServer() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.getStunServer();
}
public void setStunServer(String stun) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.setStunServer(stun);
if (stun != null && !stun.isEmpty()) {
nat.enableStun(true);
}
getLc().setNatPolicy(nat);
}
public void setIceEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableIce(enabled);
getLc().setNatPolicy(nat);
}
public void setTurnEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableTurn(enabled);
getLc().setNatPolicy(nat);
}
public void setUpnpEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableUpnp(enabled);
getLc().setNatPolicy(nat);
}
public void useRandomPort(boolean enabled) { public void useRandomPort(boolean enabled) {
useRandomPort(enabled, true); useRandomPort(enabled, true);
@ -986,6 +946,47 @@ public class LinphonePreferences {
transports.tls = LINPHONE_CORE_RANDOM_PORT; transports.tls = LINPHONE_CORE_RANDOM_PORT;
getLc().setSignalingTransportPorts(transports); getLc().setSignalingTransportPorts(transports);
} }
private LinphoneNatPolicy getOrCreateNatPolicy() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) {
nat = getLc().createNatPolicy();
}
return nat;
}
public String getStunServer() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.getStunServer();
}
public void setStunServer(String stun) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.setStunServer(stun);
if (stun != null && !stun.isEmpty()) {
nat.enableStun(true);
}
getLc().setNatPolicy(nat);
}
public void setIceEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableIce(enabled);
getLc().setNatPolicy(nat);
}
public void setTurnEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableTurn(enabled);
getLc().setNatPolicy(nat);
}
public void setUpnpEnabled(boolean enabled) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableUpnp(enabled);
getLc().setNatPolicy(nat);
}
public boolean isUpnpEnabled() { public boolean isUpnpEnabled() {
LinphoneNatPolicy nat = getOrCreateNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
@ -1001,6 +1002,34 @@ public class LinphonePreferences {
LinphoneNatPolicy nat = getOrCreateNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.turnEnabled(); return nat.turnEnabled();
} }
public String getTurnUsername() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.getStunServerUsername();
}
public void setTurnUsername(String username) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
LinphoneAuthInfo authInfo = getLc().findAuthInfo(nat.getStunServerUsername(), null, null);
if (authInfo != null) {
authInfo.setUsername(username);
} else {
authInfo = LinphoneCoreFactory.instance().createAuthInfo(username, username, null, null, null, null);
getLc().addAuthInfo(authInfo);
}
nat.setStunServerUsername(username);
}
public void setTurnPassword(String password) {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
LinphoneAuthInfo authInfo = getLc().findAuthInfo(nat.getStunServerUsername(), null, null);
if (authInfo != null) {
authInfo.setPassword(password);
} else {
authInfo = LinphoneCoreFactory.instance().createAuthInfo(nat.getStunServerUsername(), nat.getStunServerUsername(), password, null, null, null);
getLc().addAuthInfo(authInfo);
}
}
public MediaEncryption getMediaEncryption() { public MediaEncryption getMediaEncryption() {
return getLc().getMediaEncryption(); return getLc().getMediaEncryption();

View file

@ -1028,7 +1028,15 @@ public class SettingsFragment extends PreferencesListFragment {
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key)); CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key)); CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key));
ice.setChecked(mPrefs.isIceEnabled()); ice.setChecked(mPrefs.isIceEnabled());
turn.setEnabled(mPrefs.getStunServer() != null);
turn.setChecked(mPrefs.isTurnEnabled()); turn.setChecked(mPrefs.isTurnEnabled());
EditTextPreference turnUsername = (EditTextPreference) findPreference(getString(R.string.pref_turn_username_key));
EditTextPreference turnPassword = (EditTextPreference) findPreference(getString(R.string.pref_turn_passwd_key));
turnUsername.setEnabled(mPrefs.isTurnEnabled());
turnUsername.setSummary(mPrefs.getTurnUsername());
turnUsername.setText(mPrefs.getTurnUsername());
turnPassword.setEnabled(mPrefs.isTurnEnabled());
CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key)); CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key));
randomPort.setChecked(mPrefs.isUsingRandomPort()); randomPort.setChecked(mPrefs.isUsingRandomPort());
@ -1061,6 +1069,9 @@ public class SettingsFragment extends PreferencesListFragment {
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
mPrefs.setStunServer(newValue.toString()); mPrefs.setStunServer(newValue.toString());
preference.setSummary(newValue.toString()); preference.setSummary(newValue.toString());
CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key));
turn.setEnabled(mPrefs.getStunServer() != null);
return true; return true;
} }
}); });
@ -1077,6 +1088,27 @@ public class SettingsFragment extends PreferencesListFragment {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
mPrefs.setTurnEnabled((Boolean) newValue); mPrefs.setTurnEnabled((Boolean) newValue);
EditTextPreference turnUsername = (EditTextPreference) findPreference(getString(R.string.pref_turn_username_key));
EditTextPreference turnPassword = (EditTextPreference) findPreference(getString(R.string.pref_turn_passwd_key));
turnUsername.setEnabled(mPrefs.isTurnEnabled());
turnPassword.setEnabled(mPrefs.isTurnEnabled());
return true;
}
});
findPreference(getString(R.string.pref_turn_username_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
mPrefs.setTurnUsername((String) newValue);
preference.setSummary(mPrefs.getTurnUsername());
return true;
}
});
findPreference(getString(R.string.pref_turn_passwd_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
mPrefs.setTurnPassword((String) newValue);
return true; return true;
} }
}); });

@ -1 +1 @@
Subproject commit dd2749d56f51107fd57e9b5db1125c8d3b2f6e77 Subproject commit 9c3540b804f90d5f1a149eb62bd5fa1df04fca58