}
else if (strcmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(linphone_gtk_get_widget(pb, "proto_combo"))), "SIP (UDP)") == 0) {
tr.udp_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w));
- tr.tcp_port = 0;
+ tr.tcp_port = 0;
tr.tls_port = 0;
}
else if (strcmp(gtk_combo_box_get_active_text(GTK_COMBO_BOX(linphone_gtk_get_widget(pb, "proto_combo"))), "SIP (TLS)") == 0){
tr.udp_port = 0;
- tr.tcp_port = 0;
+ tr.tcp_port = 0;
tr.tls_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w));
}
linphone_core_set_sip_transports(lc,&tr);
}
+void linphone_gtk_set_propety_entry(GtkWidget *w, gboolean stunServer, gboolean ip){
+ GtkWidget *stun_entry=linphone_gtk_get_widget(gtk_widget_get_toplevel(w),"stun_server");
+ GtkWidget *ip_entry=linphone_gtk_get_widget(gtk_widget_get_toplevel(w),"nat_address");
+ gtk_widget_set_sensitive(stun_entry,stunServer);
+ gtk_widget_set_sensitive(ip_entry,ip);
+}
+
void linphone_gtk_stun_server_changed(GtkWidget *w){
const gchar *addr=gtk_entry_get_text(GTK_ENTRY(w));
linphone_core_set_stun_server(linphone_gtk_get_core(),addr);
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)));
}
-void linphone_gtk_audio_port_changed(GtkWidget *w){
- linphone_core_set_audio_port(linphone_gtk_get_core(),
- (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)));
+void linphone_gtk_min_audio_port_changed(GtkWidget *w){
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ GtkSpinButton *min_button = GTK_SPIN_BUTTON(w);
+ GtkSpinButton *max_button = GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_max_rtp_port"));
+ gboolean fixed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_audio_port")));
+
+ if (fixed) {
+ linphone_core_set_audio_port(linphone_gtk_get_core(), (gint) gtk_spin_button_get_value(min_button));
+ gtk_spin_button_set_value(max_button, gtk_spin_button_get_value(min_button));
+ } else {
+ gint min_port = gtk_spin_button_get_value(min_button);
+ gint max_port = gtk_spin_button_get_value(max_button);
+ if (min_port > max_port) {
+ gtk_spin_button_set_value(max_button, min_port);
+ max_port = min_port;
+ }
+ linphone_core_set_audio_port_range(linphone_gtk_get_core(), min_port, max_port);
+ }
+}
+
+void linphone_gtk_max_audio_port_changed(GtkWidget *w){
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ GtkSpinButton *min_button = GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port"));
+ GtkSpinButton *max_button = GTK_SPIN_BUTTON(w);
+ gint min_port = gtk_spin_button_get_value(min_button);
+ gint max_port = gtk_spin_button_get_value(max_button);
+ if (max_port < min_port) {
+ gtk_spin_button_set_value(min_button, max_port);
+ min_port = max_port;
+ }
+ linphone_core_set_audio_port_range(linphone_gtk_get_core(), min_port, max_port);
+}
+
+void linphone_gtk_min_video_port_changed(GtkWidget *w){
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ GtkSpinButton *min_button = GTK_SPIN_BUTTON(w);
+ GtkSpinButton *max_button = GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_max_rtp_port"));
+ gboolean fixed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_video_port")));
+
+ if (fixed) {
+ linphone_core_set_video_port(linphone_gtk_get_core(), (gint) gtk_spin_button_get_value(min_button));
+ gtk_spin_button_set_value(max_button, gtk_spin_button_get_value(min_button));
+ } else {
+ gint min_port = gtk_spin_button_get_value(min_button);
+ gint max_port = gtk_spin_button_get_value(max_button);
+ if (min_port > max_port) {
+ gtk_spin_button_set_value(max_button, min_port);
+ max_port = min_port;
+ }
+ linphone_core_set_video_port_range(linphone_gtk_get_core(), min_port, max_port);
+ }
}
-void linphone_gtk_video_port_changed(GtkWidget *w){
- linphone_core_set_video_port(linphone_gtk_get_core(),
- (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)));
+void linphone_gtk_max_video_port_changed(GtkWidget *w){
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ GtkSpinButton *min_button = GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_min_rtp_port"));
+ GtkSpinButton *max_button = GTK_SPIN_BUTTON(w);
+ gint min_port = gtk_spin_button_get_value(min_button);
+ gint max_port = gtk_spin_button_get_value(max_button);
+ if (max_port < min_port) {
+ gtk_spin_button_set_value(min_button, max_port);
+ min_port = max_port;
+ }
+ linphone_core_set_video_port_range(linphone_gtk_get_core(), min_port, max_port);
}
void linphone_gtk_no_firewall_toggled(GtkWidget *w){
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+ linphone_gtk_set_propety_entry(w,FALSE,FALSE);
linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyNoFirewall);
+ }
}
void linphone_gtk_use_nat_address_toggled(GtkWidget *w){
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+ linphone_gtk_set_propety_entry(w,FALSE,TRUE);
linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseNatAddress);
+ }
}
void linphone_gtk_use_stun_toggled(GtkWidget *w){
- if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)))
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+ linphone_gtk_set_propety_entry(w,TRUE,FALSE);
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_gtk_set_propety_entry(w,TRUE,FALSE);
+ linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseIce);
+ }
+}
+
+void linphone_gtk_use_upnp_toggled(GtkWidget *w){
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
+ linphone_gtk_set_propety_entry(w,FALSE,FALSE);
+ linphone_core_set_firewall_policy(linphone_gtk_get_core(),LinphonePolicyUseUpnp);
+ }
}
void linphone_gtk_mtu_changed(GtkWidget *w){
{ "zh_CN" , N_("Chinese") },
{ "zh_TW" , N_("Traditional Chinese") },
{ "nb_NO" , N_("Norwegian") },
+ { "he" , N_("Hebrew") },
+ { "sr" , N_("Serbian") },
{ NULL , NULL }
};
const char *all_langs="C " LINPHONE_ALL_LANGS;
const char *name;
int i=0,index=0;
- const char *cur_lang=getenv("LANG");
+ const char *cur_lang;
+ #if defined(WIN32) || defined(__APPLE__)
+ cur_lang=getenv("LANG");
+ #else
+ cur_lang=getenv("LANGUAGE");
+ #endif
int cur_lang_index=-1;
char text[256]={0};
if (cur_lang==NULL) cur_lang="C";
void linphone_gtk_lang_changed(GtkComboBox *combo){
const char *selected=gtk_combo_box_get_active_text(combo);
char code[10];
- const char *cur_lang=getenv("LANG");
+ const char *cur_lang;
+ #if defined(WIN32) || defined(__APPLE__)
+ cur_lang=getenv("LANG");
+ #else
+ cur_lang=getenv("LANGUAGE");
+ #endif
if (selected!=NULL){
sscanf(selected,"%s",code);
if (cur_lang==NULL) cur_lang="C";
linphone_gtk_ui_level_adapt(top);
}
+static void linphone_gtk_set_media_encryption_mandatory_sensitive(GtkWidget *propbox, gboolean val){
+ GtkWidget *w=linphone_gtk_get_widget(propbox,"media_encryption_mandatory");
+ gtk_widget_set_sensitive(w,val);
+}
+
static void linphone_gtk_media_encryption_changed(GtkWidget *combo){
char *selected=gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo));
LinphoneCore *lc=linphone_gtk_get_core();
+ GtkWidget *toplevel=gtk_widget_get_toplevel(combo);
if (selected!=NULL){
- if (strcasecmp(selected,"SRTP")==0)
+ if (strcasecmp(selected,"SRTP")==0){
linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionSRTP);
- else if (strcasecmp(selected,"ZRTP")==0)
+ linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,TRUE);
+ }else if (strcasecmp(selected,"ZRTP")==0){
linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionZRTP);
- else linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionNone);
+ linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,FALSE);
+ }
+ else {
+ linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionNone);
+ linphone_gtk_set_media_encryption_mandatory_sensitive(toplevel,FALSE);
+ }
g_free(selected);
}else g_warning("gtk_combo_box_get_active_text() returned NULL");
}
+void linphone_gtk_set_media_encryption_mandatory(GtkWidget *button){
+ linphone_core_set_media_encryption_mandatory(linphone_gtk_get_core(),gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)));
+}
+
static void linphone_gtk_show_media_encryption(GtkWidget *pb){
LinphoneCore *lc=linphone_gtk_get_core();
GtkWidget *combo=linphone_gtk_get_widget(pb,"media_encryption_combo");
/*hide this setting*/
gtk_widget_hide(combo);
gtk_widget_hide(linphone_gtk_get_widget(pb,"media_encryption_label"));
+ gtk_widget_hide(linphone_gtk_get_widget(pb,"media_encryption_mandatory"));
}else{
LinphoneMediaEncryption menc=linphone_core_get_media_encryption(lc);
switch(menc){
case LinphoneMediaEncryptionNone:
gtk_combo_box_set_active(GTK_COMBO_BOX(combo),0);
+ linphone_gtk_set_media_encryption_mandatory_sensitive(pb,FALSE);
break;
case LinphoneMediaEncryptionSRTP:
- if (srtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),srtp_id);
+ if (srtp_id!=-1) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo),srtp_id);
+ linphone_gtk_set_media_encryption_mandatory_sensitive(pb,TRUE);
+ }
break;
case LinphoneMediaEncryptionZRTP:
- if (zrtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),zrtp_id);
+ if (zrtp_id!=-1) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo),zrtp_id);
+ linphone_gtk_set_media_encryption_mandatory_sensitive(pb,FALSE);
+ }
break;
}
g_signal_connect(G_OBJECT(combo),"changed",(GCallback)linphone_gtk_media_encryption_changed,NULL);
}
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"media_encryption_mandatory")),
+ linphone_core_is_media_encryption_mandatory(lc));
g_object_unref(G_OBJECT(model));
}
-void linphone_gtk_show_parameters(void){
- GtkWidget *pb=linphone_gtk_create_window("parameters");
+void linphone_gtk_parameters_destroyed(GtkWidget *pb){
+ GtkWidget *mw=linphone_gtk_get_main_window();
+ ms_error("linphone_gtk_paramters_destroyed");
+ g_object_set_data(G_OBJECT(mw),"parameters",NULL);
+}
+
+void linphone_gtk_fill_soundcards(GtkWidget *pb){
LinphoneCore *lc=linphone_gtk_get_core();
const char **sound_devices=linphone_core_get_sound_devices(lc);
+ linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"playback_device"), sound_devices,
+ linphone_core_get_playback_device(lc),CAP_PLAYBACK);
+ linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"ring_device"), sound_devices,
+ linphone_core_get_ringer_device(lc),CAP_PLAYBACK);
+ linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"capture_device"), sound_devices,
+ linphone_core_get_capture_device(lc), CAP_CAPTURE);
+}
+
+void linphone_gtk_fill_webcams(GtkWidget *pb){
+ LinphoneCore *lc=linphone_gtk_get_core();
+ linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"webcams"),linphone_core_get_video_devices(lc),
+ linphone_core_get_video_device(lc),CAP_IGNORE);
+}
+
+void linphone_gtk_show_parameters(void){
+ GtkWidget *mw=linphone_gtk_get_main_window();
+ GtkWidget *pb=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters");
+ LinphoneCore *lc=linphone_gtk_get_core();
const char *tmp;
LinphoneAddress *contact;
LinphoneFirewallPolicy pol;
- GtkWidget *codec_list=linphone_gtk_get_widget(pb,"codec_list");
+ GtkWidget *codec_list;
int mtu;
int ui_advanced;
LCSipTransports tr;
+ int min_port = 0, max_port = 0;
+
+ if (pb==NULL) {
+ pb=linphone_gtk_create_window("parameters");
+ g_object_set_data(G_OBJECT(mw),"parameters",pb);
+ }else {
+ gtk_widget_show(pb);
+ return;
+ }
+ codec_list=linphone_gtk_get_widget(pb,"codec_list");
/* NETWORK CONFIG */
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"ipv6_enabled")),
linphone_core_ipv6_enabled(lc));
linphone_core_get_sip_transports(lc,&tr);
- if (tr.tcp_port > 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ if (tr.tcp_port > 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 1);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.tcp_port);
- }
- else if (tr.tls_port > 0) {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ }
+ else if (tr.tls_port > 0) {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 2);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.tls_port);
- }
- else {
- gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
+ }
+ else {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(pb,"proto_combo")), 0);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"proto_port")),
tr.udp_port);
- }
+ }
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"audio_rtp_port")),
- linphone_core_get_audio_port(lc));
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"video_rtp_port")),
- linphone_core_get_video_port(lc));
+ linphone_core_get_audio_port_range(lc, &min_port, &max_port);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")), min_port);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_max_rtp_port")), max_port);
+ if (min_port == max_port) {
+ gtk_widget_set_sensitive(GTK_WIDGET(linphone_gtk_get_widget(pb, "audio_max_rtp_port")), FALSE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_audio_port")), TRUE);
+ }
+ linphone_core_get_video_port_range(lc, &min_port, &max_port);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_min_rtp_port")), min_port);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_max_rtp_port")), max_port);
+ if (min_port == max_port) {
+ gtk_widget_set_sensitive(GTK_WIDGET(linphone_gtk_get_widget(pb, "video_max_rtp_port")), FALSE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_video_port")), TRUE);
+ }
linphone_gtk_show_media_encryption(pb);
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;
+ case LinphonePolicyUseUpnp:
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"use_upnp")),TRUE);
+ break;
+ }
+ if(!linphone_core_upnp_available(lc)) {
+ gtk_widget_hide(linphone_gtk_get_widget(pb,"use_upnp"));
}
+
mtu=linphone_core_get_mtu(lc);
if (mtu<=0){
gtk_widget_set_sensitive(linphone_gtk_get_widget(pb,"mtu"),FALSE);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"dtmf_sipinfo")),
linphone_core_get_use_info_for_dtmf(lc));
/* MUTIMEDIA CONFIG */
- linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"playback_device"), sound_devices,
- linphone_core_get_playback_device(lc),CAP_PLAYBACK);
- linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"ring_device"), sound_devices,
- linphone_core_get_ringer_device(lc),CAP_PLAYBACK);
- linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"capture_device"), sound_devices,
- linphone_core_get_capture_device(lc), CAP_CAPTURE);
- linphone_gtk_fill_combo_box(linphone_gtk_get_widget(pb,"webcams"),linphone_core_get_video_devices(lc),
- linphone_core_get_video_device(lc),CAP_IGNORE);
+ linphone_gtk_fill_soundcards(pb);
+ linphone_gtk_fill_webcams(pb);
+
linphone_gtk_fill_video_sizes(linphone_gtk_get_widget(pb,"video_size"));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"echo_cancelation")),
linphone_core_echo_cancellation_enabled(lc));
}
+void linphone_gtk_fixed_audio_port_toggle(void) {
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ gboolean fixed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_audio_port")));
+ gint min_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")));
+ gint max_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_max_rtp_port")));
+ gtk_widget_set_sensitive(GTK_WIDGET(linphone_gtk_get_widget(pb, "audio_max_rtp_port")), !fixed);
+ if (fixed) {
+ linphone_core_set_audio_port(linphone_gtk_get_core(), min_port);
+ } else {
+ linphone_core_set_audio_port_range(linphone_gtk_get_core(), min_port, max_port);
+ }
+}
+
+
+void linphone_gtk_fixed_video_port_toggle(void) {
+ GtkWidget *mw = linphone_gtk_get_main_window();
+ GtkWidget *pb = (GtkWidget *) g_object_get_data(G_OBJECT(mw), "parameters");
+ gboolean fixed = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "fixed_video_port")));
+ gint min_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_min_rtp_port")));
+ gint max_port = gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "video_max_rtp_port")));
+ gtk_widget_set_sensitive(GTK_WIDGET(linphone_gtk_get_widget(pb, "video_max_rtp_port")), !fixed);
+ if (fixed) {
+ linphone_core_set_video_port(linphone_gtk_get_core(), min_port);
+ } else {
+ linphone_core_set_video_port_range(linphone_gtk_get_core(), min_port, max_port);
+ }
+}
+
+
void linphone_gtk_edit_tunnel_closed(GtkWidget *button){
GtkWidget *pb=gtk_widget_get_toplevel(button);
gtk_widget_destroy(pb);
}
-#ifdef TUNNEL_ENABLED
-static void tunnel_get_server_host_and_port(LinphoneTunnel *tunnel, char *host, int size, int *port){
- char *colon;
- char *addresses=(char*)ms_strdup(linphone_tunnel_get_server_addresses(tunnel));
- char *str1=addresses;
- char *address=strtok(str1," "); // Not thread safe
- if (!address) return;
- colon=strchr(address, ':');
- if (!colon) return;
- *colon++='\0';
- *port=atoi(colon);
- memcpy(host,address,size);
- ms_free(addresses);
-}
-#endif
-
void linphone_gtk_edit_tunnel(GtkButton *button){
-#ifdef TUNNEL_ENABLED
- LinphoneCore *lc=linphone_gtk_get_core();
GtkWidget *w=linphone_gtk_create_window("tunnel_config");
+ LinphoneCore *lc=linphone_gtk_get_core();
LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
- char host[50]={'\0'};
+ const MSList *configs;
+ const char *host = NULL;
int port=0;
- tunnel_get_server_host_and_port(tunnel, host, sizeof(host), &port);
- LinphoneTunnelState state=linphone_tunnel_get_state(tunnel);
+
+ if (!tunnel) return;
+
+ configs = linphone_tunnel_get_servers(tunnel);
+ if(configs != NULL) {
+ LinphoneTunnelConfig *ltc = (LinphoneTunnelConfig *)configs->data;
+ host = linphone_tunnel_config_get_host(ltc);
+ port = linphone_tunnel_config_get_port(ltc);
+ }
gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"host")),host);
+ if (port==0) port=443;
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"port")), port);
- if (state == LinphoneTunnelEnabled){
+ if (linphone_tunnel_enabled(tunnel)){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_enable")),1);
} else{
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_disable")),1);
}
+ {
+ const char *proxy=NULL,*username=NULL,*password=NULL;
+ port=0;
+ linphone_tunnel_get_http_proxy(tunnel,&proxy,&port,&username,&password);
+ if (proxy)
+ gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"http_host")),proxy);
+ if (port>0)
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"http_port")), port);
+ if (username)
+ gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"username")),username);
+ if (password)
+ gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"password")),password);
+ }
g_object_weak_ref(G_OBJECT(w),(GWeakNotify)linphone_gtk_edit_tunnel_closed,w);
-
- gtk_widget_show(w);
-#endif
+ gtk_widget_show(w);
}
void linphone_gtk_tunnel_ok(GtkButton *button){
-#ifdef TUNNEL_ENABLED
- // Save information to config file
- LinphoneCore *lc=linphone_gtk_get_core();
GtkWidget *w=gtk_widget_get_toplevel(GTK_WIDGET(button));
- char address[50]={'\0'};
+ LinphoneCore *lc=linphone_gtk_get_core();
LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
+ LinphoneTunnelConfig *config=linphone_tunnel_config_new();
gint port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"port")));
gboolean enabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_enable")));
const char *host=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(w,"host")));
-
- snprintf(address, sizeof address, "%s:%i", host, port);
- linphone_tunnel_set_server_addresses(tunnel, address);
- if (enabled){
- linphone_tunnel_set_state(tunnel, LinphoneTunnelEnabled);
- } else{
- linphone_tunnel_set_state(tunnel,LinphoneTunnelDisabled);
- }
- linphone_core_update_tunnel(lc);
+ const char *http_host=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(w,"http_host")));
+ gint http_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"http_port")));
+ const char *username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(w,"username")));
+ const char *password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(w,"password")));
+
+ if (tunnel==NULL) return;
+ if (host && *host=='\0') host=NULL;
+ if (http_port==0) http_port=8080;
+ linphone_tunnel_clean_servers(tunnel);
+ linphone_tunnel_config_set_host(config, host);
+ linphone_tunnel_config_set_port(config, port);
+ linphone_tunnel_add_server(tunnel, config);
+ linphone_tunnel_enable(tunnel,enabled);
+ linphone_tunnel_set_http_proxy(tunnel,http_host,http_port,username,password);
+
gtk_widget_destroy(w);
-#endif
}
void linphone_gtk_tunnel_cancel(GtkButton *button){
}
+
+static void show_dscp(GtkWidget *entry, int val){
+ char tmp[20];
+ snprintf(tmp,sizeof(tmp),"0x%x",val);
+ gtk_entry_set_text(GTK_ENTRY(entry),tmp);
+
+}
+
+static int read_dscp(GtkWidget *entry){
+ const char *val=gtk_entry_get_text(GTK_ENTRY(entry));
+ const char *begin;
+ int ret=0;
+ if (val==NULL || val[0]=='\0') return 0;
+ /*skip potential 0x*/
+ begin=strstr(val,"0x");
+ if (begin) begin+=2;
+ else begin=val;
+ if (sscanf(begin,"%x",&ret)==1)
+ return ret;
+ return -1;
+}
+
+void linphone_gtk_dscp_edit(){
+ LinphoneCore *lc=linphone_gtk_get_core();
+ GtkWidget *widget=linphone_gtk_create_window("dscp_settings");
+ show_dscp(linphone_gtk_get_widget(widget,"sip_dscp"),
+ linphone_core_get_sip_dscp(lc));
+ show_dscp(linphone_gtk_get_widget(widget,"audio_dscp"),
+ linphone_core_get_audio_dscp(lc));
+ show_dscp(linphone_gtk_get_widget(widget,"video_dscp"),
+ linphone_core_get_video_dscp(lc));
+ gtk_widget_show(widget);
+}
+
+void linphone_gtk_dscp_edit_response(GtkWidget *dialog, guint response_id){
+ LinphoneCore *lc=linphone_gtk_get_core();
+ switch(response_id){
+ case GTK_RESPONSE_OK:
+ linphone_core_set_sip_dscp(lc,
+ read_dscp(linphone_gtk_get_widget(dialog,"sip_dscp")));
+ linphone_core_set_audio_dscp(lc,
+ read_dscp(linphone_gtk_get_widget(dialog,"audio_dscp")));
+ linphone_core_set_video_dscp(lc,
+ read_dscp(linphone_gtk_get_widget(dialog,"video_dscp")));
+
+ break;
+ default:
+ break;
+ }
+ gtk_widget_destroy(dialog);
+}