diff --git a/console/commands.c b/console/commands.c
index 776d2b260..472531795 100644
--- a/console/commands.c
+++ b/console/commands.c
@@ -850,6 +850,16 @@ lpc_cmd_firewall(LinphoneCore *lc, char *args)
{
linphone_core_set_firewall_policy(lc,LinphonePolicyNoFirewall);
}
+ else if (strcmp(args,"ice")==0)
+ {
+ setting = linphone_core_get_stun_server(lc);
+ if ( ! setting )
+ {
+ linphonec_out("No stun server address is defined, use 'stun
' first\n");
+ return 1;
+ }
+ linphone_core_set_firewall_policy(lc,LinphonePolicyUseIce);
+ }
else if (strcmp(args,"stun")==0)
{
setting = linphone_core_get_stun_server(lc);
@@ -883,6 +893,9 @@ lpc_cmd_firewall(LinphoneCore *lc, char *args)
case LinphonePolicyUseNatAddress:
linphonec_out("Using supplied nat address %s.\n", setting ? setting : linphone_core_get_nat_address(lc));
break;
+ case LinphonePolicyUseIce:
+ linphonec_out("Using ice with stun server %s to discover firewall address\n", setting ? setting : linphone_core_get_stun_server(lc));
+ break;
}
return 1;
}
diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h
index 81044fff5..10f6108c9 100644
--- a/coreapi/linphonecore.h
+++ b/coreapi/linphonecore.h
@@ -740,7 +740,8 @@ typedef struct _LCCallbackObj
typedef enum _LinphoneFirewallPolicy{
LinphonePolicyNoFirewall,
LinphonePolicyUseNatAddress,
- LinphonePolicyUseStun
+ LinphonePolicyUseStun,
+ LinphonePolicyUseIce
} LinphoneFirewallPolicy;
typedef enum _LinphoneWaitingState{
diff --git a/gtk/parameters.ui b/gtk/parameters.ui
index b8f4adbdc..9fc8538c0 100644
--- a/gtk/parameters.ui
+++ b/gtk/parameters.ui
@@ -1,6 +1,7 @@
+
@@ -244,10 +247,10 @@
Send DTMFs as SIP info
+ False
True
True
False
- False
True
@@ -260,11 +263,11 @@
Use IPv6 instead of IPv4
+ False
True
True
False
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
True
@@ -335,6 +338,8 @@
True
False
False
+ True
+ True
adjustment7
@@ -379,9 +384,9 @@
edit
+ False
True
True
- False
@@ -422,6 +427,10 @@
True
True
•
+ False
+ False
+ True
+ True
adjustment_audio_port
True
@@ -438,6 +447,10 @@
True
True
•
+ False
+ False
+ True
+ True
adjustment_video_port
True
@@ -483,10 +496,10 @@
Direct connection to the Internet
+ False
True
True
False
- False
True
True
@@ -504,10 +517,10 @@
Behind NAT / Firewall (specify gateway IP below)
+ False
True
True
False
- False
True
True
no_nat
@@ -545,6 +558,8 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
False
False
+ True
+ True
@@ -568,20 +583,51 @@
-
+
+ Behind NAT / Firewall (use STUN to resolve)
+ False
+ True
+ True
+ False
+ True
+ no_nat
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ Behind NAT / Firewall (use ICE)
+ False
+ True
+ True
+ False
+ True
+ no_nat
+
+
+
+ True
+ True
+ 3
+
+
+
+
True
False
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-
- Behind NAT / Firewall (use STUN to resolve)
+
True
- True
- False
- False
- True
- True
- no_nat
-
+ False
+ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ Stun server:
+ right
True
@@ -590,39 +636,17 @@
-
+
True
- False
+ True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-
-
- True
- False
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- Stun server:
- right
-
-
- True
- True
- 0
-
-
-
-
- True
- True
- GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
- False
-
-
-
- True
- True
- 1
-
-
+ ●
+ True
+ False
+ False
+ True
+ True
+
True
@@ -632,9 +656,9 @@
- False
- False
- 2
+ True
+ True
+ 4
@@ -719,6 +743,9 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
6
2
+
+
+
True
@@ -740,11 +767,11 @@
gtk-media-play
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
True
@@ -783,6 +810,8 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
False
False
+ True
+ True
@@ -915,10 +944,10 @@
Enable echo cancellation
+ False
True
True
False
- False
True
@@ -929,9 +958,6 @@
6
-
-
-
@@ -1134,6 +1160,8 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
False
False
+ True
+ True
@@ -1172,6 +1200,8 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
False
False
+ True
+ True
@@ -1189,6 +1219,8 @@
False
False
False
+ True
+ True
1
@@ -1245,9 +1277,6 @@
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
-
-
-
@@ -1264,10 +1293,10 @@
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ False
True
True
True
- False
@@ -1311,11 +1340,11 @@
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1359,11 +1388,11 @@
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1407,11 +1436,11 @@
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1455,9 +1484,9 @@
+ False
True
True
- False
@@ -1544,11 +1573,11 @@ virtual network !
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1713,9 +1742,6 @@ virtual network !
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
True
-
-
-
@@ -1733,11 +1759,11 @@ virtual network !
gtk-go-up
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
True
@@ -1750,11 +1776,11 @@ virtual network !
gtk-go-down
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
True
@@ -1766,11 +1792,11 @@ virtual network !
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1814,11 +1840,11 @@ virtual network !
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
@@ -1922,6 +1948,8 @@ virtual network !
0 stands for "unlimited"
False
False
+ True
+ True
adjustment5
@@ -1942,6 +1970,8 @@ virtual network !
0 stands for "unlimited"
False
False
+ True
+ True
adjustment6
@@ -1977,10 +2007,10 @@ virtual network !
Enable adaptive rate control
+ False
True
True
False
- False
0
True
@@ -2132,10 +2162,10 @@ virtual network !
Show advanced settings
+ False
True
True
False
- False
True
@@ -2212,11 +2242,11 @@ virtual network !
end
+ False
True
True
True
GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
- False
diff --git a/gtk/propertybox.c b/gtk/propertybox.c
index 809207a2a..6870e2786 100644
--- a/gtk/propertybox.c
+++ b/gtk/propertybox.c
@@ -171,6 +171,11 @@ void linphone_gtk_use_stun_toggled(GtkWidget *w){
linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseStun);
}
+void linphone_gtk_use_ice_toggled(GtkWidget *w){
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+ linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseIce);
+}
+
void linphone_gtk_mtu_changed(GtkWidget *w){
if (GTK_WIDGET_SENSITIVE(w))
linphone_core_set_mtu(linphone_gtk_get_core(),gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)));
@@ -956,6 +961,9 @@ void linphone_gtk_show_parameters(void){
case LinphonePolicyUseStun:
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"use_stun")),TRUE);
break;
+ case LinphonePolicyUseIce:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"use_ice")),TRUE);
+ break;
}
mtu=linphone_core_get_mtu(lc);
if (mtu<=0){