diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gtk/capture_dlg.c | 47 | ||||
-rw-r--r-- | ui/gtk/prefs_capture.c | 351 |
2 files changed, 386 insertions, 12 deletions
diff --git a/ui/gtk/capture_dlg.c b/ui/gtk/capture_dlg.c index 8f92512a70..dadae7ec32 100644 --- a/ui/gtk/capture_dlg.c +++ b/ui/gtk/capture_dlg.c @@ -1248,11 +1248,16 @@ insert_new_rows(GList *list) device.display_name = g_strdup(if_string); } #if defined(_WIN32) || defined(HAVE_PCAP_CREATE) - device.buffer = global_capture_opts.default_options.buffer_size; + if ((device.buffer = capture_dev_user_buffersize_find(if_string->name)) == -1) { + device.buffer = global_capture_opts.default_options.buffer_size; + } #endif device.pmode = global_capture_opts.default_options.promisc_mode; device.has_snaplen = global_capture_opts.default_options.has_snaplen; - device.snaplen = global_capture_opts.default_options.snaplen; + device.snap_pref = TRUE; + if ((device.snaplen = capture_dev_user_buffersize_find(if_string->name)) == -1) { + device.snaplen = global_capture_opts.default_options.snaplen; + } device.cfilter = g_strdup(global_capture_opts.default_options.cfilter); monitor_mode = prefs_capture_device_monitor_mode(if_string); caps = capture_get_if_capabilities(if_string, monitor_mode, NULL); @@ -1344,9 +1349,9 @@ insert_new_rows(GList *list) } #if defined(HAVE_PCAP_CREATE) - gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, FALSE, IFACE_HIDDEN_NAME, device.name, INTERFACE, temp, LINK, link_type_name, PMODE, (device.pmode?"enabled":"disabled"), SNAPLEN, snaplen_string, BUFFER, (guint) global_capture_opts.default_options.buffer_size, MONITOR, "no",FILTER, "",-1); + gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, FALSE, IFACE_HIDDEN_NAME, device.name, INTERFACE, temp, LINK, link_type_name, PMODE, (device.pmode?"enabled":"disabled"), SNAPLEN, snaplen_string, BUFFER, device.buffer, MONITOR, "no",FILTER, "",-1); #elif defined(_WIN32) && !defined(HAVE_PCAP_CREATE) - gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, FALSE, IFACE_HIDDEN_NAME, device.name, INTERFACE, temp, LINK, link_type_name, PMODE, (device.pmode?"enabled":"disabled"), SNAPLEN, snaplen_string, BUFFER, (guint) global_capture_opts.default_options.buffer_size, FILTER, "",-1); + gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, FALSE, IFACE_HIDDEN_NAME, device.name, INTERFACE, temp, LINK, link_type_name, PMODE, (device.pmode?"enabled":"disabled"), SNAPLEN, snaplen_string, BUFFER, device.buffer, FILTER, "",-1); #else gtk_list_store_set (GTK_LIST_STORE(model), &iter, CAPTURE, FALSE, IFACE_HIDDEN_NAME, device.name, INTERFACE, temp, LINK, link_type_name, PMODE, (device.pmode?"enabled":"disabled"), SNAPLEN, snaplen_string, -1); #endif @@ -2476,6 +2481,9 @@ save_options_cb(GtkWidget *win _U_, gpointer user_data _U_) device.pmode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(promisc_cb)); device.has_snaplen = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(snap_cb)); if (device.has_snaplen) { + if (device.snaplen != (guint)gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(snap_sb))) { + device.snap_pref = FALSE; + } device.snaplen = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(snap_sb)); if (device.snaplen < 1) device.snaplen = WTAP_MAX_PACKET_SIZE; @@ -2518,6 +2526,7 @@ adjust_snap_sensitivity(GtkWidget *tb _U_, gpointer parent_w _U_) gtk_widget_set_sensitive(GTK_WIDGET(snap_sb), gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(snap_cb))); device.has_snaplen = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(snap_cb)); + device.snap_pref = FALSE; g_array_insert_val(global_capture_opts.all_ifaces, marked_interface, device); } @@ -5445,6 +5454,9 @@ create_and_fill_model(GtkTreeView *view) guint i; link_row *linkr = NULL; interface_t device; + gint buffer; + gint snaplen; + gboolean hassnap, has_snaplen; #if defined(HAVE_PCAP_CREATE) store = gtk_list_store_new (9, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_STRING); @@ -5470,10 +5482,31 @@ create_and_fill_model(GtkTreeView *view) break; } } - if (device.has_snaplen) { - snaplen_string = g_strdup_printf("%d", device.snaplen); - } else { + hassnap = capture_dev_user_hassnap_find(device.name); + snaplen = device.snaplen; + has_snaplen = device.has_snaplen; + if (!device.snap_pref) { + if (has_snaplen) { + snaplen_string = g_strdup_printf("%d", device.snaplen); + } else { + snaplen_string = g_strdup("default"); + } + } else if ((hassnap == -1 || !hassnap)) { snaplen_string = g_strdup("default"); + } else { + snaplen = capture_dev_user_snaplen_find(device.name); + device.snaplen = snaplen; + device.has_snaplen = TRUE; + global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); + g_array_insert_val(global_capture_opts.all_ifaces, i, device); + snaplen_string = g_strdup_printf("%d", device.snaplen); + } + buffer = device.buffer; + if (buffer == DEFAULT_CAPTURE_BUFFER_SIZE && capture_dev_user_buffersize_find(device.name) != DEFAULT_CAPTURE_BUFFER_SIZE && capture_dev_user_buffersize_find(device.name) != -1) { + buffer = capture_dev_user_buffersize_find(device.name); + device.buffer = buffer; + global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); + g_array_insert_val(global_capture_opts.all_ifaces, i, device); } gtk_list_store_append (store, &iter); #if defined(HAVE_PCAP_CREATE) diff --git a/ui/gtk/prefs_capture.c b/ui/gtk/prefs_capture.c index def472ef87..9db23cf3cf 100644 --- a/ui/gtk/prefs_capture.c +++ b/ui/gtk/prefs_capture.c @@ -69,6 +69,10 @@ static GtkWidget *cur_list, *if_dev_lb, *if_name_lb, *if_linktype_lb, *if_linkty #ifdef HAVE_PCAP_CREATE static GtkWidget *if_monitor_lb, *if_monitor_cb; #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) +static GtkWidget *if_buffersize_lb, *if_buffersize_cb; +#endif +static GtkWidget *if_snaplen_lb, *if_snaplen_cb, *if_snaplen_tg; static GtkTreeSelection *if_selection; /* current interface row selected */ static int num_linktypes; static gboolean interfaces_info_nochange; /* TRUE to ignore Interface Options Properties */ @@ -84,6 +88,11 @@ static void ifopts_edit_monitor_changed_cb(GtkToggleButton *tbt, gpointer udata) static void ifopts_edit_linktype_changed_cb(GtkComboBox *ed, gpointer udata); static void ifopts_edit_descr_changed_cb(GtkEditable *ed, gpointer udata); static void ifopts_edit_hide_changed_cb(GtkToggleButton *tbt, gpointer udata); +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) +static void ifopts_edit_buffersize_changed_cb(GtkSpinButton *ed, gpointer udata); +#endif +static void ifopts_edit_snaplen_changed_cb(GtkSpinButton *ed, gpointer udata); +static void ifopts_edit_hassnap_changed_cb(GtkToggleButton *tbt, gpointer udata); static void ifopts_options_add(GtkListStore *list_store, if_info_t *if_info); static void ifopts_options_free(gchar *text[]); static void ifopts_if_liststore_add(void); @@ -91,6 +100,8 @@ static void ifopts_if_liststore_add(void); static void ifopts_write_new_monitor_mode(void); #endif static void ifopts_write_new_linklayer(void); +static void ifopts_write_new_buffersize(void); +static void ifopts_write_new_snaplen(void); static void ifopts_write_new_descr(void); static void ifopts_write_new_hide(void); @@ -322,6 +333,11 @@ enum #ifdef HAVE_PCAP_CREATE DEF_MONITOR_MODE_COLUMN, #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + BUF_COLUMN, +#endif + HASSNAP_COLUMN, + SNAPLEN_COLUMN, DEF_LINK_LAYER_COLUMN, COMMENT_COLUMN, HIDE_COLUMN, @@ -553,7 +569,10 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) GtkCellRenderer *renderer; GtkTreeView *list_view; GtkTreeSelection *selection; - +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + GtkAdjustment *buffer_size_adj; +#endif + GtkAdjustment *snaplen_adj; int row = 0; GtkWidget *caller = gtk_widget_get_toplevel(w); @@ -596,6 +615,11 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) #ifdef HAVE_PCAP_CREATE G_TYPE_BOOLEAN, /* Monitor mode */ #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + G_TYPE_INT, /* Buffer size */ +#endif + G_TYPE_BOOLEAN, /* Has snap length */ + G_TYPE_INT, /* Snap length */ G_TYPE_STRING, /* Default link-layer */ G_TYPE_STRING, /* Comment */ G_TYPE_BOOLEAN, /* Hide? */ @@ -653,6 +677,37 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) gtk_tree_view_append_column (list_view, column); #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + renderer = gtk_cell_renderer_spin_new (); + buffer_size_adj = (GtkAdjustment *) gtk_adjustment_new(DEFAULT_CAPTURE_BUFFER_SIZE, 1, 65535, 1.0, 10.0, 0.0); + g_object_set(G_OBJECT(renderer), "adjustment", buffer_size_adj, NULL); + column = gtk_tree_view_column_new_with_attributes ("Default buffer size", renderer, + "text", BUF_COLUMN, + NULL); + + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + /* Add the column to the view. */ + gtk_tree_view_append_column (list_view, column); +#endif + renderer = gtk_cell_renderer_toggle_new (); + column = gtk_tree_view_column_new_with_attributes ("Has snap length mode", renderer, + "active", HASSNAP_COLUMN, + NULL); + gtk_tree_view_column_set_resizable(column, FALSE); + /*gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);*/ + renderer = gtk_cell_renderer_spin_new (); + snaplen_adj = (GtkAdjustment *) gtk_adjustment_new(WTAP_MAX_PACKET_SIZE, 1, WTAP_MAX_PACKET_SIZE, 1.0, 10.0, 0.0); + g_object_set(G_OBJECT(renderer), "adjustment", snaplen_adj, NULL); + column = gtk_tree_view_column_new_with_attributes ("Default snap length", renderer, + "text", SNAPLEN_COLUMN, + NULL); + + gtk_tree_view_column_set_resizable(column, TRUE); + gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); + /* Add the column to the view. */ + gtk_tree_view_append_column (list_view, column); + renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Default link-layer", renderer, "text", DEF_LINK_LAYER_COLUMN, @@ -767,9 +822,41 @@ ifopts_edit_cb(GtkWidget *w, gpointer data _U_) cur_list); ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_monitor_cb, 1, row, 1, 1); gtk_widget_show(if_monitor_cb); - row++; + row++; #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + if_buffersize_lb = gtk_label_new("Default buffer size:"); + ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_buffersize_lb, 0, row, 1, 1); + gtk_misc_set_alignment(GTK_MISC(if_buffersize_lb), 1.0f, 0.5f); + gtk_widget_show(if_buffersize_lb); + buffer_size_adj = (GtkAdjustment *) gtk_adjustment_new(DEFAULT_CAPTURE_BUFFER_SIZE, 1, 65535, 1.0, 10.0, 0.0); + if_buffersize_cb = gtk_spin_button_new (buffer_size_adj, 0, 0); + g_signal_connect(if_buffersize_cb, "value-changed", G_CALLBACK(ifopts_edit_buffersize_changed_cb), + cur_list); + ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_buffersize_cb, 1, row, 1, 1); + gtk_widget_show(if_buffersize_cb); + row++; +#endif + + if_snaplen_lb = gtk_label_new("Limit each packet to:"); + ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_snaplen_lb, 0, row, 1, 1); + gtk_misc_set_alignment(GTK_MISC(if_snaplen_lb), 1.0f, 0.5f); + gtk_widget_show(if_snaplen_lb); + if_snaplen_tg = gtk_check_button_new(); + g_signal_connect(if_snaplen_tg, "toggled", G_CALLBACK(ifopts_edit_hassnap_changed_cb), + cur_list); + ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_snaplen_tg, 2, row, 1, 1); + gtk_widget_show(if_snaplen_tg); + snaplen_adj = (GtkAdjustment *) gtk_adjustment_new(65535, 1, 65535, 1.0, 10.0, 0.0); + if_snaplen_cb = gtk_spin_button_new (snaplen_adj, 0, 0); + g_signal_connect(if_snaplen_cb, "value-changed", G_CALLBACK(ifopts_edit_snaplen_changed_cb), + cur_list); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON (if_snaplen_cb), TRUE); + ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_snaplen_cb, 1, row, 1, 1); + gtk_widget_show(if_snaplen_cb); + row++; + if_linktype_lb = gtk_label_new("Default link-layer header type:"); ws_gtk_grid_attach_defaults(GTK_GRID(main_grid), if_linktype_lb, 0, row, 1, 1); gtk_misc_set_alignment(GTK_MISC(if_linktype_lb), 1.0f, 0.5f); @@ -913,7 +1000,15 @@ ifopts_edit_ok_cb(GtkWidget *w _U_, gpointer parent_w) /* create/write new "hidden" interfaces string */ ifopts_write_new_hide(); - } + +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + /* create/write new "buffersize" interfaces string */ + ifopts_write_new_buffersize(); +#endif + + /* create/write new "snaplen" interfaces string */ + ifopts_write_new_snaplen(); +} /* Update everything that shows an interface list that includes local interfaces. */ @@ -1004,7 +1099,11 @@ ifopts_edit_ifsel_cb(GtkTreeSelection *selection _U_, #ifdef HAVE_PCAP_CREATE gboolean monitor_mode; #endif - gboolean hide, hide_enabled = TRUE; +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + gint buffersize; +#endif + gint snaplen; + gboolean hide, hide_enabled = TRUE, hassnap = FALSE; if_capabilities_t *caps; gint selected = 0; @@ -1018,6 +1117,11 @@ ifopts_edit_ifsel_cb(GtkTreeSelection *selection _U_, #ifdef HAVE_PCAP_CREATE DEF_MONITOR_MODE_COLUMN, &monitor_mode, #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + BUF_COLUMN, &buffersize, +#endif + HASSNAP_COLUMN, &hassnap, + SNAPLEN_COLUMN, &snaplen, DEF_LINK_LAYER_COLUMN, &linktype, COMMENT_COLUMN, &comment, HIDE_COLUMN, &hide, @@ -1029,6 +1133,14 @@ ifopts_edit_ifsel_cb(GtkTreeSelection *selection _U_, /* display the interface name from current interfaces selection */ gtk_label_set_text(GTK_LABEL(if_name_lb), desc); + /* display the buffer size from current interfaces selection */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON (if_buffersize_cb), buffersize); + + /* display the snap length from current interfaces selection */ + gtk_spin_button_set_value(GTK_SPIN_BUTTON (if_snaplen_cb), snaplen); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(if_snaplen_tg), hassnap); + gtk_widget_set_sensitive(GTK_WIDGET(if_snaplen_cb), hassnap); + /* Ignore "changed" callbacks while we update the Properties widgets */ interfaces_info_nochange = TRUE; @@ -1257,6 +1369,95 @@ ifopts_edit_linktype_changed_cb(GtkComboBox *cb, gpointer udata) } } +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) +/* + * Buffer size entry changed callback; update list_store for currently selected interface. + */ +static void +ifopts_edit_buffersize_changed_cb(GtkSpinButton *sb, gpointer udata) +{ + gint buffersize; + GtkTreeModel *list_model; + GtkTreeIter list_iter; + GtkListStore *list_store; + + if (if_selection == NULL) /* XXX: Cannot be NULL ?? */ + return; + + if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){ + return; + } + + + /* get current description text and set value in list_store for currently selected interface */ + buffersize = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sb)); + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); /* Get store */ + gtk_list_store_set (list_store, &list_iter, + BUF_COLUMN, buffersize, + -1); +} +#endif + +/* + * Snap length entry changed callback; update list_store for currently selected interface. + */ +static void +ifopts_edit_snaplen_changed_cb(GtkSpinButton *sb _U_, gpointer udata _U_) +{ + gint snaplen; + gboolean hassnap; + GtkTreeModel *list_model; + GtkTreeIter list_iter; + GtkListStore *list_store; + + if (if_selection == NULL) /* XXX: Cannot be NULL ?? */ + return; + + if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){ + return; + } + + + /* get current description text and set value in list_store for currently selected interface */ + snaplen = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sb)); + if (snaplen != WTAP_MAX_PACKET_SIZE) { + hassnap = TRUE; + } else { + hassnap = FALSE; + } + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); + gtk_list_store_set (list_store, &list_iter, + SNAPLEN_COLUMN, snaplen, + HASSNAP_COLUMN, hassnap, + -1); +} + +/* + * Checkbutton for the Snap length changed callback; update list_store for currently selected interface. + */ +static void +ifopts_edit_hassnap_changed_cb(GtkToggleButton *tbt, gpointer udata) +{ + gboolean hassnap; + GtkTreeModel *list_model; + GtkTreeIter list_iter; + GtkListStore *list_store; + + if (if_selection == NULL) /* XXX: Cannot be NULL ?? */ + return; + + if (!gtk_tree_selection_get_selected (if_selection, &list_model, &list_iter)){ + return; + } + hassnap = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tbt)); + + list_store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW (udata))); + gtk_list_store_set (list_store, &list_iter, + HASSNAP_COLUMN, hassnap, + -1); + gtk_widget_set_sensitive(GTK_WIDGET(if_snaplen_cb), hassnap); +} + /* * Comment text entry changed callback; update list_store for currently selected interface. */ @@ -1345,7 +1546,11 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info) gboolean monitor_mode; #endif gint linktype; - gboolean hide; +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + gint buffersize; +#endif + gint snaplen; + gboolean hide, hassnap = TRUE; GtkTreeIter iter; /* set device name text */ @@ -1387,6 +1592,20 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info) } free_if_capabilities(caps); } + + buffersize = capture_dev_user_buffersize_find(if_info->name); + if (buffersize == -1) { + buffersize = DEFAULT_CAPTURE_BUFFER_SIZE; + } + + snaplen = capture_dev_user_snaplen_find(if_info->name); + hassnap = capture_dev_user_hassnap_find(if_info->name); + if (!hassnap || hassnap == -1) { + snaplen = WTAP_MAX_PACKET_SIZE; + hassnap = FALSE; + } + + /* if we have no link-layer */ if (text[2] == NULL) text[2] = g_strdup(""); @@ -1451,6 +1670,11 @@ ifopts_options_add(GtkListStore *list_store, if_info_t *if_info) #ifdef HAVE_PCAP_CREATE DEF_MONITOR_MODE_COLUMN, monitor_mode, #endif +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) + BUF_COLUMN, buffersize, +#endif + HASSNAP_COLUMN, hassnap, + SNAPLEN_COLUMN, snaplen, DEF_LINK_LAYER_COLUMN, text[2], COMMENT_COLUMN, text[3], HIDE_COLUMN, hide, @@ -1618,6 +1842,123 @@ ifopts_write_new_linklayer(void) } } +#if defined(_WIN32) || defined(HAVE_PCAP_CREATE) +/* + * Create/write new interfaces buffer size string based on current CList. + * Put it into the preferences value. + */ +static void +ifopts_write_new_buffersize(void) +{ + GtkListStore *store; + GtkTreeIter iter; + GtkTreeModel *model; + + gboolean more_items = TRUE, first_if = TRUE; /* flag to check if first in list */ + gchar *ifnm; + gint buffersize; + gchar *tmp_buffersize; + gchar *new_buffersize; + + /* new preferences interfaces buffer size string */ + new_buffersize = g_malloc0(MAX_VAL_LEN); + + /* get buffer size for each row (interface) */ + model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_list)); + store = GTK_LIST_STORE(model); + if( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter) ) { + + while (more_items) { + gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, + DEVICE_COLUMN, &ifnm, + BUF_COLUMN, &buffersize, + -1); + if (buffersize == -1){ + more_items = gtk_tree_model_iter_next (model,&iter); + continue; + } + + if (first_if != TRUE) { + g_strlcat (new_buffersize, ",", MAX_VAL_LEN); + } + /* + * create/cat interface buffersize to new string + * (leave space for parens, comma and terminator) + */ + tmp_buffersize = g_strdup_printf("%s(%d)", ifnm, buffersize); + g_strlcat(new_buffersize, tmp_buffersize, MAX_VAL_LEN); + g_free(tmp_buffersize); + g_free(ifnm); + /* set first-in-list flag to false */ + first_if = FALSE; + more_items = gtk_tree_model_iter_next (model,&iter); + } + + /* write new buffersize string to preferences */ + g_free(prefs.capture_devices_buffersize); + prefs.capture_devices_buffersize = new_buffersize; + } +} +#endif + +/* + * Create/write new interfaces buffer size string based on current CList. + * Put it into the preferences value. + */ +static void +ifopts_write_new_snaplen(void) +{ + GtkListStore *store; + GtkTreeIter iter; + GtkTreeModel *model; + + gboolean more_items = TRUE, first_if = TRUE; /* flag to check if first in list */ + gchar *ifnm; + gint snaplen; + gboolean hassnap; + gchar *tmp_snaplen; + gchar *new_snaplen; + + /* new preferences interfaces snap length string */ + new_snaplen = g_malloc0(MAX_VAL_LEN); + + /* get snap length for each row (interface) */ + model = gtk_tree_view_get_model(GTK_TREE_VIEW(cur_list)); + store = GTK_LIST_STORE(model); + if( gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter) ) { + + while (more_items) { + gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, + DEVICE_COLUMN, &ifnm, + SNAPLEN_COLUMN, &snaplen, + HASSNAP_COLUMN, &hassnap, + -1); + if (snaplen == -1){ + more_items = gtk_tree_model_iter_next (model,&iter); + continue; + } + if (first_if != TRUE) { + g_strlcat (new_snaplen, ",", MAX_VAL_LEN); + } + /* + * create/cat interface snap length to new string + * (leave space for parens, comma and terminator) + */ + tmp_snaplen = g_strdup_printf("%s:%d(%d)", ifnm, hassnap, (hassnap?snaplen:WTAP_MAX_PACKET_SIZE)); + g_strlcat(new_snaplen, tmp_snaplen, MAX_VAL_LEN); + g_free(tmp_snaplen); + g_free(ifnm); + /* set first-in-list flag to false */ + first_if = FALSE; + more_items = gtk_tree_model_iter_next (model,&iter); + } + + /* write new snap length string to preferences */ + g_free(prefs.capture_devices_snaplen); + prefs.capture_devices_snaplen = new_snaplen; + } +} + /* * Create/write new interfaces description string based on current CList. * Put it into the preferences value. |