diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gtk/extcap_gtk.c | 1488 | ||||
-rw-r--r-- | ui/gtk/extcap_gtk.h | 69 | ||||
-rw-r--r-- | ui/gtk/mcast_stream_dlg.c | 1142 | ||||
-rw-r--r-- | ui/gtk/rtp_stream_dlg.c | 1530 |
4 files changed, 2115 insertions, 2114 deletions
diff --git a/ui/gtk/extcap_gtk.c b/ui/gtk/extcap_gtk.c index e3d63c9862..fcde999d56 100644 --- a/ui/gtk/extcap_gtk.c +++ b/ui/gtk/extcap_gtk.c @@ -37,863 +37,863 @@ static gboolean extcap_gtk_count_tree_elements(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { - int *ptr_count = (int*)data; - gboolean multi_enabled; - (void)path; + int *ptr_count = (int*)data; + gboolean multi_enabled; + (void)path; - g_assert(ptr_count != NULL); + g_assert(ptr_count != NULL); - gtk_tree_model_get(model, iter, - EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, -1); + gtk_tree_model_get(model, iter, + EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, -1); - if (multi_enabled) - { - ++(*ptr_count); - } + if (multi_enabled) + { + ++(*ptr_count); + } - return FALSE; /* Continue iteration. */ + return FALSE; /* Continue iteration. */ } typedef struct _extcap_gtk_multi_fill_cb_data { - gchar **list; - int num; - int max; + gchar **list; + int num; + int max; } extcap_gtk_multi_fill_cb_data; static gboolean extcap_gtk_fill_multi_list(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { - extcap_gtk_multi_fill_cb_data *ptr_data = (extcap_gtk_multi_fill_cb_data*)data; - gboolean multi_enabled; - extcap_value *value; - (void)path; + extcap_gtk_multi_fill_cb_data *ptr_data = (extcap_gtk_multi_fill_cb_data*)data; + gboolean multi_enabled; + extcap_value *value; + (void)path; - g_assert(ptr_data != NULL); + g_assert(ptr_data != NULL); - gtk_tree_model_get(model, iter, - EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, - EXTCAP_GTK_MULTI_COL_VALUE, &value, -1); + gtk_tree_model_get(model, iter, + EXTCAP_GTK_MULTI_COL_CHECK, &multi_enabled, + EXTCAP_GTK_MULTI_COL_VALUE, &value, -1); - if (multi_enabled) - { - g_assert(ptr_data->num < ptr_data->max); + if (multi_enabled) + { + g_assert(ptr_data->num < ptr_data->max); - if (ptr_data->num < ptr_data->max) - { - ptr_data->list[ptr_data->num] = g_strdup(value->call); - ptr_data->num++; - } - } + if (ptr_data->num < ptr_data->max) + { + ptr_data->list[ptr_data->num] = g_strdup(value->call); + ptr_data->num++; + } + } - return FALSE; /* Continue iteration. */ + return FALSE; /* Continue iteration. */ } typedef struct _extcap_gtk_multi_find_cb_data { - gchar *parent; - GtkTreeIter *parent_iter; + gchar *parent; + GtkTreeIter *parent_iter; } extcap_gtk_multi_find_cb_data; static gboolean extcap_gtk_find_parent_in_multi_list(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data) { - extcap_gtk_multi_find_cb_data *ptr_data = (extcap_gtk_multi_find_cb_data*)data; - extcap_value *value; - (void)path; + extcap_gtk_multi_find_cb_data *ptr_data = (extcap_gtk_multi_find_cb_data*)data; + extcap_value *value; + (void)path; - g_assert(ptr_data != NULL); + g_assert(ptr_data != NULL); - gtk_tree_model_get(model, iter, - EXTCAP_GTK_MULTI_COL_VALUE, &value, -1); + gtk_tree_model_get(model, iter, + EXTCAP_GTK_MULTI_COL_VALUE, &value, -1); - if (0 == g_strcmp0(ptr_data->parent, value->call)) - { - ptr_data->parent_iter = gtk_tree_iter_copy(iter); - return TRUE; /* Stop iteration. */ - } + if (0 == g_strcmp0(ptr_data->parent, value->call)) + { + ptr_data->parent_iter = gtk_tree_iter_copy(iter); + return TRUE; /* Stop iteration. */ + } - return FALSE; /* Continue iteration. */ + return FALSE; /* Continue iteration. */ } GHashTable *extcap_gtk_get_state(GtkWidget *widget) { - GSList *widget_list, *widget_iter; - GSList *radio_list = NULL, *radio_iter = NULL; - - GtkWidget *list_widget, *radio_widget, *tree_widget, *entry_widget; - - extcap_arg *arg = NULL; - extcap_value *value = NULL; - extcap_complex *parsed_complex = NULL; - - GtkTreeSelection *treeselection; - GtkTreeModel *treemodel; - GtkTreeIter treeiter; - - GHashTable *ret_hash; - - gchar *call_string = NULL; - - extcap_gtk_multi_fill_cb_data multi_data = { NULL, 0, 0 }; - - int multi_num = 0; - - widget_list = (GSList *) g_object_get_data(G_OBJECT(widget), - EXTCAP_GTK_DATA_KEY_WIDGETLIST); - - if (widget_list == NULL) - return NULL ; - - /* String hash */ - ret_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - - for (widget_iter = widget_list; widget_iter; widget_iter = - widget_iter->next) { - list_widget = (GtkWidget *) widget_iter->data; - - if ((arg = (extcap_arg *) g_object_get_data(G_OBJECT(list_widget), - EXTCAP_GTK_DATA_KEY_ARGPTR)) == NULL) { - continue; - } - - switch (arg->arg_type) { - case EXTCAP_ARG_INTEGER: - case EXTCAP_ARG_UNSIGNED: - case EXTCAP_ARG_LONG: - case EXTCAP_ARG_DOUBLE: - case EXTCAP_ARG_STRING: - parsed_complex = extcap_parse_complex(arg->arg_type, - gtk_entry_get_text(GTK_ENTRY(list_widget))); - if (parsed_complex == NULL) { - continue; - } - break; - case EXTCAP_ARG_BOOLEAN: - case EXTCAP_ARG_BOOLFLAG: - parsed_complex = extcap_parse_complex(arg->arg_type, - gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(list_widget)) ? "true" : "false"); - break; - case EXTCAP_ARG_FILESELECT: - if ((entry_widget = - (GtkWidget *) g_object_get_data(G_OBJECT(list_widget), - EXTCAP_GTK_DATA_KEY_FILENAME)) == NULL) { - continue; - } - parsed_complex = extcap_parse_complex(arg->arg_type, - gtk_entry_get_text(GTK_ENTRY(entry_widget))); - if (parsed_complex == NULL) { - continue; - } - break; - case EXTCAP_ARG_MENU: - break; - case EXTCAP_ARG_RADIO: - if ((radio_widget = (GtkWidget *) g_object_get_data( - G_OBJECT(list_widget), - EXTCAP_GTK_DATA_KEY_FIRSTRADIO)) == NULL) { - continue; - } - - if ((radio_list = gtk_radio_button_get_group( - GTK_RADIO_BUTTON(radio_widget))) == NULL) { - continue; - } - - for (radio_iter = radio_list; radio_iter; - radio_iter = radio_iter->next) { - GtkWidget *cur_radio = (GtkWidget *) radio_iter->data; - - if (gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(cur_radio))) { - if ((value = (extcap_value *) g_object_get_data( - G_OBJECT(cur_radio), - EXTCAP_GTK_DATA_KEY_VALPTR)) == NULL) { - continue; - } - - if (value->is_default) - continue; - - call_string = g_strdup(value->call); - break; - } - } - - break; - case EXTCAP_ARG_SELECTOR: - if ((tree_widget = (GtkWidget *) g_object_get_data( - G_OBJECT(list_widget), - EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) { - continue; - } - - treeselection = gtk_tree_view_get_selection( - GTK_TREE_VIEW(tree_widget)); - treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget)); - if (gtk_tree_selection_get_selected(treeselection, &treemodel, - &treeiter)) { - gtk_tree_model_get(treemodel, &treeiter, EXTCAP_GTK_COL_VALUE, - &value, -1); - - if (value->is_default) - continue; - - call_string = g_strdup(value->call); - } - - break; - case EXTCAP_ARG_MULTICHECK: - if ((tree_widget = (GtkWidget *) g_object_get_data( - G_OBJECT(list_widget), - EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) { - continue; - } - - gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_widget)); - treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget)); - - multi_num = 0; - - /* Count the # of items enabled */ - gtk_tree_model_foreach(treemodel, extcap_gtk_count_tree_elements, - &multi_num); - - if (multi_num > 0) - { - multi_data.list = g_new(gchar *, multi_num + 1); - multi_data.num = 0; - multi_data.max = multi_num; - - multi_num = 0; - - /* Get values list of items enabled */ - gtk_tree_model_foreach(treemodel, extcap_gtk_fill_multi_list, - &multi_data); - - multi_data.list[multi_data.max] = NULL; - - call_string = g_strjoinv(",", multi_data.list); - - g_strfreev(multi_data.list); - } - else - { - /* There are no enabled items. Skip this argument from command line. */ - continue; - } - - break; - default: - break; - } - - if (parsed_complex == NULL && call_string == NULL) - continue; - - /* Comparing if the user has changed the value at all, and ignoring it if so */ - if (extcap_compare_is_default(arg, parsed_complex)) - continue; - - /* Flags are set as is, and have not true/false switch */ - if ((arg->arg_type == EXTCAP_ARG_BOOLFLAG) - && (extcap_complex_get_bool(parsed_complex) == TRUE)) { - call_string = g_strdup(" "); - } - - if (parsed_complex != NULL && call_string == NULL) - call_string = extcap_get_complex_as_string(parsed_complex); - - g_hash_table_insert(ret_hash, g_strdup(arg->call), - g_strdup(call_string)); - - g_free(call_string); - call_string = NULL; - - g_free(parsed_complex); - parsed_complex = NULL; - } - - return ret_hash; + GSList *widget_list, *widget_iter; + GSList *radio_list = NULL, *radio_iter = NULL; + + GtkWidget *list_widget, *radio_widget, *tree_widget, *entry_widget; + + extcap_arg *arg = NULL; + extcap_value *value = NULL; + extcap_complex *parsed_complex = NULL; + + GtkTreeSelection *treeselection; + GtkTreeModel *treemodel; + GtkTreeIter treeiter; + + GHashTable *ret_hash; + + gchar *call_string = NULL; + + extcap_gtk_multi_fill_cb_data multi_data = { NULL, 0, 0 }; + + int multi_num = 0; + + widget_list = (GSList *) g_object_get_data(G_OBJECT(widget), + EXTCAP_GTK_DATA_KEY_WIDGETLIST); + + if (widget_list == NULL) + return NULL ; + + /* String hash */ + ret_hash = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); + + for (widget_iter = widget_list; widget_iter; widget_iter = + widget_iter->next) { + list_widget = (GtkWidget *) widget_iter->data; + + if ((arg = (extcap_arg *) g_object_get_data(G_OBJECT(list_widget), + EXTCAP_GTK_DATA_KEY_ARGPTR)) == NULL) { + continue; + } + + switch (arg->arg_type) { + case EXTCAP_ARG_INTEGER: + case EXTCAP_ARG_UNSIGNED: + case EXTCAP_ARG_LONG: + case EXTCAP_ARG_DOUBLE: + case EXTCAP_ARG_STRING: + parsed_complex = extcap_parse_complex(arg->arg_type, + gtk_entry_get_text(GTK_ENTRY(list_widget))); + if (parsed_complex == NULL) { + continue; + } + break; + case EXTCAP_ARG_BOOLEAN: + case EXTCAP_ARG_BOOLFLAG: + parsed_complex = extcap_parse_complex(arg->arg_type, + gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(list_widget)) ? "true" : "false"); + break; + case EXTCAP_ARG_FILESELECT: + if ((entry_widget = + (GtkWidget *) g_object_get_data(G_OBJECT(list_widget), + EXTCAP_GTK_DATA_KEY_FILENAME)) == NULL) { + continue; + } + parsed_complex = extcap_parse_complex(arg->arg_type, + gtk_entry_get_text(GTK_ENTRY(entry_widget))); + if (parsed_complex == NULL) { + continue; + } + break; + case EXTCAP_ARG_MENU: + break; + case EXTCAP_ARG_RADIO: + if ((radio_widget = (GtkWidget *) g_object_get_data( + G_OBJECT(list_widget), + EXTCAP_GTK_DATA_KEY_FIRSTRADIO)) == NULL) { + continue; + } + + if ((radio_list = gtk_radio_button_get_group( + GTK_RADIO_BUTTON(radio_widget))) == NULL) { + continue; + } + + for (radio_iter = radio_list; radio_iter; + radio_iter = radio_iter->next) { + GtkWidget *cur_radio = (GtkWidget *) radio_iter->data; + + if (gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(cur_radio))) { + if ((value = (extcap_value *) g_object_get_data( + G_OBJECT(cur_radio), + EXTCAP_GTK_DATA_KEY_VALPTR)) == NULL) { + continue; + } + + if (value->is_default) + continue; + + call_string = g_strdup(value->call); + break; + } + } + + break; + case EXTCAP_ARG_SELECTOR: + if ((tree_widget = (GtkWidget *) g_object_get_data( + G_OBJECT(list_widget), + EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) { + continue; + } + + treeselection = gtk_tree_view_get_selection( + GTK_TREE_VIEW(tree_widget)); + treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget)); + if (gtk_tree_selection_get_selected(treeselection, &treemodel, + &treeiter)) { + gtk_tree_model_get(treemodel, &treeiter, EXTCAP_GTK_COL_VALUE, + &value, -1); + + if (value->is_default) + continue; + + call_string = g_strdup(value->call); + } + + break; + case EXTCAP_ARG_MULTICHECK: + if ((tree_widget = (GtkWidget *) g_object_get_data( + G_OBJECT(list_widget), + EXTCAP_GTK_DATA_KEY_TREEVIEW)) == NULL) { + continue; + } + + gtk_tree_view_get_selection(GTK_TREE_VIEW(tree_widget)); + treemodel = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_widget)); + + multi_num = 0; + + /* Count the # of items enabled */ + gtk_tree_model_foreach(treemodel, extcap_gtk_count_tree_elements, + &multi_num); + + if (multi_num > 0) + { + multi_data.list = g_new(gchar *, multi_num + 1); + multi_data.num = 0; + multi_data.max = multi_num; + + multi_num = 0; + + /* Get values list of items enabled */ + gtk_tree_model_foreach(treemodel, extcap_gtk_fill_multi_list, + &multi_data); + + multi_data.list[multi_data.max] = NULL; + + call_string = g_strjoinv(",", multi_data.list); + + g_strfreev(multi_data.list); + } + else + { + /* There are no enabled items. Skip this argument from command line. */ + continue; + } + + break; + default: + break; + } + + if (parsed_complex == NULL && call_string == NULL) + continue; + + /* Comparing if the user has changed the value at all, and ignoring it if so */ + if (extcap_compare_is_default(arg, parsed_complex)) + continue; + + /* Flags are set as is, and have not true/false switch */ + if ((arg->arg_type == EXTCAP_ARG_BOOLFLAG) + && (extcap_complex_get_bool(parsed_complex) == TRUE)) { + call_string = g_strdup(" "); + } + + if (parsed_complex != NULL && call_string == NULL) + call_string = extcap_get_complex_as_string(parsed_complex); + + g_hash_table_insert(ret_hash, g_strdup(arg->call), + g_strdup(call_string)); + + g_free(call_string); + call_string = NULL; + + g_free(parsed_complex); + parsed_complex = NULL; + } + + return ret_hash; } static void extcap_gtk_treeview_vscroll_map_handler(GtkTreeView *treeView, - gpointer data) { - GtkWidget *padBox = (GtkWidget*) data; - gint x, y; + gpointer data) { + GtkWidget *padBox = (GtkWidget*) data; + gint x, y; - g_assert(GTK_IS_BOX(padBox)); + g_assert(GTK_IS_BOX(padBox)); - /* Set the padding above the scrollbar to the height of the tree header window */ - gtk_tree_view_convert_bin_window_to_widget_coords(GTK_TREE_VIEW(treeView), - 0, 0, &x, &y); - gtk_widget_set_size_request(padBox, -1, y); + /* Set the padding above the scrollbar to the height of the tree header window */ + gtk_tree_view_convert_bin_window_to_widget_coords(GTK_TREE_VIEW(treeView), + 0, 0, &x, &y); + gtk_widget_set_size_request(padBox, -1, y); } static GtkWidget *extcap_gtk_wrap_scroll_treeview(GtkWidget *view) { - GtkWidget *vscroll, *padbox, *hbox, *vbox; - GtkAdjustment *padj; + GtkWidget *vscroll, *padbox, *hbox, *vbox; + GtkAdjustment *padj; #if GTK_CHECK_VERSION(3, 0, 0) - padj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(view)); + padj = gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(view)); #if GTK_CHECK_VERSION(3, 2, 0) - vscroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, padj); + vscroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, padj); #else - vscroll = gtk_vscrollbar_new(padj); + vscroll = gtk_vscrollbar_new(padj); #endif #else - padj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(view)); - vscroll = gtk_vscrollbar_new(padj); + padj = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(view)); + vscroll = gtk_vscrollbar_new(padj); #endif - hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE); + hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE); - /* First insert the tree view */ - gtk_box_pack_start(GTK_BOX(hbox), view, TRUE, TRUE, 0); - gtk_widget_show(view); + /* First insert the tree view */ + gtk_box_pack_start(GTK_BOX(hbox), view, TRUE, TRUE, 0); + gtk_widget_show(view); - /* Pack to the right a vbox containing a box for padding at top and scrollbar */ - vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE); - gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); - gtk_widget_show(vbox); + /* Pack to the right a vbox containing a box for padding at top and scrollbar */ + vbox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE); + gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0); + gtk_widget_show(vbox); - padbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE); - gtk_box_pack_start(GTK_BOX(vbox), padbox, FALSE, FALSE, 0); - gtk_widget_show(padbox); + padbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), padbox, FALSE, FALSE, 0); + gtk_widget_show(padbox); - gtk_box_pack_start(GTK_BOX(vbox), vscroll, TRUE, TRUE, 0); - gtk_widget_show(vscroll); + gtk_box_pack_start(GTK_BOX(vbox), vscroll, TRUE, TRUE, 0); + gtk_widget_show(vscroll); - g_object_set_data(G_OBJECT(hbox), EXTCAP_GTK_DATA_KEY_TREEVIEW, view); + g_object_set_data(G_OBJECT(hbox), EXTCAP_GTK_DATA_KEY_TREEVIEW, view); - g_signal_connect(view, "map", - G_CALLBACK(extcap_gtk_treeview_vscroll_map_handler), padbox); + g_signal_connect(view, "map", + G_CALLBACK(extcap_gtk_treeview_vscroll_map_handler), padbox); - return hbox; + return hbox; } GtkWidget *extcap_create_gtk_listwidget(extcap_arg *argument, - GHashTable *prev_map) { - GtkCellRenderer *renderer; - GtkTreeModel *model; - GtkWidget *view, *retview; - GtkListStore *store; - GtkTreeIter iter; - GtkTreeSelection *selection; - extcap_value *v = NULL; - GList * walker = NULL; - gchar *prev_item = NULL; + GHashTable *prev_map) { + GtkCellRenderer *renderer; + GtkTreeModel *model; + GtkWidget *view, *retview; + GtkListStore *store; + GtkTreeIter iter; + GtkTreeSelection *selection; + extcap_value *v = NULL; + GList * walker = NULL; + gchar *prev_item = NULL; - if (g_list_length(argument->values) == 0) - return NULL ; + if (g_list_length(argument->values) == 0) + return NULL ; - view = gtk_tree_view_new(); + view = gtk_tree_view_new(); - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); - store = gtk_list_store_new(EXTCAP_GTK_NUM_COLS, G_TYPE_STRING, - G_TYPE_POINTER); + store = gtk_list_store_new(EXTCAP_GTK_NUM_COLS, G_TYPE_STRING, + G_TYPE_POINTER); - model = GTK_TREE_MODEL(store); - gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + model = GTK_TREE_MODEL(store); + gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); - if (prev_map != NULL) - prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); + if (prev_map != NULL) + prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); - for (walker = g_list_first(argument->values); walker != NULL ; walker = - walker->next) { - v = (extcap_value *) walker->data; - if (v->display == NULL) - break; + for (walker = g_list_first(argument->values); walker != NULL ; walker = + walker->next) { + v = (extcap_value *) walker->data; + if (v->display == NULL) + break; - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, EXTCAP_GTK_COL_DISPLAY, v->display, - EXTCAP_GTK_COL_VALUE, v, -1); + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, EXTCAP_GTK_COL_DISPLAY, v->display, + EXTCAP_GTK_COL_VALUE, v, -1); - if (prev_item != NULL) { - if (g_ascii_strcasecmp(prev_item, v->call) == 0) { - gtk_tree_selection_select_iter(selection, &iter); - } - } else if (v->is_default) { - gtk_tree_selection_select_iter(selection, &iter); - } - } + if (prev_item != NULL) { + if (g_ascii_strcasecmp(prev_item, v->call) == 0) { + gtk_tree_selection_select_iter(selection, &iter); + } + } else if (v->is_default) { + gtk_tree_selection_select_iter(selection, &iter); + } + } - renderer = gtk_cell_renderer_text_new(); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name", - renderer, "text", EXTCAP_GTK_COL_DISPLAY, NULL); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name", + renderer, "text", EXTCAP_GTK_COL_DISPLAY, NULL); - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); - retview = extcap_gtk_wrap_scroll_treeview(view); + retview = extcap_gtk_wrap_scroll_treeview(view); - if (gtk_tree_model_iter_n_children(model, NULL) > 3) - gtk_widget_set_size_request(retview, 0, 100); + if (gtk_tree_model_iter_n_children(model, NULL) > 3) + gtk_widget_set_size_request(retview, 0, 100); - /* Tree view has own reference */ - g_object_unref(model); + /* Tree view has own reference */ + g_object_unref(model); - return retview; + return retview; } GtkWidget *extcap_create_gtk_radiowidget(extcap_arg *argument, - GHashTable *prev_map) { - GtkWidget *radiobox = NULL, *last_radio = NULL; - extcap_value *v = NULL; - GList * walker = NULL; - gchar *prev_item = NULL; - - if (g_list_length(argument->values) == 0) - return NULL ; - - if (prev_map != NULL) - prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); - - radiobox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 1, FALSE); - - for (walker = g_list_first(argument->values); walker != NULL ; walker = - walker->next) { - v = (extcap_value *) walker->data; - - if (last_radio == NULL) { - last_radio = gtk_radio_button_new_with_label(NULL, v->display); - /* Set a pointer to the first radio button */ - g_object_set_data(G_OBJECT(radiobox), - EXTCAP_GTK_DATA_KEY_FIRSTRADIO, last_radio); - } else { - last_radio = gtk_radio_button_new_with_label_from_widget( - GTK_RADIO_BUTTON(last_radio), v->display); - } - - /* Set a pointer to the value used in this radio */ - g_object_set_data(G_OBJECT(last_radio), EXTCAP_GTK_DATA_KEY_VALPTR, v); - - if (prev_item != NULL) { - if (g_ascii_strcasecmp(prev_item, v->call) == 0) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), - TRUE); - } - } else if (v->is_default) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), TRUE); - } - - gtk_box_pack_start(GTK_BOX(radiobox), last_radio, TRUE, TRUE, 0); - gtk_widget_show(last_radio); - } - - return radiobox; + GHashTable *prev_map) { + GtkWidget *radiobox = NULL, *last_radio = NULL; + extcap_value *v = NULL; + GList * walker = NULL; + gchar *prev_item = NULL; + + if (g_list_length(argument->values) == 0) + return NULL ; + + if (prev_map != NULL) + prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); + + radiobox = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 1, FALSE); + + for (walker = g_list_first(argument->values); walker != NULL ; walker = + walker->next) { + v = (extcap_value *) walker->data; + + if (last_radio == NULL) { + last_radio = gtk_radio_button_new_with_label(NULL, v->display); + /* Set a pointer to the first radio button */ + g_object_set_data(G_OBJECT(radiobox), + EXTCAP_GTK_DATA_KEY_FIRSTRADIO, last_radio); + } else { + last_radio = gtk_radio_button_new_with_label_from_widget( + GTK_RADIO_BUTTON(last_radio), v->display); + } + + /* Set a pointer to the value used in this radio */ + g_object_set_data(G_OBJECT(last_radio), EXTCAP_GTK_DATA_KEY_VALPTR, v); + + if (prev_item != NULL) { + if (g_ascii_strcasecmp(prev_item, v->call) == 0) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), + TRUE); + } + } else if (v->is_default) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(last_radio), TRUE); + } + + gtk_box_pack_start(GTK_BOX(radiobox), last_radio, TRUE, TRUE, 0); + gtk_widget_show(last_radio); + } + + return radiobox; } static void extcap_gtk_multicheck_toggled(GtkCellRendererToggle *cell _U_, - gchar *path_str, gpointer data) { - GtkTreeModel *model = (GtkTreeModel *) data; - GtkTreeIter iter; - GtkTreePath *path = gtk_tree_path_new_from_string(path_str); - gboolean enabled; + gchar *path_str, gpointer data) { + GtkTreeModel *model = (GtkTreeModel *) data; + GtkTreeIter iter; + GtkTreePath *path = gtk_tree_path_new_from_string(path_str); + gboolean enabled; - gtk_tree_model_get_iter(model, &iter, path); - gtk_tree_model_get(model, &iter, EXTCAP_GTK_MULTI_COL_CHECK, &enabled, -1); + gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get(model, &iter, EXTCAP_GTK_MULTI_COL_CHECK, &enabled, -1); - enabled ^= 1; + enabled ^= 1; - gtk_tree_store_set(GTK_TREE_STORE(model), &iter, EXTCAP_GTK_MULTI_COL_CHECK, - enabled, -1); + gtk_tree_store_set(GTK_TREE_STORE(model), &iter, EXTCAP_GTK_MULTI_COL_CHECK, + enabled, -1); - gtk_tree_path_free(path); + gtk_tree_path_free(path); } GtkWidget *extcap_create_gtk_rangewidget(extcap_arg *argument, - GHashTable *prev_map _U_) { - GtkWidget *spinButton; - GtkAdjustment *adjustment; - - gfloat def = 0.0f, min = 0.0f, max = 0.0f; - - switch (argument->arg_type) { - case EXTCAP_ARG_INTEGER: - def = (gfloat) extcap_complex_get_int(argument->default_complex); - min = (gfloat) extcap_complex_get_int(argument->range_start); - max = (gfloat) extcap_complex_get_int(argument->range_end); - break; - case EXTCAP_ARG_UNSIGNED: - def = (gfloat) extcap_complex_get_uint(argument->default_complex); - min = (gfloat) extcap_complex_get_uint(argument->range_start); - max = (gfloat) extcap_complex_get_uint(argument->range_end); - break; - case EXTCAP_ARG_LONG: - def = (gfloat) extcap_complex_get_long(argument->default_complex); - min = (gfloat) extcap_complex_get_long(argument->range_start); - max = (gfloat) extcap_complex_get_long(argument->range_end); - break; - case EXTCAP_ARG_DOUBLE: - def = (gfloat) extcap_complex_get_double(argument->default_complex); - min = (gfloat) extcap_complex_get_double(argument->range_start); - max = (gfloat) extcap_complex_get_double(argument->range_end); - break; - default: - return NULL ; - break; - } - - adjustment = (GtkAdjustment *)gtk_adjustment_new(def, min, max, 1.0, 10.0, 0.0); - - spinButton = gtk_spin_button_new(adjustment, 0, 0); - gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinButton), TRUE); - gtk_widget_set_size_request(spinButton, 80, -1); - - return spinButton; + GHashTable *prev_map _U_) { + GtkWidget *spinButton; + GtkAdjustment *adjustment; + + gfloat def = 0.0f, min = 0.0f, max = 0.0f; + + switch (argument->arg_type) { + case EXTCAP_ARG_INTEGER: + def = (gfloat) extcap_complex_get_int(argument->default_complex); + min = (gfloat) extcap_complex_get_int(argument->range_start); + max = (gfloat) extcap_complex_get_int(argument->range_end); + break; + case EXTCAP_ARG_UNSIGNED: + def = (gfloat) extcap_complex_get_uint(argument->default_complex); + min = (gfloat) extcap_complex_get_uint(argument->range_start); + max = (gfloat) extcap_complex_get_uint(argument->range_end); + break; + case EXTCAP_ARG_LONG: + def = (gfloat) extcap_complex_get_long(argument->default_complex); + min = (gfloat) extcap_complex_get_long(argument->range_start); + max = (gfloat) extcap_complex_get_long(argument->range_end); + break; + case EXTCAP_ARG_DOUBLE: + def = (gfloat) extcap_complex_get_double(argument->default_complex); + min = (gfloat) extcap_complex_get_double(argument->range_start); + max = (gfloat) extcap_complex_get_double(argument->range_end); + break; + default: + return NULL ; + break; + } + + adjustment = (GtkAdjustment *)gtk_adjustment_new(def, min, max, 1.0, 10.0, 0.0); + + spinButton = gtk_spin_button_new(adjustment, 0, 0); + gtk_spin_button_set_wrap(GTK_SPIN_BUTTON(spinButton), TRUE); + gtk_widget_set_size_request(spinButton, 80, -1); + + return spinButton; } static void extcap_file_selectiondialog( GtkWidget *widget _U_, gpointer data ) { - GtkWidget * filechooser = NULL; - GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE; - gchar *filename = NULL; - gint res = 0; - extcap_arg *argument = NULL; + GtkWidget * filechooser = NULL; + GtkFileChooserAction action = GTK_FILE_CHOOSER_ACTION_SAVE; + gchar *filename = NULL; + gint res = 0; + extcap_arg *argument = NULL; - if ( GTK_ENTRY(data) == NULL ) - return; + if ( GTK_ENTRY(data) == NULL ) + return; - argument = (extcap_arg *)g_object_get_data(G_OBJECT(data), EXTCAP_GTK_DATA_KEY_ARGUMENT); - if ( argument != NULL && argument->fileexists == TRUE ) - action = GTK_FILE_CHOOSER_ACTION_OPEN; + argument = (extcap_arg *)g_object_get_data(G_OBJECT(data), EXTCAP_GTK_DATA_KEY_ARGUMENT); + if ( argument != NULL && argument->fileexists == TRUE ) + action = GTK_FILE_CHOOSER_ACTION_OPEN; - filechooser = gtk_file_chooser_dialog_new("Select file path", NULL, action, - "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL); + filechooser = gtk_file_chooser_dialog_new("Select file path", NULL, action, + "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL); - res = gtk_dialog_run (GTK_DIALOG (filechooser)); - if (res == GTK_RESPONSE_ACCEPT) - { - GtkFileChooser *chooser = GTK_FILE_CHOOSER (filechooser); - filename = gtk_file_chooser_get_filename (chooser); + res = gtk_dialog_run (GTK_DIALOG (filechooser)); + if (res == GTK_RESPONSE_ACCEPT) + { + GtkFileChooser *chooser = GTK_FILE_CHOOSER (filechooser); + filename = gtk_file_chooser_get_filename (chooser); - /* this check might not be necessary, but just to be on the safe side */ - if ( action == GTK_FILE_CHOOSER_ACTION_OPEN && ! file_exists ( filename ) ) - filename = g_strdup ( " " ); + /* this check might not be necessary, but just to be on the safe side */ + if ( action == GTK_FILE_CHOOSER_ACTION_OPEN && ! file_exists ( filename ) ) + filename = g_strdup ( " " ); - gtk_entry_set_text(GTK_ENTRY(data), filename); - } + gtk_entry_set_text(GTK_ENTRY(data), filename); + } - gtk_widget_destroy (filechooser); + gtk_widget_destroy (filechooser); } static GtkWidget *extcap_create_gtk_fileselect(extcap_arg *argument, - GHashTable *prev_map _U_, gchar * file _U_) { - GtkWidget * entry = NULL; - GtkWidget * button = NULL; - GtkWidget * ret_box = NULL; - - button = gtk_button_new_with_label ("..."); - entry = gtk_entry_new(); - if (file != NULL) - gtk_entry_set_text(GTK_ENTRY(entry), file); - gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE); - g_object_set_data(G_OBJECT(entry), EXTCAP_GTK_DATA_KEY_ARGUMENT, argument); + GHashTable *prev_map _U_, gchar * file _U_) { + GtkWidget * entry = NULL; + GtkWidget * button = NULL; + GtkWidget * ret_box = NULL; + + button = gtk_button_new_with_label ("..."); + entry = gtk_entry_new(); + if (file != NULL) + gtk_entry_set_text(GTK_ENTRY(entry), file); + gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE); + g_object_set_data(G_OBJECT(entry), EXTCAP_GTK_DATA_KEY_ARGUMENT, argument); #if GTK_CHECK_VERSION(3, 0, 0) - ret_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); + ret_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3); #else - ret_box = gtk_hbox_new(FALSE, 3); + ret_box = gtk_hbox_new(FALSE, 3); #endif - gtk_box_pack_start ( GTK_BOX(ret_box), entry, TRUE, TRUE, 5 ); - gtk_widget_show(entry); - gtk_box_pack_end ( GTK_BOX(ret_box), button, FALSE, FALSE, 5 ); - gtk_widget_show(button); + gtk_box_pack_start ( GTK_BOX(ret_box), entry, TRUE, TRUE, 5 ); + gtk_widget_show(entry); + gtk_box_pack_end ( GTK_BOX(ret_box), button, FALSE, FALSE, 5 ); + gtk_widget_show(button); - g_signal_connect (button, "clicked", - G_CALLBACK (extcap_file_selectiondialog), (gpointer) entry); + g_signal_connect (button, "clicked", + G_CALLBACK (extcap_file_selectiondialog), (gpointer) entry); - g_object_set_data(G_OBJECT(ret_box), EXTCAP_GTK_DATA_KEY_FILENAME, entry); + g_object_set_data(G_OBJECT(ret_box), EXTCAP_GTK_DATA_KEY_FILENAME, entry); - return ret_box; + return ret_box; } GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument, - GHashTable *prev_map) { - GtkCellRenderer *renderer, *togglerenderer; - GtkTreeModel *model; - GtkWidget *view, *retview; - GtkTreeStore *store; - GtkTreeIter iter; - GtkTreeSelection *selection; - extcap_value *v = NULL; - GList * walker = NULL; - gchar *prev_item = NULL; - gchar **prev_list = NULL, **prev_iter = NULL; - gboolean prev_value, prev_matched; - extcap_gtk_multi_find_cb_data find_data; - - if (g_list_length(argument->values) == 0) - return NULL ; - - view = gtk_tree_view_new(); - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); - - store = gtk_tree_store_new(EXTCAP_GTK_MULTI_NUM_COLS, G_TYPE_BOOLEAN, - G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN); - - model = GTK_TREE_MODEL(store); - gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE); - - if (prev_map != NULL) - prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); - - if (prev_item != NULL) - prev_list = g_strsplit(prev_item, ",", 0); - - for (walker = g_list_first(argument->values); walker != NULL ; walker = - walker->next) { - v = (extcap_value *) walker->data; - if (v->display == NULL) - break; - - find_data.parent = v->parent; - find_data.parent_iter = NULL; - - if (find_data.parent != NULL) - { - gtk_tree_model_foreach(model, extcap_gtk_find_parent_in_multi_list, - &find_data); - if (find_data.parent_iter == NULL) - { - g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, - "Extcap parent %s not found for value %s (%s)", - v->parent, v->call, argument->call); - } - } - - prev_value = FALSE; - prev_matched = FALSE; - gtk_tree_store_append(store, &iter, find_data.parent_iter); - - if (find_data.parent_iter != NULL) - { - gtk_tree_iter_free(find_data.parent_iter); - find_data.parent_iter = NULL; - } - - if (prev_list != NULL) { - prev_matched = FALSE; - prev_iter = prev_list; - - while (*prev_iter != NULL ) { - if (g_strcmp0(*prev_iter, v->call) == 0) { - prev_matched = TRUE; - prev_value = TRUE; - break; - } - - prev_iter++; - } - - if (prev_matched == FALSE) - prev_value = v->enabled; - } - else - { - /* Use default value if there is no information about previously selected items. */ - prev_value = v->is_default; - } - - - /* v->is_default is set when there was {default=true} for this value. */ - /* v->enabled is false for non-clickable tree items ({enabled=false}). */ - gtk_tree_store_set(store, &iter, EXTCAP_GTK_MULTI_COL_CHECK, prev_value, - EXTCAP_GTK_MULTI_COL_DISPLAY, v->display, - EXTCAP_GTK_MULTI_COL_VALUE, v, - EXTCAP_GTK_MULTI_COL_ACTIVATABLE, v->enabled, -1); - } - - if (prev_list != NULL) - g_strfreev(prev_list); - - renderer = gtk_cell_renderer_text_new(); - togglerenderer = gtk_cell_renderer_toggle_new(); - g_signal_connect(togglerenderer, "toggled", - G_CALLBACK(extcap_gtk_multicheck_toggled), model); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, - "Enabled", togglerenderer, "active", EXTCAP_GTK_MULTI_COL_CHECK, - "activatable", EXTCAP_GTK_MULTI_COL_ACTIVATABLE, - "visible", EXTCAP_GTK_MULTI_COL_ACTIVATABLE, - NULL); - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name", - renderer, "text", EXTCAP_GTK_MULTI_COL_DISPLAY, - NULL); - - gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); - - retview = extcap_gtk_wrap_scroll_treeview(view); - - if (gtk_tree_model_iter_n_children(model, NULL) > 3) - gtk_widget_set_size_request(retview, 0, 100); - - /* Tree view has own reference */ - g_object_unref(model); - - return retview; + GHashTable *prev_map) { + GtkCellRenderer *renderer, *togglerenderer; + GtkTreeModel *model; + GtkWidget *view, *retview; + GtkTreeStore *store; + GtkTreeIter iter; + GtkTreeSelection *selection; + extcap_value *v = NULL; + GList * walker = NULL; + gchar *prev_item = NULL; + gchar **prev_list = NULL, **prev_iter = NULL; + gboolean prev_value, prev_matched; + extcap_gtk_multi_find_cb_data find_data; + + if (g_list_length(argument->values) == 0) + return NULL ; + + view = gtk_tree_view_new(); + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); + + store = gtk_tree_store_new(EXTCAP_GTK_MULTI_NUM_COLS, G_TYPE_BOOLEAN, + G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN); + + model = GTK_TREE_MODEL(store); + gtk_tree_view_set_model(GTK_TREE_VIEW(view), model); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_NONE); + + if (prev_map != NULL) + prev_item = (gchar *) g_hash_table_lookup(prev_map, argument->call); + + if (prev_item != NULL) + prev_list = g_strsplit(prev_item, ",", 0); + + for (walker = g_list_first(argument->values); walker != NULL ; walker = + walker->next) { + v = (extcap_value *) walker->data; + if (v->display == NULL) + break; + + find_data.parent = v->parent; + find_data.parent_iter = NULL; + + if (find_data.parent != NULL) + { + gtk_tree_model_foreach(model, extcap_gtk_find_parent_in_multi_list, + &find_data); + if (find_data.parent_iter == NULL) + { + g_log(LOG_DOMAIN_CAPTURE, G_LOG_LEVEL_DEBUG, + "Extcap parent %s not found for value %s (%s)", + v->parent, v->call, argument->call); + } + } + + prev_value = FALSE; + prev_matched = FALSE; + gtk_tree_store_append(store, &iter, find_data.parent_iter); + + if (find_data.parent_iter != NULL) + { + gtk_tree_iter_free(find_data.parent_iter); + find_data.parent_iter = NULL; + } + + if (prev_list != NULL) { + prev_matched = FALSE; + prev_iter = prev_list; + + while (*prev_iter != NULL ) { + if (g_strcmp0(*prev_iter, v->call) == 0) { + prev_matched = TRUE; + prev_value = TRUE; + break; + } + + prev_iter++; + } + + if (prev_matched == FALSE) + prev_value = v->enabled; + } + else + { + /* Use default value if there is no information about previously selected items. */ + prev_value = v->is_default; + } + + + /* v->is_default is set when there was {default=true} for this value. */ + /* v->enabled is false for non-clickable tree items ({enabled=false}). */ + gtk_tree_store_set(store, &iter, EXTCAP_GTK_MULTI_COL_CHECK, prev_value, + EXTCAP_GTK_MULTI_COL_DISPLAY, v->display, + EXTCAP_GTK_MULTI_COL_VALUE, v, + EXTCAP_GTK_MULTI_COL_ACTIVATABLE, v->enabled, -1); + } + + if (prev_list != NULL) + g_strfreev(prev_list); + + renderer = gtk_cell_renderer_text_new(); + togglerenderer = gtk_cell_renderer_toggle_new(); + g_signal_connect(togglerenderer, "toggled", + G_CALLBACK(extcap_gtk_multicheck_toggled), model); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, + "Enabled", togglerenderer, "active", EXTCAP_GTK_MULTI_COL_CHECK, + "activatable", EXTCAP_GTK_MULTI_COL_ACTIVATABLE, + "visible", EXTCAP_GTK_MULTI_COL_ACTIVATABLE, + NULL); + gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, "Name", + renderer, "text", EXTCAP_GTK_MULTI_COL_DISPLAY, + NULL); + + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(view), FALSE); + + retview = extcap_gtk_wrap_scroll_treeview(view); + + if (gtk_tree_model_iter_n_children(model, NULL) > 3) + gtk_widget_set_size_request(retview, 0, 100); + + /* Tree view has own reference */ + g_object_unref(model); + + return retview; } void extcap_gtk_free_args(GtkWidget *vbox) { - GList *arguments = (GList *) g_object_get_data(G_OBJECT(vbox), - EXTCAP_GTK_DATA_KEY_ARGPTR); - extcap_free_arg_list(arguments); - g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, NULL); + GList *arguments = (GList *) g_object_get_data(G_OBJECT(vbox), + EXTCAP_GTK_DATA_KEY_ARGPTR); + extcap_free_arg_list(arguments); + g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, NULL); } GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox, - GHashTable *prev_map) { - GSList *widget_toplist = NULL; - - extcap_arg *arg_iter = NULL; - - extcap_complex *prev_complex = NULL; - gchar *prev_call, *default_str; - - GList * arg_list = g_list_first(arguments); - if ( arg_list == NULL ) - return NULL; - - g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, arguments); - - while (arg_list != NULL ) { - GtkWidget *hbox = NULL, *label = NULL, *item = NULL; - - arg_iter = (extcap_arg*) (arg_list->data); - - /* A new storage box for label + element */ - - hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5, FALSE); - - if (prev_map != NULL - && (prev_call = (gchar *) g_hash_table_lookup(prev_map, - arg_iter->call)) != NULL) { - prev_complex = extcap_parse_complex(arg_iter->arg_type, prev_call); - } else { - prev_complex = NULL; - } - - switch (arg_iter->arg_type) { - case EXTCAP_ARG_INTEGER: - case EXTCAP_ARG_UNSIGNED: - case EXTCAP_ARG_LONG: - case EXTCAP_ARG_DOUBLE: - label = gtk_label_new(arg_iter->display); - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); - item = extcap_create_gtk_rangewidget(arg_iter, prev_map); - if (item == NULL) { - item = gtk_entry_new(); - - if (prev_complex != NULL) { - default_str = extcap_get_complex_as_string(prev_complex); - gtk_entry_set_text(GTK_ENTRY(item), default_str); - g_free(default_str); - } else if (arg_iter->default_complex != NULL) { - default_str = extcap_get_complex_as_string( - arg_iter->default_complex); - gtk_entry_set_text(GTK_ENTRY(item), default_str); - g_free(default_str); - } - } - break; - case EXTCAP_ARG_STRING: - label = gtk_label_new(arg_iter->display); - - item = gtk_entry_new(); - default_str = NULL; - - if (prev_complex != NULL) - default_str = extcap_get_complex_as_string(prev_complex); - else if (arg_iter->default_complex != NULL) - default_str = extcap_get_complex_as_string( - arg_iter->default_complex); - - if (default_str != NULL) { - gtk_entry_set_text(GTK_ENTRY(item), default_str); - g_free(default_str); - } - - break; - case EXTCAP_ARG_FILESELECT: - label = gtk_label_new(arg_iter->display); - default_str = NULL; - - if (prev_complex != NULL) - default_str = extcap_get_complex_as_string(prev_complex); - else if (arg_iter->default_complex != NULL) - default_str = extcap_get_complex_as_string( - arg_iter->default_complex); - - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); - item = extcap_create_gtk_fileselect(arg_iter, prev_map, default_str); - if (default_str != NULL) - g_free(default_str); - break; - case EXTCAP_ARG_BOOLEAN: - case EXTCAP_ARG_BOOLFLAG: - item = gtk_check_button_new_with_label(arg_iter->display); - - if (prev_complex != NULL) { - if (extcap_complex_get_bool(prev_complex)) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE); - } else if (arg_iter->default_complex != NULL - && extcap_complex_get_bool(arg_iter->default_complex)) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE); - } - - break; - case EXTCAP_ARG_MENU: - break; - case EXTCAP_ARG_RADIO: - label = gtk_label_new(arg_iter->display); - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); - item = extcap_create_gtk_radiowidget(arg_iter, prev_map); - break; - case EXTCAP_ARG_SELECTOR: - label = gtk_label_new(arg_iter->display); - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); - item = extcap_create_gtk_listwidget(arg_iter, prev_map); - break; - case EXTCAP_ARG_MULTICHECK: - label = gtk_label_new(arg_iter->display); - gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); - item = extcap_create_gtk_multicheckwidget(arg_iter, prev_map); - break; - default: - break; - } - - if (prev_complex != NULL) - extcap_free_complex(prev_complex); - - if (label != NULL) { - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); - gtk_widget_show(label); - } - - if (item != NULL) { - gtk_box_pack_start(GTK_BOX(hbox), item, TRUE, TRUE, 0); - gtk_widget_show(item); - g_object_set_data(G_OBJECT(item), EXTCAP_GTK_DATA_KEY_ARGPTR, - arg_iter); - - if (arg_iter->tooltip != NULL) { - gtk_widget_set_tooltip_text(item, arg_iter->tooltip); - } - - widget_toplist = g_slist_append(widget_toplist, item); - } - - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1); - - gtk_widget_show(hbox); - - arg_list = arg_list->next; - } - - return widget_toplist; + GHashTable *prev_map) { + GSList *widget_toplist = NULL; + + extcap_arg *arg_iter = NULL; + + extcap_complex *prev_complex = NULL; + gchar *prev_call, *default_str; + + GList * arg_list = g_list_first(arguments); + if ( arg_list == NULL ) + return NULL; + + g_object_set_data(G_OBJECT(vbox), EXTCAP_GTK_DATA_KEY_ARGPTR, arguments); + + while (arg_list != NULL ) { + GtkWidget *hbox = NULL, *label = NULL, *item = NULL; + + arg_iter = (extcap_arg*) (arg_list->data); + + /* A new storage box for label + element */ + + hbox = ws_gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5, FALSE); + + if (prev_map != NULL + && (prev_call = (gchar *) g_hash_table_lookup(prev_map, + arg_iter->call)) != NULL) { + prev_complex = extcap_parse_complex(arg_iter->arg_type, prev_call); + } else { + prev_complex = NULL; + } + + switch (arg_iter->arg_type) { + case EXTCAP_ARG_INTEGER: + case EXTCAP_ARG_UNSIGNED: + case EXTCAP_ARG_LONG: + case EXTCAP_ARG_DOUBLE: + label = gtk_label_new(arg_iter->display); + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); + item = extcap_create_gtk_rangewidget(arg_iter, prev_map); + if (item == NULL) { + item = gtk_entry_new(); + + if (prev_complex != NULL) { + default_str = extcap_get_complex_as_string(prev_complex); + gtk_entry_set_text(GTK_ENTRY(item), default_str); + g_free(default_str); + } else if (arg_iter->default_complex != NULL) { + default_str = extcap_get_complex_as_string( + arg_iter->default_complex); + gtk_entry_set_text(GTK_ENTRY(item), default_str); + g_free(default_str); + } + } + break; + case EXTCAP_ARG_STRING: + label = gtk_label_new(arg_iter->display); + + item = gtk_entry_new(); + default_str = NULL; + + if (prev_complex != NULL) + default_str = extcap_get_complex_as_string(prev_complex); + else if (arg_iter->default_complex != NULL) + default_str = extcap_get_complex_as_string( + arg_iter->default_complex); + + if (default_str != NULL) { + gtk_entry_set_text(GTK_ENTRY(item), default_str); + g_free(default_str); + } + + break; + case EXTCAP_ARG_FILESELECT: + label = gtk_label_new(arg_iter->display); + default_str = NULL; + + if (prev_complex != NULL) + default_str = extcap_get_complex_as_string(prev_complex); + else if (arg_iter->default_complex != NULL) + default_str = extcap_get_complex_as_string( + arg_iter->default_complex); + + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); + item = extcap_create_gtk_fileselect(arg_iter, prev_map, default_str); + if (default_str != NULL) + g_free(default_str); + break; + case EXTCAP_ARG_BOOLEAN: + case EXTCAP_ARG_BOOLFLAG: + item = gtk_check_button_new_with_label(arg_iter->display); + + if (prev_complex != NULL) { + if (extcap_complex_get_bool(prev_complex)) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE); + } else if (arg_iter->default_complex != NULL + && extcap_complex_get_bool(arg_iter->default_complex)) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(item), TRUE); + } + + break; + case EXTCAP_ARG_MENU: + break; + case EXTCAP_ARG_RADIO: + label = gtk_label_new(arg_iter->display); + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); + item = extcap_create_gtk_radiowidget(arg_iter, prev_map); + break; + case EXTCAP_ARG_SELECTOR: + label = gtk_label_new(arg_iter->display); + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); + item = extcap_create_gtk_listwidget(arg_iter, prev_map); + break; + case EXTCAP_ARG_MULTICHECK: + label = gtk_label_new(arg_iter->display); + gtk_misc_set_alignment(GTK_MISC(label), 0.0f, 0.1f); + item = extcap_create_gtk_multicheckwidget(arg_iter, prev_map); + break; + default: + break; + } + + if (prev_complex != NULL) + extcap_free_complex(prev_complex); + + if (label != NULL) { + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + } + + if (item != NULL) { + gtk_box_pack_start(GTK_BOX(hbox), item, TRUE, TRUE, 0); + gtk_widget_show(item); + g_object_set_data(G_OBJECT(item), EXTCAP_GTK_DATA_KEY_ARGPTR, + arg_iter); + + if (arg_iter->tooltip != NULL) { + gtk_widget_set_tooltip_text(item, arg_iter->tooltip); + } + + widget_toplist = g_slist_append(widget_toplist, item); + } + + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 1); + + gtk_widget_show(hbox); + + arg_list = arg_list->next; + } + + return widget_toplist; } /* @@ -901,10 +901,10 @@ GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox, * * Local variables: * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: t + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=4 tabstop=4 noexpandtab: - * :indentSize=4:tabSize=4:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ diff --git a/ui/gtk/extcap_gtk.h b/ui/gtk/extcap_gtk.h index eb49c545f7..614a76c787 100644 --- a/ui/gtk/extcap_gtk.h +++ b/ui/gtk/extcap_gtk.h @@ -34,66 +34,66 @@ * GObject data keys for linking argument records to the gtk * UI */ -#define EXTCAP_GTK_DATA_KEY_ARGPTR "EXTCAP_ARGPTR" -#define EXTCAP_GTK_DATA_KEY_VALPTR "EXTCAP_VALPTR" -#define EXTCAP_GTK_DATA_KEY_FIRSTRADIO "EXTCAP_FIRSTRADIO" -#define EXTCAP_GTK_DATA_KEY_WIDGETLIST "EXTCAP_WIDGETLIST" -#define EXTCAP_GTK_DATA_KEY_TREEVIEW "EXTCAP_TREEVIEW" -#define EXTCAP_GTK_DATA_KEY_FILENAME "EXTCAP_FILENAME" -#define EXTCAP_GTK_DATA_KEY_ARGUMENT "EXTCAP_ARGUMENT" +#define EXTCAP_GTK_DATA_KEY_ARGPTR "EXTCAP_ARGPTR" +#define EXTCAP_GTK_DATA_KEY_VALPTR "EXTCAP_VALPTR" +#define EXTCAP_GTK_DATA_KEY_FIRSTRADIO "EXTCAP_FIRSTRADIO" +#define EXTCAP_GTK_DATA_KEY_WIDGETLIST "EXTCAP_WIDGETLIST" +#define EXTCAP_GTK_DATA_KEY_TREEVIEW "EXTCAP_TREEVIEW" +#define EXTCAP_GTK_DATA_KEY_FILENAME "EXTCAP_FILENAME" +#define EXTCAP_GTK_DATA_KEY_ARGUMENT "EXTCAP_ARGUMENT" /* * GTK UI / EXTCAP Linkage: * * Packed vbox of widgets - * Contains EXTCAP_WIDGETLIST pointing to enclosed widget list + * Contains EXTCAP_WIDGETLIST pointing to enclosed widget list * * GSList gtk_ui_widgets - * Linked list of drawable widgets in the UI + * Linked list of drawable widgets in the UI * * GtkWidget contained in GSList - * Drawn GTK UI element. If UI element is directly linked - * to argument, will contain EXTCAP_ARGPTR. + * Drawn GTK UI element. If UI element is directly linked + * to argument, will contain EXTCAP_ARGPTR. * - * Top-level GTK widgets will include text boxes, sliders - * (if supported), and checkboxes. + * Top-level GTK widgets will include text boxes, sliders + * (if supported), and checkboxes. * - * If the top level widget contains radio buttons, it will - * contain an EXTCAP_ARGPTR *and* an EXTCAP_FIRSTRADIO + * If the top level widget contains radio buttons, it will + * contain an EXTCAP_ARGPTR *and* an EXTCAP_FIRSTRADIO * * Radio buttons - * Each radio button will contain an EXTCAP_VALPTR reference - * to the extcap_value * value being used. + * Each radio button will contain an EXTCAP_VALPTR reference + * to the extcap_value * value being used. * * Selectors - * Each selector row contains a pointer to the value, in the - * column COL_VALUE + * Each selector row contains a pointer to the value, in the + * column COL_VALUE * */ enum extcap_gtk_col_types { - EXTCAP_GTK_COL_DISPLAY = 0, EXTCAP_GTK_COL_VALUE = 1, EXTCAP_GTK_NUM_COLS + EXTCAP_GTK_COL_DISPLAY = 0, EXTCAP_GTK_COL_VALUE = 1, EXTCAP_GTK_NUM_COLS }; enum extcap_gtk_multi_col_types { - EXTCAP_GTK_MULTI_COL_CHECK = 0, - EXTCAP_GTK_MULTI_COL_DISPLAY = 1, - EXTCAP_GTK_MULTI_COL_VALUE = 2, - EXTCAP_GTK_MULTI_COL_ACTIVATABLE = 3, - EXTCAP_GTK_MULTI_NUM_COLS + EXTCAP_GTK_MULTI_COL_CHECK = 0, + EXTCAP_GTK_MULTI_COL_DISPLAY = 1, + EXTCAP_GTK_MULTI_COL_VALUE = 2, + EXTCAP_GTK_MULTI_COL_ACTIVATABLE = 3, + EXTCAP_GTK_MULTI_NUM_COLS }; /* Get a hash map of calls and values from the top widget */ GHashTable *extcap_gtk_get_state(GtkWidget *widget); GtkWidget *extcap_create_gtk_rangewidget(extcap_arg *argument, - GHashTable *prev_map); + GHashTable *prev_map); GtkWidget *extcap_create_gtk_listwidget(extcap_arg *argument, - GHashTable *prev_map); + GHashTable *prev_map); GtkWidget *extcap_create_gtk_radiowidget(extcap_arg *argument, - GHashTable *prev_map); + GHashTable *prev_map); GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument, - GHashTable *prev_map); + GHashTable *prev_map); /* * Populate a (pre-created) container widget based on an arguments record. @@ -102,7 +102,7 @@ GtkWidget *extcap_create_gtk_multicheckwidget(extcap_arg *argument, * repeatedly, for example */ GSList *extcap_populate_gtk_vbox(GList *arguments, GtkWidget *vbox, - GHashTable *prev_map); + GHashTable *prev_map); /* Free args associated with a GTK item */ void extcap_gtk_free_args(GtkWidget *vbox); @@ -114,10 +114,11 @@ void extcap_gtk_free_args(GtkWidget *vbox); * * Local variables: * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: t + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=4 tabstop=4 noexpandtab: - * :indentSize=4:tabSize=4:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ + diff --git a/ui/gtk/mcast_stream_dlg.c b/ui/gtk/mcast_stream_dlg.c index f13859fb90..7b1754ce17 100644 --- a/ui/gtk/mcast_stream_dlg.c +++ b/ui/gtk/mcast_stream_dlg.c @@ -69,13 +69,13 @@ static const gchar PAR_LABEL_TEXT[] = "\nBurst int: ms Burst alarm: pps Buf static GtkWidget *mcast_stream_dlg = NULL; static GtkWidget *mcast_params_dlg = NULL; -static GtkListStore *list_store = NULL; +static GtkListStore *list_store = NULL; static GtkTreeIter list_iter; -static GtkWidget *list_w = NULL; -static GtkWidget *top_label = NULL; -static GtkWidget *label_fwd = NULL; -static GtkWidget *label_par = NULL; -static GtkWidget *bt_filter = NULL; +static GtkWidget *list_w = NULL; +static GtkWidget *top_label = NULL; +static GtkWidget *label_fwd = NULL; +static GtkWidget *label_par = NULL; +static GtkWidget *bt_filter = NULL; static mcast_stream_info_t *selected_stream_fwd = NULL; /* current selection */ static GList *last_list = NULL; @@ -84,20 +84,20 @@ static guint32 streams_nb = 0; /* number of displayed streams */ enum { - MC_COL_SRC_ADDR, - MC_COL_SRC_PORT, - MC_COL_DST_ADDR, - MC_COL_DST_PORT, - MC_COL_PACKETS, - MC_COL_PPS, - MC_COL_AVG_BW, - MC_COL_MAX_BW, - MC_COL_MAX_BURST, - MC_COL_BURST_ALARM, - MC_COL_MAX_BUFFER, - MC_COL_BUFFER_ALARM, - MC_COL_DATA, - NUM_COLS /* The number of columns */ + MC_COL_SRC_ADDR, + MC_COL_SRC_PORT, + MC_COL_DST_ADDR, + MC_COL_DST_PORT, + MC_COL_PACKETS, + MC_COL_PPS, + MC_COL_AVG_BW, + MC_COL_MAX_BW, + MC_COL_MAX_BURST, + MC_COL_BURST_ALARM, + MC_COL_MAX_BUFFER, + MC_COL_BUFFER_ALARM, + MC_COL_DATA, + NUM_COLS /* The number of columns */ }; /****************************************************************************/ @@ -106,18 +106,18 @@ enum static void mcaststream_on_destroy(GObject *object _U_, gpointer user_data _U_) { - /* Remove the stream tap listener */ - remove_tap_listener_mcast_stream(); + /* Remove the stream tap listener */ + remove_tap_listener_mcast_stream(); - /* Is there a params window open? */ - if (mcast_params_dlg != NULL) - window_destroy(mcast_params_dlg); + /* Is there a params window open? */ + if (mcast_params_dlg != NULL) + window_destroy(mcast_params_dlg); - /* Clean up memory used by stream tap */ - mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info()); + /* Clean up memory used by stream tap */ + mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info()); - /* Note that we no longer have a "Mcast Streams" dialog box. */ - mcast_stream_dlg = NULL; + /* Note that we no longer have a "Mcast Streams" dialog box. */ + mcast_stream_dlg = NULL; } @@ -125,13 +125,13 @@ mcaststream_on_destroy(GObject *object _U_, gpointer user_data _U_) static void mcaststream_on_unselect(GtkButton *button _U_, gpointer user_data _U_) { - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_w)); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list_w)); - gtk_tree_selection_unselect_all(selection); + gtk_tree_selection_unselect_all(selection); - selected_stream_fwd = NULL; - gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); - gtk_widget_set_sensitive(bt_filter, FALSE); + selected_stream_fwd = NULL; + gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); + gtk_widget_set_sensitive(bt_filter, FALSE); } @@ -139,32 +139,32 @@ mcaststream_on_unselect(GtkButton *button _U_, gpointer user_data _U_) static void mcaststream_on_filter(GtkButton *button _U_, gpointer user_data _U_) { - gchar *filter_string_fwd; - gchar ip_version[3]; - - if (selected_stream_fwd == NULL) - return; - - if (selected_stream_fwd->src_addr.type == AT_IPv6) { - g_strlcpy(ip_version,"v6",sizeof(ip_version)); - } else { - ip_version[0] = '\0'; - } - filter_string_fwd = g_strdup_printf( - "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u)", - ip_version, - ep_address_to_str(&(selected_stream_fwd->src_addr)), - selected_stream_fwd->src_port, - ip_version, - ep_address_to_str(&(selected_stream_fwd->dest_addr)), - selected_stream_fwd->dest_port); - - gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string_fwd); - g_free(filter_string_fwd); + gchar *filter_string_fwd; + gchar ip_version[3]; + + if (selected_stream_fwd == NULL) + return; + + if (selected_stream_fwd->src_addr.type == AT_IPv6) { + g_strlcpy(ip_version,"v6",sizeof(ip_version)); + } else { + ip_version[0] = '\0'; + } + filter_string_fwd = g_strdup_printf( + "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u)", + ip_version, + ep_address_to_str(&(selected_stream_fwd->src_addr)), + selected_stream_fwd->src_port, + ip_version, + ep_address_to_str(&(selected_stream_fwd->dest_addr)), + selected_stream_fwd->dest_port); + + gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string_fwd); + g_free(filter_string_fwd); #if 0 - main_filter_packets(&cfile, filter_string, FALSE); - mcaststream_dlg_update(mcaststream_get_info()->strinfo_list); + main_filter_packets(&cfile, filter_string, FALSE); + mcaststream_dlg_update(mcaststream_get_info()->strinfo_list); #endif } @@ -173,24 +173,24 @@ mcaststream_on_filter(GtkButton *button _U_, gpointer user_data _U_) static void mcaststream_on_select_row(GtkTreeSelection *selection, gpointer data _U_) { - gchar label_text[80]; - - if (gtk_tree_selection_get_selected(selection, NULL, &list_iter)) - { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &list_iter, MC_COL_DATA, &selected_stream_fwd, -1); - g_snprintf(label_text, sizeof(label_text), "Selected: %s:%u -> %s:%u", - ep_address_to_display(&(selected_stream_fwd->src_addr)), - selected_stream_fwd->src_port, - ep_address_to_display(&(selected_stream_fwd->dest_addr)), - selected_stream_fwd->dest_port - ); - gtk_label_set_text(GTK_LABEL(label_fwd), label_text); - gtk_widget_set_sensitive(bt_filter, TRUE); - } else { - selected_stream_fwd = NULL; - gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); - gtk_widget_set_sensitive(bt_filter, FALSE); - } + gchar label_text[80]; + + if (gtk_tree_selection_get_selected(selection, NULL, &list_iter)) + { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &list_iter, MC_COL_DATA, &selected_stream_fwd, -1); + g_snprintf(label_text, sizeof(label_text), "Selected: %s:%u -> %s:%u", + ep_address_to_display(&(selected_stream_fwd->src_addr)), + selected_stream_fwd->src_port, + ep_address_to_display(&(selected_stream_fwd->dest_addr)), + selected_stream_fwd->dest_port + ); + gtk_label_set_text(GTK_LABEL(label_fwd), label_text); + gtk_widget_set_sensitive(bt_filter, TRUE); + } else { + selected_stream_fwd = NULL; + gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); + gtk_widget_set_sensitive(bt_filter, FALSE); + } } @@ -200,70 +200,70 @@ mcaststream_on_select_row(GtkTreeSelection *selection, gpointer data _U_) static void mcast_params_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) { - /* Note that we no longer have a mcast params dialog box. */ - mcast_params_dlg = NULL; + /* Note that we no longer have a mcast params dialog box. */ + mcast_params_dlg = NULL; } static void mcast_params_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) { - GtkWidget *fnumber_te; - const gchar *fnumber_text; - gint32 fnumber; - char *p; - - fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_1); - fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); - fnumber = (gint)strtol(fnumber_text, &p, 10); - if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 1000) ) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst interval should be between 1 and 1000 ms."); - return; - } - mcast_stream_burstint = fnumber; - - fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_2); - fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); - fnumber = (gint)strtol(fnumber_text, &p, 10); - if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst alarm threshold you entered isn't valid."); - return; - } - mcast_stream_trigger = fnumber; - - fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_3); - fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); - fnumber = (gint)strtol(fnumber_text, &p, 10); - if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The buffer alarm threshold you entered isn't valid."); - return; - } - mcast_stream_bufferalarm = fnumber; - - fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_4); - fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); - fnumber = (gint)strtol(fnumber_text, &p, 10); - if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The stream empty speed should be between 1 and 10000000"); - return; - } - mcast_stream_emptyspeed = fnumber; - - fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_5); - fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); - fnumber = (gint)strtol(fnumber_text, &p, 10); - if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The total empty speed should be between 1 and 10000000"); - return; - } - mcast_stream_cumulemptyspeed = fnumber; - - window_destroy(GTK_WIDGET(parent_w)); - - /* Clean up memory used by stream tap */ - mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info()); - /* retap all packets */ - cf_retap_packets(&cfile); + GtkWidget *fnumber_te; + const gchar *fnumber_text; + gint32 fnumber; + char *p; + + fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_1); + fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); + fnumber = (gint)strtol(fnumber_text, &p, 10); + if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 1000) ) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst interval should be between 1 and 1000 ms."); + return; + } + mcast_stream_burstint = fnumber; + + fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_2); + fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); + fnumber = (gint)strtol(fnumber_text, &p, 10); + if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The burst alarm threshold you entered isn't valid."); + return; + } + mcast_stream_trigger = fnumber; + + fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_3); + fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); + fnumber = (gint)strtol(fnumber_text, &p, 10); + if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) ) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The buffer alarm threshold you entered isn't valid."); + return; + } + mcast_stream_bufferalarm = fnumber; + + fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_4); + fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); + fnumber = (gint)strtol(fnumber_text, &p, 10); + if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The stream empty speed should be between 1 and 10000000"); + return; + } + mcast_stream_emptyspeed = fnumber; + + fnumber_te = (GtkWidget *)g_object_get_data(G_OBJECT(parent_w), E_MCAST_ENTRY_5); + fnumber_text = gtk_entry_get_text(GTK_ENTRY(fnumber_te)); + fnumber = (gint)strtol(fnumber_text, &p, 10); + if ( ((p == fnumber_text) || (*p != '\0')) || (fnumber <= 0) || (fnumber > 10000000) ) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "The total empty speed should be between 1 and 10000000"); + return; + } + mcast_stream_cumulemptyspeed = fnumber; + + window_destroy(GTK_WIDGET(parent_w)); + + /* Clean up memory used by stream tap */ + mcaststream_reset((mcaststream_tapinfo_t*)mcaststream_get_info()); + /* retap all packets */ + cf_retap_packets(&cfile); } @@ -271,90 +271,90 @@ mcast_params_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w) static void mcast_on_params(GtkButton *button _U_, gpointer data _U_) { - GtkWidget *main_vb; - GtkWidget *label, *hbuttonbox, *grid; - GtkWidget *ok_bt, *cancel_bt; - GtkWidget *entry1, *entry2, *entry3, *entry4, *entry5; - gchar label_text[51]; - - if (mcast_params_dlg != NULL) { - /* There's already a Params dialog box; reactivate it. */ - reactivate_window(mcast_params_dlg); - return; - } - - mcast_params_dlg = dlg_window_new("Wireshark: Set parameters for Multicast Stream Analysis"); - gtk_window_set_destroy_with_parent(GTK_WINDOW(mcast_params_dlg), TRUE); - gtk_window_set_default_size(GTK_WINDOW(mcast_params_dlg), 210, 210); - - gtk_widget_show(mcast_params_dlg); - - /* Container for each row of widgets */ - main_vb =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE); - gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2); - gtk_container_add(GTK_CONTAINER(mcast_params_dlg), main_vb); - gtk_widget_show(main_vb); - - grid = ws_gtk_grid_new(); - gtk_box_pack_start(GTK_BOX(main_vb), grid, TRUE, TRUE, 0); - label = gtk_label_new(" Burst measurement interval (ms) "); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 0, 1, 1); - entry1 = gtk_entry_new(); - g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_burstint); - gtk_entry_set_text(GTK_ENTRY(entry1), label_text); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry1, 1, 0, 1, 1); - label = gtk_label_new(" Burst alarm threshold (packets) "); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 1, 1, 1); - entry2 = gtk_entry_new(); - g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_trigger); - gtk_entry_set_text(GTK_ENTRY(entry2), label_text); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry2, 1, 1, 1, 1); - label = gtk_label_new(" Buffer alarm threshold (bytes) "); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 2, 1, 1); - entry3 = gtk_entry_new(); - g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_bufferalarm); - gtk_entry_set_text(GTK_ENTRY(entry3), label_text); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry3, 1, 2, 1, 1); - label = gtk_label_new(" Stream empty speed (kbit/s) "); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 3, 1, 1); - entry4 = gtk_entry_new(); - g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_emptyspeed); - gtk_entry_set_text(GTK_ENTRY(entry4), label_text); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry4, 1, 3, 1, 1); - label = gtk_label_new(" Total empty speed (kbit/s) "); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 4, 1, 1); - entry5 = gtk_entry_new(); - g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_cumulemptyspeed); - gtk_entry_set_text(GTK_ENTRY(entry5), label_text); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry5, 1, 4, 1, 1); - - gtk_widget_show (grid); - - /* button row */ - hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); - ws_gtk_grid_attach_defaults(GTK_GRID(grid), hbuttonbox, 0, 5, 2, 1); - ok_bt = ws_gtk_button_new_from_stock(GTK_STOCK_OK); - gtk_container_add (GTK_CONTAINER(hbuttonbox), ok_bt); - cancel_bt = ws_gtk_button_new_from_stock(GTK_STOCK_CANCEL); - gtk_container_add (GTK_CONTAINER(hbuttonbox), cancel_bt); - gtk_widget_set_can_default(cancel_bt, TRUE); - gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); - gtk_box_set_spacing(GTK_BOX(hbuttonbox), 0); - - g_signal_connect(mcast_params_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); - g_signal_connect(mcast_params_dlg, "destroy", G_CALLBACK(mcast_params_destroy_cb), NULL); - g_signal_connect(ok_bt, "clicked", G_CALLBACK(mcast_params_ok_cb), mcast_params_dlg); - window_set_cancel_button(mcast_params_dlg, cancel_bt, window_cancel_button_cb); - - /* Attach pointers to needed widgets */ - g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_1, entry1); - g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_2, entry2); - g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_3, entry3); - g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_4, entry4); - g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_5, entry5); - - gtk_widget_show_all(mcast_params_dlg); - window_present(mcast_params_dlg); + GtkWidget *main_vb; + GtkWidget *label, *hbuttonbox, *grid; + GtkWidget *ok_bt, *cancel_bt; + GtkWidget *entry1, *entry2, *entry3, *entry4, *entry5; + gchar label_text[51]; + + if (mcast_params_dlg != NULL) { + /* There's already a Params dialog box; reactivate it. */ + reactivate_window(mcast_params_dlg); + return; + } + + mcast_params_dlg = dlg_window_new("Wireshark: Set parameters for Multicast Stream Analysis"); + gtk_window_set_destroy_with_parent(GTK_WINDOW(mcast_params_dlg), TRUE); + gtk_window_set_default_size(GTK_WINDOW(mcast_params_dlg), 210, 210); + + gtk_widget_show(mcast_params_dlg); + + /* Container for each row of widgets */ + main_vb =ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 3, FALSE); + gtk_container_set_border_width(GTK_CONTAINER(main_vb), 2); + gtk_container_add(GTK_CONTAINER(mcast_params_dlg), main_vb); + gtk_widget_show(main_vb); + + grid = ws_gtk_grid_new(); + gtk_box_pack_start(GTK_BOX(main_vb), grid, TRUE, TRUE, 0); + label = gtk_label_new(" Burst measurement interval (ms) "); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 0, 1, 1); + entry1 = gtk_entry_new(); + g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_burstint); + gtk_entry_set_text(GTK_ENTRY(entry1), label_text); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry1, 1, 0, 1, 1); + label = gtk_label_new(" Burst alarm threshold (packets) "); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 1, 1, 1); + entry2 = gtk_entry_new(); + g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_trigger); + gtk_entry_set_text(GTK_ENTRY(entry2), label_text); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry2, 1, 1, 1, 1); + label = gtk_label_new(" Buffer alarm threshold (bytes) "); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 2, 1, 1); + entry3 = gtk_entry_new(); + g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_bufferalarm); + gtk_entry_set_text(GTK_ENTRY(entry3), label_text); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry3, 1, 2, 1, 1); + label = gtk_label_new(" Stream empty speed (kbit/s) "); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 3, 1, 1); + entry4 = gtk_entry_new(); + g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_emptyspeed); + gtk_entry_set_text(GTK_ENTRY(entry4), label_text); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry4, 1, 3, 1, 1); + label = gtk_label_new(" Total empty speed (kbit/s) "); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), label, 0, 4, 1, 1); + entry5 = gtk_entry_new(); + g_snprintf(label_text, sizeof(label_text), "%u", mcast_stream_cumulemptyspeed); + gtk_entry_set_text(GTK_ENTRY(entry5), label_text); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), entry5, 1, 4, 1, 1); + + gtk_widget_show (grid); + + /* button row */ + hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); + ws_gtk_grid_attach_defaults(GTK_GRID(grid), hbuttonbox, 0, 5, 2, 1); + ok_bt = ws_gtk_button_new_from_stock(GTK_STOCK_OK); + gtk_container_add (GTK_CONTAINER(hbuttonbox), ok_bt); + cancel_bt = ws_gtk_button_new_from_stock(GTK_STOCK_CANCEL); + gtk_container_add (GTK_CONTAINER(hbuttonbox), cancel_bt); + gtk_widget_set_can_default(cancel_bt, TRUE); + gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox), GTK_BUTTONBOX_END); + gtk_box_set_spacing(GTK_BOX(hbuttonbox), 0); + + g_signal_connect(mcast_params_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); + g_signal_connect(mcast_params_dlg, "destroy", G_CALLBACK(mcast_params_destroy_cb), NULL); + g_signal_connect(ok_bt, "clicked", G_CALLBACK(mcast_params_ok_cb), mcast_params_dlg); + window_set_cancel_button(mcast_params_dlg, cancel_bt, window_cancel_button_cb); + + /* Attach pointers to needed widgets */ + g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_1, entry1); + g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_2, entry2); + g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_3, entry3); + g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_4, entry4); + g_object_set_data(G_OBJECT(mcast_params_dlg), E_MCAST_ENTRY_5, entry5); + + gtk_widget_show_all(mcast_params_dlg); + window_present(mcast_params_dlg); } @@ -363,68 +363,68 @@ mcast_on_params(GtkButton *button _U_, gpointer data _U_) static void add_to_list_store(mcast_stream_info_t* strinfo) { - gchar label_text[256]; - gchar *data[NUM_COLS]; - int i; - char *savelocale; - - /* save the current locale */ - savelocale = g_strdup(setlocale(LC_NUMERIC, NULL)); - /* switch to "C" locale to avoid problems with localized decimal separators - in g_snprintf("%f") functions */ - setlocale(LC_NUMERIC, "C"); - data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr))); - data[1] = g_strdup_printf("%u", strinfo->src_port); - data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr))); - data[3] = g_strdup_printf("%u", strinfo->dest_port); - data[4] = g_strdup_printf("%u", strinfo->npackets); - data[5] = g_strdup_printf("%u /s", strinfo->apackets); - data[6] = g_strdup_printf("%2.1f Mbps", strinfo->average_bw); - data[7] = g_strdup_printf("%2.1f Mbps", strinfo->element.maxbw); - data[8] = g_strdup_printf("%u / %dms", strinfo->element.topburstsize, mcast_stream_burstint); - data[9] = g_strdup_printf("%u", strinfo->element.numbursts); - data[10] = g_strdup_printf("%.1f KB", (float)strinfo->element.topbuffusage/1000); - data[11] = g_strdup_printf("%u", strinfo->element.numbuffalarms); - - /* restore previous locale setting */ - setlocale(LC_NUMERIC, savelocale); - g_free(savelocale); - - /* Acquire an iterator */ - gtk_list_store_append(list_store, &list_iter); - - /* Fill the new row */ - gtk_list_store_set(list_store, &list_iter, - MC_COL_SRC_ADDR, data[0], - MC_COL_SRC_PORT, data[1], - MC_COL_DST_ADDR, data[2], - MC_COL_DST_PORT, data[3], - MC_COL_PACKETS, data[4], - MC_COL_PPS, data[5], - MC_COL_AVG_BW, data[6], - MC_COL_MAX_BW, data[7], - MC_COL_MAX_BURST, data[8], - MC_COL_BURST_ALARM, data[9], - MC_COL_MAX_BUFFER, data[10], - MC_COL_BUFFER_ALARM, data[11], - MC_COL_DATA, strinfo, - -1); - - for (i = 0; i < NUM_COLS-1; i++) - g_free(data[i]); - - /* Update the top label with the number of detected streams */ - g_snprintf(label_text, sizeof(label_text), - "Detected %d Multicast streams, Average Bw: %.1f Mbps Max Bw: %.1f Mbps Max burst: %d / %dms Max buffer: %.1f KB", - ++streams_nb, - mcaststream_get_info()->allstreams->average_bw, mcaststream_get_info()->allstreams->element.maxbw, - mcaststream_get_info()->allstreams->element.topburstsize, mcast_stream_burstint, - (float)(mcaststream_get_info()->allstreams->element.topbuffusage)/1000); - gtk_label_set_text(GTK_LABEL(top_label), label_text); - - g_snprintf(label_text, sizeof(label_text), "\nBurst int: %u ms Burst alarm: %u pps Buffer alarm: %u Bytes Stream empty speed: %u Kbps Total empty speed: %u Kbps\n", - mcast_stream_burstint, mcast_stream_trigger, mcast_stream_bufferalarm, mcast_stream_emptyspeed, mcast_stream_cumulemptyspeed); - gtk_label_set_text(GTK_LABEL(label_par), label_text); + gchar label_text[256]; + gchar *data[NUM_COLS]; + int i; + char *savelocale; + + /* save the current locale */ + savelocale = g_strdup(setlocale(LC_NUMERIC, NULL)); + /* switch to "C" locale to avoid problems with localized decimal separators + in g_snprintf("%f") functions */ + setlocale(LC_NUMERIC, "C"); + data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr))); + data[1] = g_strdup_printf("%u", strinfo->src_port); + data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr))); + data[3] = g_strdup_printf("%u", strinfo->dest_port); + data[4] = g_strdup_printf("%u", strinfo->npackets); + data[5] = g_strdup_printf("%u /s", strinfo->apackets); + data[6] = g_strdup_printf("%2.1f Mbps", strinfo->average_bw); + data[7] = g_strdup_printf("%2.1f Mbps", strinfo->element.maxbw); + data[8] = g_strdup_printf("%u / %dms", strinfo->element.topburstsize, mcast_stream_burstint); + data[9] = g_strdup_printf("%u", strinfo->element.numbursts); + data[10] = g_strdup_printf("%.1f KB", (float)strinfo->element.topbuffusage/1000); + data[11] = g_strdup_printf("%u", strinfo->element.numbuffalarms); + + /* restore previous locale setting */ + setlocale(LC_NUMERIC, savelocale); + g_free(savelocale); + + /* Acquire an iterator */ + gtk_list_store_append(list_store, &list_iter); + + /* Fill the new row */ + gtk_list_store_set(list_store, &list_iter, + MC_COL_SRC_ADDR, data[0], + MC_COL_SRC_PORT, data[1], + MC_COL_DST_ADDR, data[2], + MC_COL_DST_PORT, data[3], + MC_COL_PACKETS, data[4], + MC_COL_PPS, data[5], + MC_COL_AVG_BW, data[6], + MC_COL_MAX_BW, data[7], + MC_COL_MAX_BURST, data[8], + MC_COL_BURST_ALARM, data[9], + MC_COL_MAX_BUFFER, data[10], + MC_COL_BUFFER_ALARM, data[11], + MC_COL_DATA, strinfo, + -1); + + for (i = 0; i < NUM_COLS-1; i++) + g_free(data[i]); + + /* Update the top label with the number of detected streams */ + g_snprintf(label_text, sizeof(label_text), + "Detected %d Multicast streams, Average Bw: %.1f Mbps Max Bw: %.1f Mbps Max burst: %d / %dms Max buffer: %.1f KB", + ++streams_nb, + mcaststream_get_info()->allstreams->average_bw, mcaststream_get_info()->allstreams->element.maxbw, + mcaststream_get_info()->allstreams->element.topburstsize, mcast_stream_burstint, + (float)(mcaststream_get_info()->allstreams->element.topbuffusage)/1000); + gtk_label_set_text(GTK_LABEL(top_label), label_text); + + g_snprintf(label_text, sizeof(label_text), "\nBurst int: %u ms Burst alarm: %u pps Buffer alarm: %u Bytes Stream empty speed: %u Kbps Total empty speed: %u Kbps\n", + mcast_stream_burstint, mcast_stream_trigger, mcast_stream_bufferalarm, mcast_stream_emptyspeed, mcast_stream_cumulemptyspeed); + gtk_label_set_text(GTK_LABEL(label_par), label_text); } /****************************************************************************/ @@ -432,204 +432,204 @@ add_to_list_store(mcast_stream_info_t* strinfo) static void create_list_view(void) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - GtkTreeSortable *sortable; - GtkTreeView *list_view; - GtkTreeSelection *selection; - - /* Create the store */ - list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */ - G_TYPE_STRING, /* Source address */ - G_TYPE_STRING, /* Source port */ - G_TYPE_STRING, /* Destination address */ - G_TYPE_STRING, /* Destination port */ - G_TYPE_STRING, /* Packets */ - G_TYPE_STRING, /* Packets per second */ - G_TYPE_STRING, /* Average bandwidth */ - G_TYPE_STRING, /* Max. bandwidth */ - G_TYPE_STRING, /* Max. burst */ - G_TYPE_STRING, /* Burst alarms */ - G_TYPE_STRING, /* Max. buffers */ - G_TYPE_STRING, /* Buffer alarms */ - G_TYPE_POINTER /* Data */ - ); - - /* Create a view */ - list_w = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); - - list_view = GTK_TREE_VIEW(list_w); - sortable = GTK_TREE_SORTABLE(list_store); - - /* Speed up the list display */ - gtk_tree_view_set_fixed_height_mode(list_view, TRUE); - - /* Setup the sortable columns */ - gtk_tree_sortable_set_sort_column_id(sortable, MC_COL_SRC_ADDR, GTK_SORT_ASCENDING); - gtk_tree_view_set_headers_clickable(list_view, FALSE); - - /* The view now holds a reference. We can get rid of our own reference */ - g_object_unref(G_OBJECT(list_store)); - - /* - * Create the first column packet, associating the "text" attribute of the - * cell_renderer to the first column of the model - */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Src IP addr", renderer, - "text", MC_COL_SRC_ADDR, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_ADDR); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 100); - /* Add the column to the view. */ - gtk_tree_view_append_column(list_view, column); - - /* Source port */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Src port", renderer, - "text", MC_COL_SRC_PORT, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_PORT); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Destination address */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Dst IP addr", renderer, - "text", MC_COL_DST_ADDR, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_ADDR); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 100); - gtk_tree_view_append_column(list_view, column); - - /* Destination port */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Dst port", renderer, - "text", MC_COL_DST_PORT, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_PORT); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Packets */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Packets", renderer, - "text", MC_COL_PACKETS, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_PACKETS); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Packets/s */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Packets/s", renderer, - "text", MC_COL_PPS, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_PPS); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 90); - gtk_tree_view_append_column(list_view, column); - - /* Average bandwidth */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Avg Bw", renderer, - "text", MC_COL_AVG_BW, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_AVG_BW); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 70); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Max. bandwidth */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Max Bw", renderer, - "text", MC_COL_MAX_BW, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BW); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 70); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Max. bursts */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Max bursts", renderer, - "text", MC_COL_MAX_BURST, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BURST); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 70); - gtk_tree_view_column_set_fixed_width(column, 100); - gtk_tree_view_append_column(list_view, column); - - /* Burst alarms*/ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Burst alarms", renderer, - "text", MC_COL_BURST_ALARM, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_BURST_ALARM); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 90); - gtk_tree_view_column_set_fixed_width(column, 110); - gtk_tree_view_append_column(list_view, column); - - /* Max. buffers */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Max buffers", renderer, - "text", MC_COL_MAX_BUFFER, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BUFFER); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 90); - gtk_tree_view_column_set_fixed_width(column, 100); - gtk_tree_view_append_column(list_view, column); - - /* Buffer alarms */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Buffer alarms", renderer, - "text", MC_COL_BUFFER_ALARM, - NULL); - gtk_tree_view_column_set_sort_column_id(column, MC_COL_BUFFER_ALARM); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 90); - gtk_tree_view_column_set_fixed_width(column, 120); - gtk_tree_view_append_column(list_view, column); - - /* Now enable the sorting of each column */ - gtk_tree_view_set_rules_hint(list_view, TRUE); - gtk_tree_view_set_headers_clickable(list_view, TRUE); - - /* Setup the selection handler */ - selection = gtk_tree_view_get_selection(list_view); - gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); - - g_signal_connect(G_OBJECT(selection), "changed", /* (un)select_row */ - G_CALLBACK(mcaststream_on_select_row), - NULL); + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeSortable *sortable; + GtkTreeView *list_view; + GtkTreeSelection *selection; + + /* Create the store */ + list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */ + G_TYPE_STRING, /* Source address */ + G_TYPE_STRING, /* Source port */ + G_TYPE_STRING, /* Destination address */ + G_TYPE_STRING, /* Destination port */ + G_TYPE_STRING, /* Packets */ + G_TYPE_STRING, /* Packets per second */ + G_TYPE_STRING, /* Average bandwidth */ + G_TYPE_STRING, /* Max. bandwidth */ + G_TYPE_STRING, /* Max. burst */ + G_TYPE_STRING, /* Burst alarms */ + G_TYPE_STRING, /* Max. buffers */ + G_TYPE_STRING, /* Buffer alarms */ + G_TYPE_POINTER /* Data */ + ); + + /* Create a view */ + list_w = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); + + list_view = GTK_TREE_VIEW(list_w); + sortable = GTK_TREE_SORTABLE(list_store); + + /* Speed up the list display */ + gtk_tree_view_set_fixed_height_mode(list_view, TRUE); + + /* Setup the sortable columns */ + gtk_tree_sortable_set_sort_column_id(sortable, MC_COL_SRC_ADDR, GTK_SORT_ASCENDING); + gtk_tree_view_set_headers_clickable(list_view, FALSE); + + /* The view now holds a reference. We can get rid of our own reference */ + g_object_unref(G_OBJECT(list_store)); + + /* + * Create the first column packet, associating the "text" attribute of the + * cell_renderer to the first column of the model + */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Src IP addr", renderer, + "text", MC_COL_SRC_ADDR, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_ADDR); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 100); + /* Add the column to the view. */ + gtk_tree_view_append_column(list_view, column); + + /* Source port */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Src port", renderer, + "text", MC_COL_SRC_PORT, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_SRC_PORT); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Destination address */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Dst IP addr", renderer, + "text", MC_COL_DST_ADDR, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_ADDR); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 100); + gtk_tree_view_append_column(list_view, column); + + /* Destination port */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Dst port", renderer, + "text", MC_COL_DST_PORT, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_DST_PORT); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Packets */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Packets", renderer, + "text", MC_COL_PACKETS, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_PACKETS); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Packets/s */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Packets/s", renderer, + "text", MC_COL_PPS, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_PPS); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 90); + gtk_tree_view_append_column(list_view, column); + + /* Average bandwidth */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Avg Bw", renderer, + "text", MC_COL_AVG_BW, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_AVG_BW); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 70); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Max. bandwidth */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Max Bw", renderer, + "text", MC_COL_MAX_BW, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BW); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 70); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Max. bursts */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Max bursts", renderer, + "text", MC_COL_MAX_BURST, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BURST); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 70); + gtk_tree_view_column_set_fixed_width(column, 100); + gtk_tree_view_append_column(list_view, column); + + /* Burst alarms*/ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Burst alarms", renderer, + "text", MC_COL_BURST_ALARM, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_BURST_ALARM); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 90); + gtk_tree_view_column_set_fixed_width(column, 110); + gtk_tree_view_append_column(list_view, column); + + /* Max. buffers */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Max buffers", renderer, + "text", MC_COL_MAX_BUFFER, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_MAX_BUFFER); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 90); + gtk_tree_view_column_set_fixed_width(column, 100); + gtk_tree_view_append_column(list_view, column); + + /* Buffer alarms */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Buffer alarms", renderer, + "text", MC_COL_BUFFER_ALARM, + NULL); + gtk_tree_view_column_set_sort_column_id(column, MC_COL_BUFFER_ALARM); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 90); + gtk_tree_view_column_set_fixed_width(column, 120); + gtk_tree_view_append_column(list_view, column); + + /* Now enable the sorting of each column */ + gtk_tree_view_set_rules_hint(list_view, TRUE); + gtk_tree_view_set_headers_clickable(list_view, TRUE); + + /* Setup the selection handler */ + selection = gtk_tree_view_get_selection(list_view); + gtk_tree_selection_set_mode(selection, GTK_SELECTION_SINGLE); + + g_signal_connect(G_OBJECT(selection), "changed", /* (un)select_row */ + G_CALLBACK(mcaststream_on_select_row), + NULL); } @@ -639,90 +639,90 @@ create_list_view(void) static void mcaststream_dlg_create(void) { - GtkWidget *mcaststream_dlg_w; - GtkWidget *main_vb; - GtkWidget *scrolledwindow; - GtkWidget *hbuttonbox; - /*GtkWidget *bt_unselect;*/ - GtkWidget *bt_params; - GtkWidget *bt_close; + GtkWidget *mcaststream_dlg_w; + GtkWidget *main_vb; + GtkWidget *scrolledwindow; + GtkWidget *hbuttonbox; + /*GtkWidget *bt_unselect;*/ + GtkWidget *bt_params; + GtkWidget *bt_close; - gchar *title_name_ptr; - gchar *win_name; + gchar *title_name_ptr; + gchar *win_name; - title_name_ptr = cf_get_display_name(&cfile); - win_name = g_strdup_printf("%s - UDP Multicast Streams", title_name_ptr); - g_free(title_name_ptr); - mcaststream_dlg_w = dlg_window_new(win_name); + title_name_ptr = cf_get_display_name(&cfile); + win_name = g_strdup_printf("%s - UDP Multicast Streams", title_name_ptr); + g_free(title_name_ptr); + mcaststream_dlg_w = dlg_window_new(win_name); - gtk_window_set_default_size(GTK_WINDOW(mcaststream_dlg_w), 1150, 400); + gtk_window_set_default_size(GTK_WINDOW(mcaststream_dlg_w), 1150, 400); - main_vb = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE); - gtk_container_add(GTK_CONTAINER(mcaststream_dlg_w), main_vb); - gtk_container_set_border_width (GTK_CONTAINER (main_vb), 12); + main_vb = ws_gtk_box_new(GTK_ORIENTATION_VERTICAL, 0, FALSE); + gtk_container_add(GTK_CONTAINER(mcaststream_dlg_w), main_vb); + gtk_container_set_border_width (GTK_CONTAINER (main_vb), 12); - top_label = gtk_label_new ("Detected 0 Multicast streams"); - gtk_box_pack_start (GTK_BOX (main_vb), top_label, FALSE, FALSE, 8); + top_label = gtk_label_new ("Detected 0 Multicast streams"); + gtk_box_pack_start (GTK_BOX (main_vb), top_label, FALSE, FALSE, 8); - scrolledwindow = scrolled_window_new (NULL, NULL); - gtk_box_pack_start (GTK_BOX (main_vb), scrolledwindow, TRUE, TRUE, 0); + scrolledwindow = scrolled_window_new (NULL, NULL); + gtk_box_pack_start (GTK_BOX (main_vb), scrolledwindow, TRUE, TRUE, 0); - create_list_view(); - gtk_container_add(GTK_CONTAINER(scrolledwindow), list_w); + create_list_view(); + gtk_container_add(GTK_CONTAINER(scrolledwindow), list_w); - gtk_widget_show(mcaststream_dlg_w); + gtk_widget_show(mcaststream_dlg_w); - label_fwd = gtk_label_new (FWD_LABEL_TEXT); - gtk_box_pack_start (GTK_BOX (main_vb), label_fwd, FALSE, FALSE, 0); + label_fwd = gtk_label_new (FWD_LABEL_TEXT); + gtk_box_pack_start (GTK_BOX (main_vb), label_fwd, FALSE, FALSE, 0); - label_par = gtk_label_new (PAR_LABEL_TEXT); - gtk_box_pack_start (GTK_BOX (main_vb), label_par, FALSE, FALSE, 0); + label_par = gtk_label_new (PAR_LABEL_TEXT); + gtk_box_pack_start (GTK_BOX (main_vb), label_par, FALSE, FALSE, 0); - /* button row */ - hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); - gtk_box_pack_start (GTK_BOX (main_vb), hbuttonbox, FALSE, FALSE, 0); - gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END); - gtk_box_set_spacing (GTK_BOX (hbuttonbox), 0); + /* button row */ + hbuttonbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); + gtk_box_pack_start (GTK_BOX (main_vb), hbuttonbox, FALSE, FALSE, 0); + gtk_button_box_set_layout (GTK_BUTTON_BOX (hbuttonbox), GTK_BUTTONBOX_END); + gtk_box_set_spacing (GTK_BOX (hbuttonbox), 0); - /*bt_unselect = gtk_button_new_with_label ("Unselect"); - gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect); - gtk_widget_set_tooltip_text (bt_unselect, "Undo stream selection");*/ + /*bt_unselect = gtk_button_new_with_label ("Unselect"); + gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_unselect); + gtk_widget_set_tooltip_text (bt_unselect, "Undo stream selection");*/ - bt_params = gtk_button_new_with_label ("Set parameters"); - gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_params); - gtk_widget_set_tooltip_text (bt_params, "Set buffer, limit and speed parameters"); + bt_params = gtk_button_new_with_label ("Set parameters"); + gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_params); + gtk_widget_set_tooltip_text (bt_params, "Set buffer, limit and speed parameters"); - bt_filter = gtk_button_new_with_label ("Prepare Filter"); - gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter); - gtk_widget_set_tooltip_text (bt_filter, "Prepare a display filter of the selected stream"); + bt_filter = gtk_button_new_with_label ("Prepare Filter"); + gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_filter); + gtk_widget_set_tooltip_text (bt_filter, "Prepare a display filter of the selected stream"); - bt_close = ws_gtk_button_new_from_stock(GTK_STOCK_CLOSE); - gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close); - gtk_widget_set_tooltip_text (bt_close, "Close this dialog"); - gtk_widget_set_can_default(bt_close, TRUE); + bt_close = ws_gtk_button_new_from_stock(GTK_STOCK_CLOSE); + gtk_container_add (GTK_CONTAINER (hbuttonbox), bt_close); + gtk_widget_set_tooltip_text (bt_close, "Close this dialog"); + gtk_widget_set_can_default(bt_close, TRUE); - /*g_signal_connect(bt_unselect, "clicked", G_CALLBACK(mcaststream_on_unselect), NULL);*/ - g_signal_connect(bt_params, "clicked", G_CALLBACK(mcast_on_params), NULL); - g_signal_connect(bt_filter, "clicked", G_CALLBACK(mcaststream_on_filter), NULL); - window_set_cancel_button(mcaststream_dlg_w, bt_close, window_cancel_button_cb); + /*g_signal_connect(bt_unselect, "clicked", G_CALLBACK(mcaststream_on_unselect), NULL);*/ + g_signal_connect(bt_params, "clicked", G_CALLBACK(mcast_on_params), NULL); + g_signal_connect(bt_filter, "clicked", G_CALLBACK(mcaststream_on_filter), NULL); + window_set_cancel_button(mcaststream_dlg_w, bt_close, window_cancel_button_cb); - g_signal_connect(mcaststream_dlg_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); - g_signal_connect(mcaststream_dlg_w, "destroy", G_CALLBACK(mcaststream_on_destroy), NULL); + g_signal_connect(mcaststream_dlg_w, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); + g_signal_connect(mcaststream_dlg_w, "destroy", G_CALLBACK(mcaststream_on_destroy), NULL); - gtk_widget_show_all(mcaststream_dlg_w); - window_present(mcaststream_dlg_w); + gtk_widget_show_all(mcaststream_dlg_w); + window_present(mcaststream_dlg_w); - mcaststream_on_unselect(NULL, NULL); + mcaststream_on_unselect(NULL, NULL); - mcast_stream_dlg = mcaststream_dlg_w; + mcast_stream_dlg = mcaststream_dlg_w; - g_free(win_name); + g_free(win_name); } /****************************************************************************/ -/* PUBLIC */ +/* PUBLIC */ /****************************************************************************/ /****************************************************************************/ @@ -731,21 +731,21 @@ mcaststream_dlg_create(void) void mcaststream_dlg_update(GList *list) { - if (mcast_stream_dlg != NULL) { - gtk_list_store_clear(list_store); - streams_nb = 0; + if (mcast_stream_dlg != NULL) { + gtk_list_store_clear(list_store); + streams_nb = 0; - list = g_list_first(list); - while (list) - { - add_to_list_store((mcast_stream_info_t*)(list->data)); - list = g_list_next(list); - } + list = g_list_first(list); + while (list) + { + add_to_list_store((mcast_stream_info_t*)(list->data)); + list = g_list_next(list); + } - mcaststream_on_unselect(NULL, NULL); - } + mcaststream_on_unselect(NULL, NULL); + } - last_list = list; + last_list = list; } @@ -755,19 +755,19 @@ mcaststream_dlg_update(GList *list) void mcaststream_dlg_show(GList *list) { - if (mcast_stream_dlg != NULL) { - /* There's already a dialog box; reactivate it. */ - reactivate_window(mcast_stream_dlg); - /* Another list since last call? */ - if (list != last_list) { - mcaststream_dlg_update(list); - } - } - else { - /* Create and show the dialog box */ - mcaststream_dlg_create(); - mcaststream_dlg_update(list); - } + if (mcast_stream_dlg != NULL) { + /* There's already a dialog box; reactivate it. */ + reactivate_window(mcast_stream_dlg); + /* Another list since last call? */ + if (list != last_list) { + mcaststream_dlg_update(list); + } + } + else { + /* Create and show the dialog box */ + mcaststream_dlg_create(); + mcaststream_dlg_update(list); + } } @@ -776,16 +776,16 @@ mcaststream_dlg_show(GList *list) void mcaststream_launch(GtkAction *action _U_, gpointer user_data _U_) { - /* Register the tap listener */ - register_tap_listener_mcast_stream(); + /* Register the tap listener */ + register_tap_listener_mcast_stream(); - /* Scan for Mcast streams (redissect all packets) */ - mcaststream_scan(); + /* Scan for Mcast streams (redissect all packets) */ + mcaststream_scan(); - /* Show the dialog box with the list of streams */ - mcaststream_dlg_show(mcaststream_get_info()->strinfo_list); + /* Show the dialog box with the list of streams */ + mcaststream_dlg_show(mcaststream_get_info()->strinfo_list); - /* Tap listener will be removed and cleaned up in mcaststream_on_destroy */ + /* Tap listener will be removed and cleaned up in mcaststream_on_destroy */ } /****************************************************************************/ @@ -800,9 +800,9 @@ register_tap_listener_mcast_stream_dlg(void) * Local variables: * c-basic-offset: 4 * tab-width: 8 - * indent-tabs-mode: t + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=4 tabstop=8 noexpandtab: - * :indentSize=4:tabSize=8:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ diff --git a/ui/gtk/rtp_stream_dlg.c b/ui/gtk/rtp_stream_dlg.c index ae89d5f10c..41c43cc841 100644 --- a/ui/gtk/rtp_stream_dlg.c +++ b/ui/gtk/rtp_stream_dlg.c @@ -100,53 +100,53 @@ enum /****************************************************************************/ static void save_stream_destroy_cb(GtkWidget *win _U_, gpointer user_data _U_) { - /* Note that we no longer have a Save voice info dialog box. */ - rtpstream_save_dlg = NULL; + /* Note that we no longer have a Save voice info dialog box. */ + rtpstream_save_dlg = NULL; } /****************************************************************************/ /* save in a file */ static gboolean save_stream_ok_cb(GtkWidget *ok_bt _U_, gpointer fs) { - gchar *g_dest; - - if (!selected_stream_fwd) { - return TRUE; - } - - g_dest = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs)); - - /* Perhaps the user specified a directory instead of a file. - Check whether they did. */ - if (test_for_directory(g_dest) == EISDIR) { - /* It's a directory - set the file selection box to display it. */ - set_last_open_dir(g_dest); - g_free(g_dest); - file_selection_set_current_folder((GtkWidget *)fs, get_last_open_dir()); - gtk_file_chooser_set_current_name((GtkFileChooser *)fs, ""); - return FALSE; - } - -#if 0 /* GtkFileChooser/gtk_dialog_run currently being used. */ - /* So: Leaving the dialog box displayed after popping-up an */ - /* alert box won't work. */ - /* - * Don't dismiss the dialog box if the save operation fails. - */ - if (!rtpstream_save(selected_stream_fwd, g_dest)) { - g_free(g_dest); - return; - } - g_free(g_dest); - window_destroy(GTK_WIDGET(rtpstream_save_dlg)); - return; + gchar *g_dest; + + if (!selected_stream_fwd) { + return TRUE; + } + + g_dest = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(fs)); + + /* Perhaps the user specified a directory instead of a file. + Check whether they did. */ + if (test_for_directory(g_dest) == EISDIR) { + /* It's a directory - set the file selection box to display it. */ + set_last_open_dir(g_dest); + g_free(g_dest); + file_selection_set_current_folder((GtkWidget *)fs, get_last_open_dir()); + gtk_file_chooser_set_current_name((GtkFileChooser *)fs, ""); + return FALSE; + } + +#if 0 /* GtkFileChooser/gtk_dialog_run currently being used. */ + /* So: Leaving the dialog box displayed after popping-up an */ + /* alert box won't work. */ + /* + * Don't dismiss the dialog box if the save operation fails. + */ + if (!rtpstream_save(selected_stream_fwd, g_dest)) { + g_free(g_dest); + return; + } + g_free(g_dest); + window_destroy(GTK_WIDGET(rtpstream_save_dlg)); + return; #else - /* Dialog box needs to be always destroyed. Return TRUE */ - /* so that caller will destroy the dialog box. */ - /* See comment under rtpstream_on_save. */ - rtpstream_save(selected_stream_fwd, g_dest); - g_free(g_dest); - return TRUE; + /* Dialog box needs to be always destroyed. Return TRUE */ + /* so that caller will destroy the dialog box. */ + /* See comment under rtpstream_on_save. */ + rtpstream_save(selected_stream_fwd, g_dest); + g_free(g_dest); + return TRUE; #endif } @@ -157,18 +157,18 @@ static gboolean save_stream_ok_cb(GtkWidget *ok_bt _U_, gpointer fs) static void rtpstream_on_destroy(GObject *object _U_, gpointer user_data _U_) { - /* Remove the stream tap listener */ - remove_tap_listener_rtp_stream(); + /* Remove the stream tap listener */ + remove_tap_listener_rtp_stream(); - /* Is there a save voice window open? */ - if (rtpstream_save_dlg != NULL) - window_destroy(rtpstream_save_dlg); + /* Is there a save voice window open? */ + if (rtpstream_save_dlg != NULL) + window_destroy(rtpstream_save_dlg); - /* Clean up memory used by stream tap */ - rtpstream_reset((rtpstream_tapinfo_t *)rtpstream_get_info()); + /* Clean up memory used by stream tap */ + rtpstream_reset((rtpstream_tapinfo_t *)rtpstream_get_info()); - /* Note that we no longer have a "RTP Streams" dialog box. */ - rtp_stream_dlg = NULL; + /* Note that we no longer have a "RTP Streams" dialog box. */ + rtp_stream_dlg = NULL; } @@ -176,117 +176,117 @@ rtpstream_on_destroy(GObject *object _U_, gpointer user_data _U_) static void rtpstream_on_unselect(GtkButton *button _U_, gpointer user_data _U_) { - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); - gtk_tree_selection_unselect_all(selection); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + gtk_tree_selection_unselect_all(selection); - selected_stream_fwd = NULL; - selected_stream_rev = NULL; - gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); - gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT); + selected_stream_fwd = NULL; + selected_stream_rev = NULL; + gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); + gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT); } /****************************************************************************/ static gint rtp_stream_info_cmp_reverse(gconstpointer aa, gconstpointer bb) { - const struct _rtp_stream_info* a = (const struct _rtp_stream_info *)aa; - const struct _rtp_stream_info* b = (const struct _rtp_stream_info *)bb; - - if (a==NULL || b==NULL) - return 1; - if ((ADDRESSES_EQUAL(&(a->src_addr), &(b->dest_addr))) - && (a->src_port == b->dest_port) - && (ADDRESSES_EQUAL(&(a->dest_addr), &(b->src_addr))) - && (a->dest_port == b->src_port)) - return 0; - else - return 1; + const struct _rtp_stream_info* a = (const struct _rtp_stream_info *)aa; + const struct _rtp_stream_info* b = (const struct _rtp_stream_info *)bb; + + if (a==NULL || b==NULL) + return 1; + if ((ADDRESSES_EQUAL(&(a->src_addr), &(b->dest_addr))) + && (a->src_port == b->dest_port) + && (ADDRESSES_EQUAL(&(a->dest_addr), &(b->src_addr))) + && (a->dest_port == b->src_port)) + return 0; + else + return 1; } /****************************************************************************/ static void -rtpstream_on_findrev(GtkButton *button _U_, gpointer user_data _U_) +rtpstream_on_findrev(GtkButton *button _U_, gpointer user_data _U_) { - GtkTreeSelection *selection; - GList *path_list; - GList *path_list_item = NULL; - GtkTreePath *path = NULL; - GtkTreePath *path_fwd = NULL; - GtkTreePath *path_rev = NULL; - GtkTreeIter iter; - rtp_stream_info_t *stream = NULL; - gboolean found_it = FALSE; - - if (selected_stream_fwd==NULL) - return; - - selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); - path_list = gtk_tree_selection_get_selected_rows(selection, NULL); - - if (path_list) { - path_list_item = g_list_first(path_list); - path = (GtkTreePath *)(path_list_item->data); - } - - if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); - if (stream == selected_stream_fwd) { - path_fwd = path; - } - if (stream == selected_stream_rev) { - path_rev = path; - } - } - - path = NULL; - if (path_list_item) { - path_list_item = g_list_next(path_list_item); - if (path_list_item) - path = (GtkTreePath *)(path_list_item->data); - } - - if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); - if (stream == selected_stream_fwd) { - path_fwd = path; - } - if (stream == selected_stream_rev) { - path_rev = path; - } - } - - /* Find it from the forward stream on */ - gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path_fwd); - while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); - if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) { - found_it = TRUE; - break; - } - }; - - if (!found_it) { - /* If we're not done yet, restart at the beginning */ - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter); - do { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); - if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) { - found_it = TRUE; - break; - } - if (stream == selected_stream_fwd) - break; - } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); - } - - if (found_it) { - if (path_rev) - gtk_tree_selection_unselect_path(selection, path_rev); - gtk_tree_selection_select_iter(selection, &iter); - } - - g_list_foreach(path_list, (GFunc)gtk_tree_path_free, NULL); - g_list_free(path_list); + GtkTreeSelection *selection; + GList *path_list; + GList *path_list_item = NULL; + GtkTreePath *path = NULL; + GtkTreePath *path_fwd = NULL; + GtkTreePath *path_rev = NULL; + GtkTreeIter iter; + rtp_stream_info_t *stream = NULL; + gboolean found_it = FALSE; + + if (selected_stream_fwd==NULL) + return; + + selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); + path_list = gtk_tree_selection_get_selected_rows(selection, NULL); + + if (path_list) { + path_list_item = g_list_first(path_list); + path = (GtkTreePath *)(path_list_item->data); + } + + if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); + if (stream == selected_stream_fwd) { + path_fwd = path; + } + if (stream == selected_stream_rev) { + path_rev = path; + } + } + + path = NULL; + if (path_list_item) { + path_list_item = g_list_next(path_list_item); + if (path_list_item) + path = (GtkTreePath *)(path_list_item->data); + } + + if (path && gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path)) { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); + if (stream == selected_stream_fwd) { + path_fwd = path; + } + if (stream == selected_stream_rev) { + path_rev = path; + } + } + + /* Find it from the forward stream on */ + gtk_tree_model_get_iter(GTK_TREE_MODEL(list_store), &iter, path_fwd); + while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)) { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); + if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) { + found_it = TRUE; + break; + } + }; + + if (!found_it) { + /* If we're not done yet, restart at the beginning */ + gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter); + do { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &stream, -1); + if (rtp_stream_info_cmp_reverse(selected_stream_fwd, stream) == 0) { + found_it = TRUE; + break; + } + if (stream == selected_stream_fwd) + break; + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(list_store), &iter)); + } + + if (found_it) { + if (path_rev) + gtk_tree_selection_unselect_path(selection, path_rev); + gtk_tree_selection_select_iter(selection, &iter); + } + + g_list_foreach(path_list, (GFunc)gtk_tree_path_free, NULL); + g_list_free(path_list); } @@ -296,10 +296,10 @@ static void rtpstream_on_goto (GtkButton *button _U_, gpointer user_data _U_) { - if (selected_stream_fwd) - { - cf_goto_frame(&cfile, selected_stream_fwd->first_frame_num); - } + if (selected_stream_fwd) + { + cf_goto_frame(&cfile, selected_stream_fwd->first_frame_num); + } } */ @@ -309,62 +309,62 @@ static void rtpstream_on_save(GtkButton *button _U_, gpointer data _U_) { /* XX - not needed? - rtpstream_tapinfo_t* tapinfo = data; + rtpstream_tapinfo_t* tapinfo = data; */ - if (!selected_stream_fwd) { - simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, - "Please select a forward stream"); - return; - } + if (!selected_stream_fwd) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, + "Please select a forward stream"); + return; + } #if 0 /* XXX: GtkFileChooserDialog/gtk_dialog_run currently being used is effectively modal so this is not req'd */ - if (rtpstream_save_dlg != NULL) { - /* There's already a Save dialog box; reactivate it. */ - reactivate_window(rtpstream_save_dlg); - return; - } + if (rtpstream_save_dlg != NULL) { + /* There's already a Save dialog box; reactivate it. */ + reactivate_window(rtpstream_save_dlg); + return; + } #endif - rtpstream_save_dlg = gtk_file_chooser_dialog_new( - "Wireshark: Save selected stream in rtpdump ('-F dump') format", - GTK_WINDOW(rtp_stream_dlg), GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - NULL); - gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(rtpstream_save_dlg), TRUE); + rtpstream_save_dlg = gtk_file_chooser_dialog_new( + "Wireshark: Save selected stream in rtpdump ('-F dump') format", + GTK_WINDOW(rtp_stream_dlg), GTK_FILE_CHOOSER_ACTION_SAVE, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + NULL); + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(rtpstream_save_dlg), TRUE); - g_signal_connect(rtpstream_save_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); - g_signal_connect(rtpstream_save_dlg, "destroy", G_CALLBACK(save_stream_destroy_cb), NULL); + g_signal_connect(rtpstream_save_dlg, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); + g_signal_connect(rtpstream_save_dlg, "destroy", G_CALLBACK(save_stream_destroy_cb), NULL); - gtk_widget_show(rtpstream_save_dlg); - window_present(rtpstream_save_dlg); + gtk_widget_show(rtpstream_save_dlg); + window_present(rtpstream_save_dlg); #if 0 - if (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT){ - save_stream_ok_cb(rtpstream_save_dlg, rtpstream_save_dlg); - }else{ - window_destroy(rtpstream_save_dlg); - } + if (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT){ + save_stream_ok_cb(rtpstream_save_dlg, rtpstream_save_dlg); + }else{ + window_destroy(rtpstream_save_dlg); + } #endif - /* "Run" the GtkFileChooserDialog. */ - /* Upon exit: If "Accept" run the OK callback. */ - /* If the OK callback returns with a FALSE status, re-run the dialog.*/ - /* If not accept (ie: cancel) destroy the window. */ - /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */ - /* return with a TRUE status so that the dialog window will be destroyed. */ - /* Trying to re-run the dialog after popping up an alert box will not work */ - /* since the user will not be able to dismiss the alert box. */ - /* The (somewhat unfriendly) effect: the user must re-invoke the */ - /* GtkFileChooserDialog whenever the OK callback pops up an alert box. */ - /* */ - /* ToDo: use GtkFileChooserWidget in a dialog window instead of */ - /* GtkFileChooserDialog. */ - while (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT) { - if (save_stream_ok_cb(NULL, rtpstream_save_dlg)) { - break; /* we're done */ - } - } - window_destroy(rtpstream_save_dlg); + /* "Run" the GtkFileChooserDialog. */ + /* Upon exit: If "Accept" run the OK callback. */ + /* If the OK callback returns with a FALSE status, re-run the dialog.*/ + /* If not accept (ie: cancel) destroy the window. */ + /* XXX: If the OK callback pops up an alert box (eg: for an error) it *must* */ + /* return with a TRUE status so that the dialog window will be destroyed. */ + /* Trying to re-run the dialog after popping up an alert box will not work */ + /* since the user will not be able to dismiss the alert box. */ + /* The (somewhat unfriendly) effect: the user must re-invoke the */ + /* GtkFileChooserDialog whenever the OK callback pops up an alert box. */ + /* */ + /* ToDo: use GtkFileChooserWidget in a dialog window instead of */ + /* GtkFileChooserDialog. */ + while (gtk_dialog_run(GTK_DIALOG(rtpstream_save_dlg)) == GTK_RESPONSE_ACCEPT) { + if (save_stream_ok_cb(NULL, rtpstream_save_dlg)) { + break; /* we're done */ + } + } + window_destroy(rtpstream_save_dlg); } @@ -372,9 +372,9 @@ rtpstream_on_save(GtkButton *button _U_, gpointer data _U_) static void rtpstream_on_mark(GtkButton *button _U_, gpointer user_data _U_) { - if (selected_stream_fwd==NULL && selected_stream_rev==NULL) - return; - rtpstream_mark(selected_stream_fwd, selected_stream_rev); + if (selected_stream_fwd==NULL && selected_stream_rev==NULL) + return; + rtpstream_mark(selected_stream_fwd, selected_stream_rev); } @@ -382,67 +382,67 @@ rtpstream_on_mark(GtkButton *button _U_, gpointer user_data _U_) static void rtpstream_on_filter(GtkButton *button _U_, gpointer user_data _U_) { - gchar *filter_string = NULL; - gchar *filter_string_fwd = NULL; - gchar *filter_string_rev = NULL; - gchar ip_version[3]; - - if (selected_stream_fwd==NULL && selected_stream_rev==NULL) - return; - - if (selected_stream_fwd) - { - if (selected_stream_fwd->src_addr.type==AT_IPv6) { - g_strlcpy(ip_version,"v6",sizeof(ip_version)); - } else { - ip_version[0] = '\0'; - } - filter_string_fwd = g_strdup_printf( - "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)", - ip_version, - ep_address_to_str(&(selected_stream_fwd->src_addr)), - selected_stream_fwd->src_port, - ip_version, - ep_address_to_str(&(selected_stream_fwd->dest_addr)), - selected_stream_fwd->dest_port, - selected_stream_fwd->ssrc); - - filter_string = filter_string_fwd; - } - - if (selected_stream_rev) - { - if (selected_stream_rev->src_addr.type==AT_IPv6) { - g_strlcpy(ip_version,"v6",sizeof(ip_version)); - } else { - ip_version[0] = '\0'; - } - filter_string_rev = g_strdup_printf( - "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)", - ip_version, - ep_address_to_str(&(selected_stream_rev->src_addr)), - selected_stream_rev->src_port, - ip_version, - ep_address_to_str(&(selected_stream_rev->dest_addr)), - selected_stream_rev->dest_port, - selected_stream_rev->ssrc); - - filter_string = filter_string_rev; - } - - if ((selected_stream_fwd) && (selected_stream_rev)) - { - filter_string = g_strdup_printf("%s || %s", filter_string_fwd, filter_string_rev); - g_free(filter_string_fwd); - g_free(filter_string_rev); - } - - gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string); - g_free(filter_string); + gchar *filter_string = NULL; + gchar *filter_string_fwd = NULL; + gchar *filter_string_rev = NULL; + gchar ip_version[3]; + + if (selected_stream_fwd==NULL && selected_stream_rev==NULL) + return; + + if (selected_stream_fwd) + { + if (selected_stream_fwd->src_addr.type==AT_IPv6) { + g_strlcpy(ip_version,"v6",sizeof(ip_version)); + } else { + ip_version[0] = '\0'; + } + filter_string_fwd = g_strdup_printf( + "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)", + ip_version, + ep_address_to_str(&(selected_stream_fwd->src_addr)), + selected_stream_fwd->src_port, + ip_version, + ep_address_to_str(&(selected_stream_fwd->dest_addr)), + selected_stream_fwd->dest_port, + selected_stream_fwd->ssrc); + + filter_string = filter_string_fwd; + } + + if (selected_stream_rev) + { + if (selected_stream_rev->src_addr.type==AT_IPv6) { + g_strlcpy(ip_version,"v6",sizeof(ip_version)); + } else { + ip_version[0] = '\0'; + } + filter_string_rev = g_strdup_printf( + "(ip%s.src==%s && udp.srcport==%u && ip%s.dst==%s && udp.dstport==%u && rtp.ssrc==0x%X)", + ip_version, + ep_address_to_str(&(selected_stream_rev->src_addr)), + selected_stream_rev->src_port, + ip_version, + ep_address_to_str(&(selected_stream_rev->dest_addr)), + selected_stream_rev->dest_port, + selected_stream_rev->ssrc); + + filter_string = filter_string_rev; + } + + if ((selected_stream_fwd) && (selected_stream_rev)) + { + filter_string = g_strdup_printf("%s || %s", filter_string_fwd, filter_string_rev); + g_free(filter_string_fwd); + g_free(filter_string_rev); + } + + gtk_entry_set_text(GTK_ENTRY(main_display_filter_widget), filter_string); + g_free(filter_string); /* - main_filter_packets(&cfile, filter_string, FALSE); - rtpstream_dlg_update(rtpstream_get_info()->strinfo_list); + main_filter_packets(&cfile, filter_string, FALSE); + rtpstream_dlg_update(rtpstream_get_info()->strinfo_list); */ } @@ -451,104 +451,104 @@ rtpstream_on_filter(GtkButton *button _U_, gpointer user_data _U_) static void rtpstream_on_copy_as_csv(GtkWindow *win _U_, gpointer data _U_) { - GtkTreeViewColumn *column; - const gchar *title; - GtkTreeIter iter; - guint i,j; - gchar *table_entry; - guint table_entry_uint; - - GString *CSV_str; - GtkClipboard *cb; - - CSV_str = g_string_sized_new(240*(1+streams_nb)); - /* Add the column headers to the CSV data */ - for (j=0; j<NUM_COLS-1; j++) { - column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), j); - title = gtk_tree_view_column_get_title(column); - g_string_append_printf(CSV_str, "\"%s\"", title); - if (j<NUM_COLS-2) g_string_append(CSV_str, ","); - } - g_string_append(CSV_str,"\n"); - - /* Add the column values to the CSV data */ - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { - for (i=0; i<streams_nb; i++) { - for (j=0; j<NUM_COLS-1; j++) { - if (j == RTP_COL_SRC_PORT || j == RTP_COL_DST_PORT || j == RTP_COL_PACKETS) { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry_uint, -1); - g_string_append_printf(CSV_str, "\"%u\"", table_entry_uint); - } else { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry, -1); - g_string_append_printf(CSV_str, "\"%s\"", table_entry); - g_free(table_entry); - } - if (j<NUM_COLS-2) g_string_append(CSV_str,","); - } - g_string_append(CSV_str,"\n"); - gtk_tree_model_iter_next (GTK_TREE_MODEL(list_store),&iter); - } - } - - /* Now that we have the CSV data, copy it into the default clipboard */ - cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text(cb, CSV_str->str, (gint)CSV_str->len); - g_string_free(CSV_str, TRUE); + GtkTreeViewColumn *column; + const gchar *title; + GtkTreeIter iter; + guint i,j; + gchar *table_entry; + guint table_entry_uint; + + GString *CSV_str; + GtkClipboard *cb; + + CSV_str = g_string_sized_new(240*(1+streams_nb)); + /* Add the column headers to the CSV data */ + for (j=0; j<NUM_COLS-1; j++) { + column = gtk_tree_view_get_column(GTK_TREE_VIEW(list), j); + title = gtk_tree_view_column_get_title(column); + g_string_append_printf(CSV_str, "\"%s\"", title); + if (j<NUM_COLS-2) g_string_append(CSV_str, ","); + } + g_string_append(CSV_str,"\n"); + + /* Add the column values to the CSV data */ + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list_store), &iter)) { + for (i=0; i<streams_nb; i++) { + for (j=0; j<NUM_COLS-1; j++) { + if (j == RTP_COL_SRC_PORT || j == RTP_COL_DST_PORT || j == RTP_COL_PACKETS) { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry_uint, -1); + g_string_append_printf(CSV_str, "\"%u\"", table_entry_uint); + } else { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, j, &table_entry, -1); + g_string_append_printf(CSV_str, "\"%s\"", table_entry); + g_free(table_entry); + } + if (j<NUM_COLS-2) g_string_append(CSV_str,","); + } + g_string_append(CSV_str,"\n"); + gtk_tree_model_iter_next (GTK_TREE_MODEL(list_store),&iter); + } + } + + /* Now that we have the CSV data, copy it into the default clipboard */ + cb = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_text(cb, CSV_str->str, (gint)CSV_str->len); + g_string_free(CSV_str, TRUE); } /****************************************************************************/ static void rtpstream_on_analyse(GtkButton *button _U_, gpointer user_data _U_) { - address src_fwd; - guint32 port_src_fwd = 0; - address dst_fwd; - guint32 port_dst_fwd = 0; - guint32 ssrc_fwd = 0; - address src_rev; - guint32 port_src_rev = 0; - address dst_rev; - guint32 port_dst_rev = 0; - guint32 ssrc_rev = 0; - - if (!(selected_stream_fwd || selected_stream_rev)) - { - return; - } - - SET_ADDRESS(&src_fwd,AT_NONE,0,NULL); - SET_ADDRESS(&dst_fwd,AT_NONE,0,NULL); - SET_ADDRESS(&src_rev,AT_NONE,0,NULL); - SET_ADDRESS(&dst_rev,AT_NONE,0,NULL); - - if (selected_stream_fwd) { - COPY_ADDRESS(&(src_fwd), &(selected_stream_fwd->src_addr)); - port_src_fwd = selected_stream_fwd->src_port; - COPY_ADDRESS(&(dst_fwd), &(selected_stream_fwd->dest_addr)); - port_dst_fwd = selected_stream_fwd->dest_port; - ssrc_fwd = selected_stream_fwd->ssrc; - } - - if (selected_stream_rev) { - COPY_ADDRESS(&(src_rev), &(selected_stream_rev->src_addr)); - port_src_rev = selected_stream_rev->src_port; - COPY_ADDRESS(&(dst_rev), &(selected_stream_rev->dest_addr)); - port_dst_rev = selected_stream_rev->dest_port; - ssrc_rev = selected_stream_rev->ssrc; - } - - rtp_analysis( - &src_fwd, - port_src_fwd, - &dst_fwd, - port_dst_fwd, - ssrc_fwd, - &src_rev, - port_src_rev, - &dst_rev, - port_dst_rev, - ssrc_rev - ); + address src_fwd; + guint32 port_src_fwd = 0; + address dst_fwd; + guint32 port_dst_fwd = 0; + guint32 ssrc_fwd = 0; + address src_rev; + guint32 port_src_rev = 0; + address dst_rev; + guint32 port_dst_rev = 0; + guint32 ssrc_rev = 0; + + if (!(selected_stream_fwd || selected_stream_rev)) + { + return; + } + + SET_ADDRESS(&src_fwd,AT_NONE,0,NULL); + SET_ADDRESS(&dst_fwd,AT_NONE,0,NULL); + SET_ADDRESS(&src_rev,AT_NONE,0,NULL); + SET_ADDRESS(&dst_rev,AT_NONE,0,NULL); + + if (selected_stream_fwd) { + COPY_ADDRESS(&(src_fwd), &(selected_stream_fwd->src_addr)); + port_src_fwd = selected_stream_fwd->src_port; + COPY_ADDRESS(&(dst_fwd), &(selected_stream_fwd->dest_addr)); + port_dst_fwd = selected_stream_fwd->dest_port; + ssrc_fwd = selected_stream_fwd->ssrc; + } + + if (selected_stream_rev) { + COPY_ADDRESS(&(src_rev), &(selected_stream_rev->src_addr)); + port_src_rev = selected_stream_rev->src_port; + COPY_ADDRESS(&(dst_rev), &(selected_stream_rev->dest_addr)); + port_dst_rev = selected_stream_rev->dest_port; + ssrc_rev = selected_stream_rev->ssrc; + } + + rtp_analysis( + &src_fwd, + port_src_fwd, + &dst_fwd, + port_dst_fwd, + ssrc_fwd, + &src_rev, + port_src_rev, + &dst_rev, + port_dst_rev, + ssrc_rev + ); } @@ -558,111 +558,111 @@ rtpstream_on_analyse(GtkButton *button _U_, gpointer user_data _U_) static gboolean rtpstream_view_selection_func(GtkTreeSelection *selection, GtkTreeModel *model, GtkTreePath *path, gboolean path_currently_selected, gpointer userdata _U_) { - GtkTreeIter iter; - gint nb_selected; - rtp_stream_info_t* selected_stream; - gboolean result = TRUE; - gchar label_text[80]; - - /* Logic - * nb_selected path_currently_selected forward reverse action result - * 0 must be false any any assign forward true - * 1 true match any delete forward true - * 1 true other any delete reverse true - * 1 false match any invalid true - * 1 false other none assign reverse true - * 1 false other any assign forward true - * 2 true match any delete forward path_currently_selected - * 2 true other match delete reverse path_currently_selected - * 2 true other other invalid path_currently_selected - * 2 false match any invalid path_currently_selected - * 2 false any match invalid path_currently_selected - * 2 false other other assign reverse path_currently_selected - * >2 any any any invalid path_currently_selected - */ - - nb_selected = gtk_tree_selection_count_selected_rows(selection); - if (gtk_tree_model_get_iter(model, &iter, path)) { - gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &selected_stream, -1); - - switch (nb_selected) - { - case 0: - { - if (path_currently_selected) - g_print("Select: He, we've got a selected path while none is selected?\n"); - else - selected_stream_fwd = selected_stream; - break; - } - case 1: - { - if (path_currently_selected) - if (selected_stream == selected_stream_fwd) - selected_stream_fwd = NULL; - else - selected_stream_rev = NULL; - else - if (selected_stream == selected_stream_fwd) - g_print("Select: He, this can't be. 1 not selected but equal to fwd\n"); - else - if (selected_stream_rev) - selected_stream_fwd = selected_stream; - else - selected_stream_rev = selected_stream; - break; - } - case 2: - { - if (path_currently_selected) { - if (selected_stream == selected_stream_fwd) - selected_stream_fwd = NULL; - else if (selected_stream == selected_stream_rev) - selected_stream_rev = NULL; - else - g_print("Select: He, this can't be. 2 selected but not equal to fwd or rev\n"); - } - result = path_currently_selected; - break; - } - default: - { - g_print("Select: He, we're getting a too high selection count\n"); - result = path_currently_selected; - } - } - } - - if (selected_stream_fwd) { - g_snprintf(label_text, sizeof(label_text), "Forward: %s:%u -> %s:%u, SSRC=0x%X", - ep_address_to_display(&(selected_stream_fwd->src_addr)), - selected_stream_fwd->src_port, - ep_address_to_display(&(selected_stream_fwd->dest_addr)), - selected_stream_fwd->dest_port, - selected_stream_fwd->ssrc - ); - gtk_label_set_text(GTK_LABEL(label_fwd), label_text); - } else { - if (selected_stream_rev) - gtk_label_set_text(GTK_LABEL(label_fwd), FWD_ONLY_LABEL_TEXT); - else - gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); - } - - if (selected_stream_rev) { - g_snprintf(label_text, sizeof(label_text), "Reverse: %s:%u -> %s:%u, SSRC=0x%X", - ep_address_to_display(&(selected_stream_rev->src_addr)), - selected_stream_rev->src_port, - ep_address_to_display(&(selected_stream_rev->dest_addr)), - selected_stream_rev->dest_port, - selected_stream_rev->ssrc - ); - gtk_label_set_text(GTK_LABEL(label_rev), label_text); - } else { - gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT); - } - - return result; + GtkTreeIter iter; + gint nb_selected; + rtp_stream_info_t* selected_stream; + gboolean result = TRUE; + gchar label_text[80]; + + /* Logic + * nb_selected path_currently_selected forward reverse action result + * 0 must be false any any assign forward true + * 1 true match any delete forward true + * 1 true other any delete reverse true + * 1 false match any invalid true + * 1 false other none assign reverse true + * 1 false other any assign forward true + * 2 true match any delete forward path_currently_selected + * 2 true other match delete reverse path_currently_selected + * 2 true other other invalid path_currently_selected + * 2 false match any invalid path_currently_selected + * 2 false any match invalid path_currently_selected + * 2 false other other assign reverse path_currently_selected + * >2 any any any invalid path_currently_selected + */ + + nb_selected = gtk_tree_selection_count_selected_rows(selection); + if (gtk_tree_model_get_iter(model, &iter, path)) { + gtk_tree_model_get(GTK_TREE_MODEL(list_store), &iter, RTP_COL_DATA, &selected_stream, -1); + + switch (nb_selected) + { + case 0: + { + if (path_currently_selected) + g_print("Select: He, we've got a selected path while none is selected?\n"); + else + selected_stream_fwd = selected_stream; + break; + } + case 1: + { + if (path_currently_selected) + if (selected_stream == selected_stream_fwd) + selected_stream_fwd = NULL; + else + selected_stream_rev = NULL; + else + if (selected_stream == selected_stream_fwd) + g_print("Select: He, this can't be. 1 not selected but equal to fwd\n"); + else + if (selected_stream_rev) + selected_stream_fwd = selected_stream; + else + selected_stream_rev = selected_stream; + break; + } + case 2: + { + if (path_currently_selected) { + if (selected_stream == selected_stream_fwd) + selected_stream_fwd = NULL; + else if (selected_stream == selected_stream_rev) + selected_stream_rev = NULL; + else + g_print("Select: He, this can't be. 2 selected but not equal to fwd or rev\n"); + } + result = path_currently_selected; + break; + } + default: + { + g_print("Select: He, we're getting a too high selection count\n"); + result = path_currently_selected; + } + } + } + + if (selected_stream_fwd) { + g_snprintf(label_text, sizeof(label_text), "Forward: %s:%u -> %s:%u, SSRC=0x%X", + ep_address_to_display(&(selected_stream_fwd->src_addr)), + selected_stream_fwd->src_port, + ep_address_to_display(&(selected_stream_fwd->dest_addr)), + selected_stream_fwd->dest_port, + selected_stream_fwd->ssrc + ); + gtk_label_set_text(GTK_LABEL(label_fwd), label_text); + } else { + if (selected_stream_rev) + gtk_label_set_text(GTK_LABEL(label_fwd), FWD_ONLY_LABEL_TEXT); + else + gtk_label_set_text(GTK_LABEL(label_fwd), FWD_LABEL_TEXT); + } + + if (selected_stream_rev) { + g_snprintf(label_text, sizeof(label_text), "Reverse: %s:%u -> %s:%u, SSRC=0x%X", + ep_address_to_display(&(selected_stream_rev->src_addr)), + selected_stream_rev->src_port, + ep_address_to_display(&(selected_stream_rev->dest_addr)), + selected_stream_rev->dest_port, + selected_stream_rev->ssrc + ); + gtk_label_set_text(GTK_LABEL(label_rev), label_text); + } else { + gtk_label_set_text(GTK_LABEL(label_rev), REV_LABEL_TEXT); + } + + return result; } /****************************************************************************/ @@ -672,82 +672,82 @@ rtpstream_view_selection_func(GtkTreeSelection *selection, GtkTreeModel *model, static void add_to_list_store(rtp_stream_info_t* strinfo) { - gchar label_text[256]; - gchar *data[NUM_COLS]; - guint32 expected; - gint32 lost; - double perc; - int i; - char *savelocale; - - /* save the current locale */ - savelocale = g_strdup(setlocale(LC_NUMERIC, NULL)); - /* switch to "C" locale to avoid problems with localized decimal separators - in g_snprintf("%f") functions */ - setlocale(LC_NUMERIC, "C"); - - data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr))); - data[1] = NULL; - data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr))); - data[3] = NULL; - data[4] = g_strdup_printf("0x%X", strinfo->ssrc); - if (strinfo->info_payload_type_str != NULL) { - data[5] = g_strdup(strinfo->info_payload_type_str); - } else { - data[5] = g_strdup(val_to_str_ext(strinfo->pt, &rtp_payload_type_short_vals_ext, - "Unknown (%u)")); - } - data[6] = NULL; - - expected = (strinfo->rtp_stats.stop_seq_nr + strinfo->rtp_stats.cycles*65536) - - strinfo->rtp_stats.start_seq_nr + 1; - lost = expected - strinfo->rtp_stats.total_nr; - if (expected) { - perc = (double)(lost*100)/(double)expected; - } else { - perc = 0; - } - data[7] = g_strdup_printf("%d (%.1f%%)", lost, perc); - data[8] = NULL; - data[9] = NULL; - data[10] = NULL; - if (strinfo->problem) - data[11] = g_strdup("X"); - else - data[11] = g_strdup(""); - - /* restore previous locale setting */ - setlocale(LC_NUMERIC, savelocale); - g_free(savelocale); - - /* Acquire an iterator */ - gtk_list_store_append(list_store, &list_iter); - - /* Fill the new row */ - gtk_list_store_set(list_store, &list_iter, - RTP_COL_SRC_ADDR, data[0], - RTP_COL_SRC_PORT, strinfo->src_port, - RTP_COL_DST_ADDR, data[2], - RTP_COL_DST_PORT, strinfo->dest_port, - RTP_COL_SSRC, data[4], - RTP_COL_PAYLOAD, data[5], - RTP_COL_PACKETS, strinfo->npackets, - RTP_COL_LOST, data[7], - RTP_COL_MAX_DELTA, strinfo->rtp_stats.max_delta, - RTP_COL_MAX_JITTER, strinfo->rtp_stats.max_jitter, - RTP_COL_MEAN_JITTER, strinfo->rtp_stats.mean_jitter, - RTP_COL_PROBLEM, data[11], - RTP_COL_DATA, strinfo, - -1); - - for (i = 0; i < NUM_COLS-1; i++) - g_free(data[i]); - - /* Update the top label with the number of detected streams */ - g_snprintf(label_text, sizeof(label_text), - "Detected %d RTP streams. Choose one for forward and reverse direction for analysis", - ++streams_nb); - gtk_label_set_text(GTK_LABEL(top_label), label_text); + gchar label_text[256]; + gchar *data[NUM_COLS]; + guint32 expected; + gint32 lost; + double perc; + int i; + char *savelocale; + + /* save the current locale */ + savelocale = g_strdup(setlocale(LC_NUMERIC, NULL)); + /* switch to "C" locale to avoid problems with localized decimal separators + in g_snprintf("%f") functions */ + setlocale(LC_NUMERIC, "C"); + + data[0] = g_strdup(ep_address_to_display(&(strinfo->src_addr))); + data[1] = NULL; + data[2] = g_strdup(ep_address_to_display(&(strinfo->dest_addr))); + data[3] = NULL; + data[4] = g_strdup_printf("0x%X", strinfo->ssrc); + if (strinfo->info_payload_type_str != NULL) { + data[5] = g_strdup(strinfo->info_payload_type_str); + } else { + data[5] = g_strdup(val_to_str_ext(strinfo->pt, &rtp_payload_type_short_vals_ext, + "Unknown (%u)")); + } + data[6] = NULL; + + expected = (strinfo->rtp_stats.stop_seq_nr + strinfo->rtp_stats.cycles*65536) + - strinfo->rtp_stats.start_seq_nr + 1; + lost = expected - strinfo->rtp_stats.total_nr; + if (expected) { + perc = (double)(lost*100)/(double)expected; + } else { + perc = 0; + } + data[7] = g_strdup_printf("%d (%.1f%%)", lost, perc); + data[8] = NULL; + data[9] = NULL; + data[10] = NULL; + if (strinfo->problem) + data[11] = g_strdup("X"); + else + data[11] = g_strdup(""); + + /* restore previous locale setting */ + setlocale(LC_NUMERIC, savelocale); + g_free(savelocale); + + /* Acquire an iterator */ + gtk_list_store_append(list_store, &list_iter); + + /* Fill the new row */ + gtk_list_store_set(list_store, &list_iter, + RTP_COL_SRC_ADDR, data[0], + RTP_COL_SRC_PORT, strinfo->src_port, + RTP_COL_DST_ADDR, data[2], + RTP_COL_DST_PORT, strinfo->dest_port, + RTP_COL_SSRC, data[4], + RTP_COL_PAYLOAD, data[5], + RTP_COL_PACKETS, strinfo->npackets, + RTP_COL_LOST, data[7], + RTP_COL_MAX_DELTA, strinfo->rtp_stats.max_delta, + RTP_COL_MAX_JITTER, strinfo->rtp_stats.max_jitter, + RTP_COL_MEAN_JITTER, strinfo->rtp_stats.mean_jitter, + RTP_COL_PROBLEM, data[11], + RTP_COL_DATA, strinfo, + -1); + + for (i = 0; i < NUM_COLS-1; i++) + g_free(data[i]); + + /* Update the top label with the number of detected streams */ + g_snprintf(label_text, sizeof(label_text), + "Detected %d RTP streams. Choose one for forward and reverse direction for analysis", + ++streams_nb); + gtk_label_set_text(GTK_LABEL(top_label), label_text); } /****************************************************************************/ @@ -755,202 +755,202 @@ add_to_list_store(rtp_stream_info_t* strinfo) static void create_list_view(void) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer; - GtkTreeSortable *sortable; - GtkTreeView *list_view; - GtkTreeSelection *selection; - - /* Create the store */ - list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */ - G_TYPE_STRING, /* Source address */ - G_TYPE_UINT, /* Source port */ - G_TYPE_STRING, /* Destination address */ - G_TYPE_UINT, /* Destination port */ - G_TYPE_STRING, /* SSRC */ - G_TYPE_STRING, /* Payload */ - G_TYPE_UINT, /* Packets */ - G_TYPE_STRING, /* Lost */ - G_TYPE_DOUBLE, /* Max. delta */ - G_TYPE_DOUBLE, /* Max. jitter */ - G_TYPE_DOUBLE, /* Mean jitter */ - G_TYPE_STRING, /* Problem */ - G_TYPE_POINTER /* Data */ - ); - - /* Create a view */ - list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); - - list_view = GTK_TREE_VIEW(list); - sortable = GTK_TREE_SORTABLE(list_store); - - /* Speed up the list display */ - gtk_tree_view_set_fixed_height_mode(list_view, TRUE); - - /* Setup the sortable columns */ - gtk_tree_sortable_set_sort_column_id(sortable, RTP_COL_SRC_ADDR, GTK_SORT_ASCENDING); - gtk_tree_view_set_headers_clickable(list_view, FALSE); - - /* The view now holds a reference. We can get rid of our own reference */ - g_object_unref(G_OBJECT(list_store)); - - /* - * Create the first column packet, associating the "text" attribute of the - * cell_renderer to the first column of the model - */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Src addr", renderer, - "text", RTP_COL_SRC_ADDR, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_ADDR); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 100); - /* Add the column to the view. */ - gtk_tree_view_append_column(list_view, column); - - /* Source port */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Src port", renderer, - "text", RTP_COL_SRC_PORT, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_PORT); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* Destination address */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Dst addr", renderer, - "text", RTP_COL_DST_ADDR, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_ADDR); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 100); - gtk_tree_view_append_column(list_view, column); - - /* Destination port */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Dst port", renderer, - "text", RTP_COL_DST_PORT, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_PORT); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 80); - gtk_tree_view_append_column(list_view, column); - - /* SSRC */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("SSRC", renderer, - "text", RTP_COL_SSRC, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SSRC); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 70); - gtk_tree_view_column_set_fixed_width(column, 90); - gtk_tree_view_append_column(list_view, column); - - /* Payload */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Payload", renderer, - "text", RTP_COL_PAYLOAD, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PAYLOAD); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 80); - gtk_tree_view_column_set_fixed_width(column, 100); - gtk_tree_view_append_column(list_view, column); - - /* Packets */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Packets", renderer, - "text", RTP_COL_PACKETS, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PACKETS); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 70); - gtk_tree_view_append_column(list_view, column); - - /* Lost */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Lost", renderer, - "text", RTP_COL_LOST, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_LOST); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 60); - gtk_tree_view_column_set_fixed_width(column, 90); - gtk_tree_view_append_column(list_view, column); - - /* Max Delta (ms) */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Max Delta (ms)", renderer, - "text", RTP_COL_MAX_DELTA, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_DELTA); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 90); - gtk_tree_view_column_set_fixed_width(column, 130); - gtk_tree_view_append_column(list_view, column); - - /* Max Jitter (ms) */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Max Jitter (ms)", renderer, - "text", RTP_COL_MAX_JITTER, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_JITTER); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 50); - gtk_tree_view_column_set_fixed_width(column, 120); - gtk_tree_view_append_column(list_view, column); - - /* Mean Jitter (ms) */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Mean Jitter (ms)", renderer, - "text", RTP_COL_MEAN_JITTER, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MEAN_JITTER); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 50); - gtk_tree_view_column_set_fixed_width(column, 130); - gtk_tree_view_append_column(list_view, column); - - /* Problems? */ - renderer = gtk_cell_renderer_text_new(); - column = gtk_tree_view_column_new_with_attributes("Pb?", renderer, - "text", RTP_COL_PROBLEM, - NULL); - gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PROBLEM); - gtk_tree_view_column_set_resizable(column, TRUE); - gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); - gtk_tree_view_column_set_min_width(column, 30); - gtk_tree_view_column_set_fixed_width(column, 50); - gtk_tree_view_append_column(list_view, column); - - /* Now enable the sorting of each column */ - gtk_tree_view_set_rules_hint(list_view, TRUE); - gtk_tree_view_set_headers_clickable(list_view, TRUE); - - /* Setup the selection handler */ - selection = gtk_tree_view_get_selection(list_view); - - gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); - gtk_tree_selection_set_select_function(selection, rtpstream_view_selection_func, NULL, NULL); + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkTreeSortable *sortable; + GtkTreeView *list_view; + GtkTreeSelection *selection; + + /* Create the store */ + list_store = gtk_list_store_new(NUM_COLS, /* Total number of columns */ + G_TYPE_STRING, /* Source address */ + G_TYPE_UINT, /* Source port */ + G_TYPE_STRING, /* Destination address */ + G_TYPE_UINT, /* Destination port */ + G_TYPE_STRING, /* SSRC */ + G_TYPE_STRING, /* Payload */ + G_TYPE_UINT, /* Packets */ + G_TYPE_STRING, /* Lost */ + G_TYPE_DOUBLE, /* Max. delta */ + G_TYPE_DOUBLE, /* Max. jitter */ + G_TYPE_DOUBLE, /* Mean jitter */ + G_TYPE_STRING, /* Problem */ + G_TYPE_POINTER /* Data */ + ); + + /* Create a view */ + list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(list_store)); + + list_view = GTK_TREE_VIEW(list); + sortable = GTK_TREE_SORTABLE(list_store); + + /* Speed up the list display */ + gtk_tree_view_set_fixed_height_mode(list_view, TRUE); + + /* Setup the sortable columns */ + gtk_tree_sortable_set_sort_column_id(sortable, RTP_COL_SRC_ADDR, GTK_SORT_ASCENDING); + gtk_tree_view_set_headers_clickable(list_view, FALSE); + + /* The view now holds a reference. We can get rid of our own reference */ + g_object_unref(G_OBJECT(list_store)); + + /* + * Create the first column packet, associating the "text" attribute of the + * cell_renderer to the first column of the model + */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Src addr", renderer, + "text", RTP_COL_SRC_ADDR, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_ADDR); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 100); + /* Add the column to the view. */ + gtk_tree_view_append_column(list_view, column); + + /* Source port */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Src port", renderer, + "text", RTP_COL_SRC_PORT, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SRC_PORT); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* Destination address */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Dst addr", renderer, + "text", RTP_COL_DST_ADDR, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_ADDR); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 100); + gtk_tree_view_append_column(list_view, column); + + /* Destination port */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Dst port", renderer, + "text", RTP_COL_DST_PORT, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_DST_PORT); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 80); + gtk_tree_view_append_column(list_view, column); + + /* SSRC */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("SSRC", renderer, + "text", RTP_COL_SSRC, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_SSRC); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 70); + gtk_tree_view_column_set_fixed_width(column, 90); + gtk_tree_view_append_column(list_view, column); + + /* Payload */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Payload", renderer, + "text", RTP_COL_PAYLOAD, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PAYLOAD); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 80); + gtk_tree_view_column_set_fixed_width(column, 100); + gtk_tree_view_append_column(list_view, column); + + /* Packets */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Packets", renderer, + "text", RTP_COL_PACKETS, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PACKETS); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 70); + gtk_tree_view_append_column(list_view, column); + + /* Lost */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Lost", renderer, + "text", RTP_COL_LOST, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_LOST); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 60); + gtk_tree_view_column_set_fixed_width(column, 90); + gtk_tree_view_append_column(list_view, column); + + /* Max Delta (ms) */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Max Delta (ms)", renderer, + "text", RTP_COL_MAX_DELTA, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_DELTA); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 90); + gtk_tree_view_column_set_fixed_width(column, 130); + gtk_tree_view_append_column(list_view, column); + + /* Max Jitter (ms) */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Max Jitter (ms)", renderer, + "text", RTP_COL_MAX_JITTER, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MAX_JITTER); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 50); + gtk_tree_view_column_set_fixed_width(column, 120); + gtk_tree_view_append_column(list_view, column); + + /* Mean Jitter (ms) */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Mean Jitter (ms)", renderer, + "text", RTP_COL_MEAN_JITTER, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_MEAN_JITTER); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 50); + gtk_tree_view_column_set_fixed_width(column, 130); + gtk_tree_view_append_column(list_view, column); + + /* Problems? */ + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes("Pb?", renderer, + "text", RTP_COL_PROBLEM, + NULL); + gtk_tree_view_column_set_sort_column_id(column, RTP_COL_PROBLEM); + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + gtk_tree_view_column_set_min_width(column, 30); + gtk_tree_view_column_set_fixed_width(column, 50); + gtk_tree_view_append_column(list_view, column); + + /* Now enable the sorting of each column */ + gtk_tree_view_set_rules_hint(list_view, TRUE); + gtk_tree_view_set_headers_clickable(list_view, TRUE); + + /* Setup the selection handler */ + selection = gtk_tree_view_get_selection(list_view); + + gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE); + gtk_tree_selection_set_select_function(selection, rtpstream_view_selection_func, NULL, NULL); } @@ -1068,7 +1068,7 @@ rtpstream_dlg_create (void) /****************************************************************************/ -/* PUBLIC */ +/* PUBLIC */ /****************************************************************************/ /****************************************************************************/ @@ -1076,21 +1076,21 @@ rtpstream_dlg_create (void) /* list: pointer to list of rtp_stream_info_t* */ void rtpstream_dlg_update(GList *list_lcl) { - if (rtp_stream_dlg != NULL) { - gtk_list_store_clear(list_store); - streams_nb = 0; + if (rtp_stream_dlg != NULL) { + gtk_list_store_clear(list_store); + streams_nb = 0; - list_lcl = g_list_first(list_lcl); - while (list_lcl) - { - add_to_list_store((rtp_stream_info_t*)(list_lcl->data)); - list_lcl = g_list_next(list_lcl); - } + list_lcl = g_list_first(list_lcl); + while (list_lcl) + { + add_to_list_store((rtp_stream_info_t*)(list_lcl->data)); + list_lcl = g_list_next(list_lcl); + } - rtpstream_on_unselect(NULL, NULL); - } + rtpstream_on_unselect(NULL, NULL); + } - last_list = list_lcl; + last_list = list_lcl; } @@ -1099,19 +1099,19 @@ void rtpstream_dlg_update(GList *list_lcl) /* list: pointer to list of rtp_stream_info_t* */ void rtpstream_dlg_show(GList *list_lcl) { - if (rtp_stream_dlg != NULL) { - /* There's already a dialog box; reactivate it. */ - reactivate_window(rtp_stream_dlg); - /* Another list since last call? */ - if (list_lcl != last_list) { - rtpstream_dlg_update(list_lcl); - } - } - else { - /* Create and show the dialog box */ - rtpstream_dlg_create(); - rtpstream_dlg_update(list_lcl); - } + if (rtp_stream_dlg != NULL) { + /* There's already a dialog box; reactivate it. */ + reactivate_window(rtp_stream_dlg); + /* Another list since last call? */ + if (list_lcl != last_list) { + rtpstream_dlg_update(list_lcl); + } + } + else { + /* Create and show the dialog box */ + rtpstream_dlg_create(); + rtpstream_dlg_update(list_lcl); + } } @@ -1119,16 +1119,16 @@ void rtpstream_dlg_show(GList *list_lcl) /* entry point when called via the GTK menu */ void rtpstream_launch(GtkAction *action _U_, gpointer user_data _U_) { - /* Register the tap listener */ - register_tap_listener_rtp_stream(); + /* Register the tap listener */ + register_tap_listener_rtp_stream(); - /* Scan for RTP streams (redissect all packets) */ - rtpstream_scan(); + /* Scan for RTP streams (redissect all packets) */ + rtpstream_scan(); - /* Show the dialog box with the list of streams */ - rtpstream_dlg_show(rtpstream_get_info()->strinfo_list); + /* Show the dialog box with the list of streams */ + rtpstream_dlg_show(rtpstream_get_info()->strinfo_list); - /* Tap listener will be removed and cleaned up in rtpstream_on_destroy */ + /* Tap listener will be removed and cleaned up in rtpstream_on_destroy */ } /****************************************************************************/ @@ -1143,9 +1143,9 @@ register_tap_listener_rtp_stream_dlg(void) * Local variables: * c-basic-offset: 4 * tab-width: 8 - * indent-tabs-mode: t + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=4 tabstop=8 noexpandtab: - * :indentSize=4:tabSize=8:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ |