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);
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);
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)));
}
-void linphone_gtk_udp_sip_port_changed(GtkWidget *w){
- LCSipTransports tr;
- LinphoneCore *lc=linphone_gtk_get_core();
-
- linphone_core_get_sip_transports(lc,&tr);
- tr.udp_port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w));
- linphone_core_set_sip_transports(lc,&tr);
-}
-
-void linphone_gtk_tcp_sip_port_changed(GtkWidget *w){
- LCSipTransports tr;
- LinphoneCore *lc=linphone_gtk_get_core();
-
- 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(),
(gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(w)));
for(elem=codeclist; elem!=NULL; elem=elem->next){
gchar *status;
gint rate;
- gfloat bitrate;
+ gfloat bitrate;
const gchar *color;
const char *params="";
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);
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);
if (pt==ref){
gtk_tree_selection_select_iter(selection,&iter);
}
-
+
}while(gtk_tree_model_iter_next(model,&iter));
}
linphone_gtk_check_codec_bandwidth(v);
}
+void linphone_gtk_adaptive_rate_control_toggled(GtkToggleButton *button){
+ gboolean active=gtk_toggle_button_get_active(button);
+ linphone_core_enable_adaptive_rate_control(linphone_gtk_get_core(),active);
+}
+
static void linphone_gtk_codec_move(GtkWidget *button, int dir){
GtkTreeView *v=GTK_TREE_VIEW(linphone_gtk_get_widget(gtk_widget_get_toplevel(button),"codec_list"));
GtkTreeSelection *sel=gtk_tree_view_get_selection(v);
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 ();
"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);
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++;
}
}
}
+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");
linphone_gtk_ui_level_adapt(top);
}
+static void linphone_gtk_media_encryption_changed(GtkWidget *combo){
+ const char *selected=gtk_combo_box_get_active_text(GTK_COMBO_BOX(combo));
+ LinphoneCore *lc=linphone_gtk_get_core();
+ if (selected!=NULL){
+ if (strcasecmp(selected,"SRTP")==0)
+ linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionSRTP);
+ else if (strcasecmp(selected,"ZRTP")==0)
+ linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionZRTP);
+ else linphone_core_set_media_encryption(lc,LinphoneMediaEncryptionNone);
+ }else g_warning("gtk_combo_box_get_active_text() returned NULL");
+}
+
+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");
+ bool_t no_enc=TRUE;
+ int srtp_id=-1,zrtp_id=-1;
+
+ if (linphone_core_media_encryption_supported(lc,LinphoneMediaEncryptionSRTP)){
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo),_("SRTP"));
+ srtp_id=1;
+ no_enc=FALSE;
+ }
+ if (linphone_core_media_encryption_supported(lc,LinphoneMediaEncryptionZRTP)){
+ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo),_("ZRTP"));
+ no_enc=FALSE;
+ if (srtp_id!=-1) zrtp_id=2;
+ else zrtp_id=1;
+ }
+ if (no_enc){
+ /*hide this setting*/
+ gtk_widget_hide(combo);
+ gtk_widget_hide(linphone_gtk_get_widget(pb,"media_encryption_label"));
+ }else{
+ LinphoneMediaEncryption menc=linphone_core_get_media_encryption(lc);
+ switch(menc){
+ case LinphoneMediaEncryptionNone:
+ gtk_combo_box_set_active(GTK_COMBO_BOX(combo),0);
+ break;
+ case LinphoneMediaEncryptionSRTP:
+ if (srtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),srtp_id);
+ break;
+ case LinphoneMediaEncryptionZRTP:
+ if (zrtp_id!=-1) gtk_combo_box_set_active(GTK_COMBO_BOX(combo),zrtp_id);
+ break;
+ }
+ g_signal_connect(G_OBJECT(combo),"changed",(GCallback)linphone_gtk_media_encryption_changed,NULL);
+ }
+}
+
void linphone_gtk_show_parameters(void){
GtkWidget *pb=linphone_gtk_create_window("parameters");
LinphoneCore *lc=linphone_gtk_get_core();
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));
+
+ linphone_gtk_show_media_encryption(pb);
+
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);
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));
-
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"adaptive_rate_control")),
+ linphone_core_adaptive_rate_control_enabled(lc));
+
/* UI CONFIG */
linphone_gtk_fill_langs(pb);
ui_advanced);
linphone_gtk_ui_level_adapt(pb);
+ g_signal_connect(G_OBJECT(linphone_gtk_get_widget(pb,"proto_port")),"value-changed",(GCallback)linphone_gtk_update_my_port,NULL);
+ g_signal_connect(G_OBJECT(linphone_gtk_get_widget(pb,"proto_combo")),"changed",(GCallback)linphone_gtk_proto_changed,NULL);
gtk_widget_show(pb);
}