Fix for nat policy settings

This commit is contained in:
Sylvain Berfini 2016-07-25 15:01:53 +02:00
parent f2c7048a0b
commit 30aab3cad8
6 changed files with 54 additions and 50 deletions

View file

@ -97,6 +97,7 @@
<string name="pref_codecs_key">pref_codecs_key</string> <string name="pref_codecs_key">pref_codecs_key</string>
<string name="pref_stun_server_key">pref_stun_server_key</string> <string name="pref_stun_server_key">pref_stun_server_key</string>
<string name="pref_ice_enable_key">pref_ice_enable_key</string> <string name="pref_ice_enable_key">pref_ice_enable_key</string>
<string name="pref_turn_enable_key">pref_turn_enable_key</string>
<string name="pref_video_codec_vp8_key">pref_video_codec_vp8_key</string> <string name="pref_video_codec_vp8_key">pref_video_codec_vp8_key</string>
<string name="pref_media_encryption_key">pref_media_encryption_key</string> <string name="pref_media_encryption_key">pref_media_encryption_key</string>
<string name="pref_media_encryption_key_none">none</string> <string name="pref_media_encryption_key_none">none</string>

View file

@ -287,6 +287,7 @@
<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_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

@ -259,6 +259,11 @@
android:key="@string/pref_ice_enable_key" android:key="@string/pref_ice_enable_key"
android:persistent="false"/> android:persistent="false"/>
<CheckBoxPreference
android:title="@string/pref_turn_enable"
android:key="@string/pref_turn_enable_key"
android:persistent="false"/>
<CheckBoxPreference <CheckBoxPreference
android:title="@string/pref_upnp_enable" android:title="@string/pref_upnp_enable"
android:key="@string/pref_upnp_enable_key" android:key="@string/pref_upnp_enable_key"

View file

@ -425,10 +425,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
isAnimationDisabled = !LinphonePreferences.instance().areAnimationsEnabled(); isAnimationDisabled = !LinphonePreferences.instance().areAnimationsEnabled();
} }
public boolean isAnimationDisabled() {
return isAnimationDisabled;
}
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) { private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
FragmentManager fm = getFragmentManager(); FragmentManager fm = getFragmentManager();

View file

@ -909,47 +909,45 @@ public class LinphonePreferences {
public boolean isWifiOnlyEnabled() { public boolean isWifiOnlyEnabled() {
return getConfig().getBool("app", "wifi_only", false); return getConfig().getBool("app", "wifi_only", false);
} }
public String getStunServer() { private LinphoneNatPolicy getOrCreateNatPolicy() {
LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) return null;
return nat.getStunServer();
}
public void setStunServer(String stun) {
LinphoneNatPolicy nat = getLc().getNatPolicy(); LinphoneNatPolicy nat = getLc().getNatPolicy();
if (nat == null) { if (nat == null) {
nat = getLc().createNatPolicy(); nat = getLc().createNatPolicy();
} }
nat.setStunServer(stun); return nat;
} }
public void setIceEnabled(boolean enabled) { public String getStunServer() {
LinphoneNatPolicy nat = getLc().createNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.getStunServer();
if (enabled) { }
nat.enableIce(true);
} else { public void setStunServer(String stun) {
String stun = getStunServer(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
if (stun != null && stun.length() > 0) { nat.setStunServer(stun);
nat.enableStun(true); if (stun != null && !stun.isEmpty()) {
} nat.enableStun(true);
} }
getLc().setNatPolicy(nat); 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) { public void setUpnpEnabled(boolean enabled) {
LinphoneNatPolicy nat = getLc().getNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
nat.enableUpnp(enabled);
if (enabled) { getLc().setNatPolicy(nat);
nat.enableUpnp(true);
}
else {
String stun = getStunServer();
if (stun != null && stun.length() > 0) {
nat.enableStun(true);
}
}
} }
public void useRandomPort(boolean enabled) { public void useRandomPort(boolean enabled) {
@ -990,17 +988,20 @@ public class LinphonePreferences {
} }
public boolean isUpnpEnabled() { public boolean isUpnpEnabled() {
LinphoneNatPolicy nat = getLc().getNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
if (nat == null) return false;
return nat.upnpEnabled(); return nat.upnpEnabled();
} }
public boolean isIceEnabled() { public boolean isIceEnabled() {
LinphoneNatPolicy nat = getLc().getNatPolicy(); LinphoneNatPolicy nat = getOrCreateNatPolicy();
if (nat == null) return false;
return nat.iceEnabled(); return nat.iceEnabled();
} }
public boolean isTurnEnabled() {
LinphoneNatPolicy nat = getOrCreateNatPolicy();
return nat.turnEnabled();
}
public MediaEncryption getMediaEncryption() { public MediaEncryption getMediaEncryption() {
return getLc().getMediaEncryption(); return getLc().getMediaEncryption();
} }

View file

@ -949,16 +949,10 @@ public class SettingsFragment extends PreferencesListFragment {
// Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled // Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled
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 upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key)); CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
ice.setChecked(mPrefs.isIceEnabled()); ice.setChecked(mPrefs.isIceEnabled());
if (mPrefs.isIceEnabled()) { turn.setChecked(mPrefs.isTurnEnabled());
upnp.setEnabled(false);
} else {
upnp.setChecked(mPrefs.isUpnpEnabled());
if (mPrefs.isUpnpEnabled()) {
ice.setEnabled(false);
}
}
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());
@ -1000,20 +994,26 @@ public class SettingsFragment extends PreferencesListFragment {
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key)); CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
boolean value = (Boolean) newValue; boolean value = (Boolean) newValue;
upnp.setChecked(false);
upnp.setEnabled(!value);
mPrefs.setIceEnabled((Boolean) newValue); mPrefs.setIceEnabled((Boolean) newValue);
return true; return true;
} }
}); });
findPreference(getString(R.string.pref_turn_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
boolean value = (Boolean) newValue;
mPrefs.setTurnEnabled((Boolean) newValue);
return true;
}
});
findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override @Override
public boolean onPreferenceChange(Preference preference, Object newValue) { public boolean onPreferenceChange(Preference preference, Object newValue) {
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key)); CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
boolean value = (Boolean) newValue; boolean value = (Boolean) newValue;
ice.setChecked(false);
ice.setEnabled(!value);
mPrefs.setUpnpEnabled(value); mPrefs.setUpnpEnabled(value);
return true; return true;
} }