From 0ca32414559e0377973f10afc2c01316b1ce5710 Mon Sep 17 00:00:00 2001 From: sylvain Date: Thu, 22 Sep 2011 16:26:03 +0200 Subject: [PATCH] new interface for protocols and ports in preferences screen --- gtk/parameters.ui | 264 ++++++++++++++++++++++++---------------------- gtk/propertybox.c | 99 ++++++++++++++--- 2 files changed, 222 insertions(+), 141 deletions(-) diff --git a/gtk/parameters.ui b/gtk/parameters.ui index 8b43f12aa..9af426212 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -41,6 +41,13 @@ 1 10 + + 1 + 65535 + 5060 + 1 + 9.9999999995529656 + 65535 1 @@ -127,6 +134,23 @@ + + + + + + + + SIP (UDP) + + + SIP (TCP) + + + SIP (TLS) + + + False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -275,134 +299,126 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 12 - + True False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 4 - 2 - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - False - True - True - adjustment2 - - - - 1 - 2 - 3 - 4 - + - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - False - True - True - adjustment3 - - - - 1 - 2 - 2 - 3 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - False - True - True - adjustment_tcp_port - - - - 1 - 2 - 1 - 2 - - - - - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - False - True - True - adjustment4 - - - - 1 - 2 - - - - + True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Video RTP/UDP: - right + 3 + 2 + + + True + False + model8 + + + + + 0 + + + + + + + True + True + + True + False + False + True + True + adjustment7 + + + + 1 + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + True + False + False + True + True + adjustment2 + + + + 1 + 2 + 1 + 2 + + + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + True + False + False + True + True + adjustment3 + + + + 1 + 2 + 2 + 3 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Video RTP/UDP: + right + + + 1 + 2 + + + + + True + False + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + Audio RTP/UDP: + right + + + 2 + 3 + + - 3 - 4 + True + True + 1 - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - Audio RTP/UDP: - right - - - 2 - 3 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - SIP (TCP): - right - - - 1 - 2 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - SIP (UDP): - right - - @@ -412,7 +428,7 @@ True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - <b>Ports</b> + <b>Network protocol and ports</b> True @@ -760,7 +776,7 @@ model1 - + 0 @@ -782,7 +798,7 @@ model2 - + 0 @@ -858,7 +874,7 @@ model3 - + 0 @@ -946,7 +962,7 @@ model4 - + 0 @@ -977,7 +993,7 @@ 0 - + 0 @@ -1600,7 +1616,7 @@ virtual network ! 0 - + 0 @@ -1973,7 +1989,7 @@ virtual network ! model7 - + 0 diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 625fd8293..ce090d638 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -33,7 +33,7 @@ static void linphone_gtk_fill_combo_box(GtkWidget *combo, const char **devices, This dummy text needs to be removed first*/ gtk_combo_box_remove_text(GTK_COMBO_BOX(combo),0); for(;*p!=NULL;++p){ - if ( cap==CAP_IGNORE + if ( cap==CAP_IGNORE || (cap==CAP_CAPTURE && linphone_core_sound_device_can_capture(linphone_gtk_get_core(),*p)) || (cap==CAP_PLAYBACK && linphone_core_sound_device_can_playback(linphone_gtk_get_core(),*p)) ){ gtk_combo_box_append_text(GTK_COMBO_BOX(combo),*p); @@ -87,6 +87,49 @@ void linphone_gtk_update_my_contact(GtkWidget *w){ linphone_gtk_load_identities(); } +void linphone_gtk_update_my_port(GtkWidget *w){ + GtkWidget *pb=gtk_widget_get_toplevel(GTK_WIDGET(w)); + LCSipTransports tr; + LinphoneCore *lc=linphone_gtk_get_core(); + GtkComboBox *combo = GTK_COMBO_BOX(linphone_gtk_get_widget(pb, "proto_combo")); + + gint port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)); + if (port == 1) { // We use default port if not specified + if (strcmp(gtk_combo_box_get_active_text(combo), "SIP (UDP)") == 0) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), + 5060); + } + else if (strcmp(gtk_combo_box_get_active_text(combo), "SIP (TCP)") == 0) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), + 5060); + } + else if (strcmp(gtk_combo_box_get_active_text(combo), "SIP (TLS)") == 0) { + gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), + 5061); + } + } + + linphone_core_get_sip_transports(lc,&tr); + gchar *selected = gtk_combo_box_get_active_text(combo); + if (strcmp(selected, "SIP (TCP)") == 0) { + tr.tcp_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)); + tr.udp_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 (UDP)") == 0) { + tr.udp_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)); + 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.tls_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)); + } + + linphone_core_set_sip_transports(lc,&tr); +} + 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); @@ -102,7 +145,7 @@ void linphone_gtk_ipv6_toggled(GtkWidget *w){ gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))); } -void linphone_gtk_udp_sip_port_changed(GtkWidget *w){ +/* void linphone_gtk_udp_sip_port_changed(GtkWidget *w){ LCSipTransports tr; LinphoneCore *lc=linphone_gtk_get_core(); @@ -118,7 +161,7 @@ void linphone_gtk_tcp_sip_port_changed(GtkWidget *w){ linphone_core_get_sip_transports(lc,&tr); tr.tcp_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)); linphone_core_set_sip_transports(lc,&tr); -} +} */ void linphone_gtk_audio_port_changed(GtkWidget *w){ linphone_core_set_audio_port(linphone_gtk_get_core(), @@ -329,7 +372,7 @@ static void linphone_gtk_show_codecs(GtkTreeView *listview, const MSList *codecl for(elem=codeclist; elem!=NULL; elem=elem->next){ gchar *status; gint rate; - gfloat bitrate; + gfloat bitrate; const gchar *color; const char *params=""; @@ -355,9 +398,9 @@ static void linphone_gtk_show_codecs(GtkTreeView *listview, const MSList *codecl CODEC_INFO,(gpointer)linphone_core_get_payload_type_description(linphone_gtk_get_core(),pt), -1); } - - - + + + /* Setup the selection handler */ selection = gtk_tree_view_get_selection (listview); gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); @@ -374,10 +417,10 @@ static void linphone_gtk_check_codec_bandwidth(GtkTreeView *v){ g_return_if_fail(gtk_tree_model_get_iter_first(model,&iter)); do{ PayloadType *pt=NULL; - + gfloat bitrate; gtk_tree_model_get(model,&iter,CODEC_PRIVDATA,&pt,-1); - + bitrate=payload_type_get_bitrate(pt)/1000.0; gtk_list_store_set(GTK_LIST_STORE(model),&iter,CODEC_COLOR, (gpointer)get_codec_color(linphone_gtk_get_core(),pt), CODEC_BITRATE, bitrate,-1); @@ -397,7 +440,7 @@ static void linphone_gtk_select_codec(GtkTreeView *v, PayloadType *ref){ if (pt==ref){ gtk_tree_selection_select_iter(selection,&iter); } - + }while(gtk_tree_model_iter_next(model,&iter)); } @@ -516,7 +559,7 @@ void linphone_gtk_show_sip_accounts(GtkWidget *w){ GtkTreeViewColumn *column; /* create the proxy list */ store = gtk_list_store_new (PROXY_CONFIG_NCOL, G_TYPE_STRING, G_TYPE_POINTER); - + gtk_tree_view_set_model(v,GTK_TREE_MODEL(store)); g_object_unref(G_OBJECT(store)); renderer = gtk_cell_renderer_text_new (); @@ -525,7 +568,7 @@ void linphone_gtk_show_sip_accounts(GtkWidget *w){ "text", PROXY_CONFIG_IDENTITY, NULL); gtk_tree_view_append_column (v, column); - + select = gtk_tree_view_get_selection (v); gtk_tree_selection_set_mode (select, GTK_SELECTION_SINGLE); model=GTK_TREE_MODEL(store); @@ -712,7 +755,7 @@ static void linphone_gtk_fill_langs(GtkWidget *pb){ name=lang_get_name(code); snprintf(text,sizeof(text)-1,"%s : %s",code,name!=NULL ? _(name) : code); gtk_combo_box_append_text(GTK_COMBO_BOX(combo),text); - if (cur_lang_index==-1 && lang_equals(cur_lang,code)) + if (cur_lang_index==-1 && lang_equals(cur_lang,code)) cur_lang_index=index; index++; } @@ -743,6 +786,14 @@ void linphone_gtk_lang_changed(GtkComboBox *combo){ } } +void linphone_gtk_proto_changed(GtkComboBox *combo){ + GtkWidget *pb=gtk_widget_get_toplevel(GTK_WIDGET(combo)); + + GtkWidget *proto_port = linphone_gtk_get_widget(pb, "proto_port"); + // When we change the network protocol, we call update_my_port to move the port number from the old protocol to the new one + linphone_gtk_update_my_port(proto_port); +} + static void linphone_gtk_ui_level_adapt(GtkWidget *top) { gboolean ui_advanced; const char *simple_ui = linphone_gtk_get_ui_config("simple_ui", "parameters.codec_tab parameters.transport_frame parameters.ports_frame"); @@ -781,14 +832,28 @@ void linphone_gtk_show_parameters(void){ 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); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"udp_sip_port")), - tr.udp_port); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"tcp_sip_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")), + 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")), + 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)); + tmp=linphone_core_get_nat_address(lc); if (tmp) gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(pb,"nat_address")),tmp); tmp=linphone_core_get_stun_server(lc); @@ -852,7 +917,7 @@ void linphone_gtk_show_parameters(void){ linphone_core_get_download_bandwidth(lc)); gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"upload_bw")), linphone_core_get_upload_bandwidth(lc)); - + /* UI CONFIG */ linphone_gtk_fill_langs(pb);