diff options
author | Sake Blok <sake@euronet.nl> | 2011-03-08 01:52:25 +0000 |
---|---|---|
committer | Sake Blok <sake@euronet.nl> | 2011-03-08 01:52:25 +0000 |
commit | 307c0d70fbf7343fbdc37bb324945de1c27a96da (patch) | |
tree | 3bc38d1ce7d66021eba710361c78a0404e670bc7 /file.c | |
parent | 4f8edc81e68e349f821790920bc7cee59d084c13 (diff) | |
download | wireshark-307c0d70fbf7343fbdc37bb324945de1c27a96da.tar.gz |
Removal of the old packet-list in favor of the new packet list.
It compiles with "./configure without options" on my Mac. Let's see what the buildbots have to say about it :-)
svn path=/trunk/; revision=36161
Diffstat (limited to 'file.c')
-rw-r--r-- | file.c | 748 |
1 files changed, 2 insertions, 746 deletions
@@ -127,9 +127,7 @@ static void cf_open_failure_alert_box(const char *filename, int err, static const char *file_rename_error_message(int err); static void cf_write_failure_alert_box(const char *filename, int err); static void cf_close_failure_alert_box(const char *filename, int err); -#ifdef NEW_PACKET_LIST static void ref_time_packets(capture_file *cf); -#endif /* Update the progress bar this many times when reading a file. */ #define N_PROGBAR_UPDATES 100 /* We read around 200k/100ms don't update the progress bar more often than that */ @@ -200,9 +198,7 @@ cf_callback_remove(cf_callback_t func) void cf_timestamp_auto_precision(capture_file *cf) { -#ifdef NEW_PACKET_LIST int i; -#endif int prec = timestamp_get_precision(); @@ -243,7 +239,6 @@ cf_timestamp_auto_precision(capture_file *cf) g_assert_not_reached(); } } -#ifdef NEW_PACKET_LIST /* Set the column widths of those columns that show the time in "command-line-specified" format. */ for (i = 0; i < cf->cinfo.num_cols; i++) { @@ -251,7 +246,6 @@ cf_timestamp_auto_precision(capture_file *cf) new_packet_list_resize_column(i); } } -#endif } gulong @@ -350,15 +344,10 @@ cf_open(capture_file *cf, const char *fname, gboolean is_tempfile, int *err) g_assert(cf->plist_chunk); #endif -#ifdef NEW_PACKET_LIST /* Adjust timestamp precision if auto is selected, col width will be adjusted */ cf_timestamp_auto_precision(cf); /* XXX needed ? */ new_packet_list_queue_draw(); -#else - /* change the time formats now, as we might have a new precision */ - cf_change_time_formats(cf); -#endif fileset_file_opened(fname); if(cf->cd_t == WTAP_FILE_BER) { @@ -428,15 +417,9 @@ cf_reset_state(capture_file *cf) cf->finfo_selected = NULL; /* Clear the packet list. */ -#ifdef NEW_PACKET_LIST new_packet_list_freeze(); new_packet_list_clear(); new_packet_list_thaw(); -#else - packet_list_freeze(); - packet_list_clear(); - packet_list_thaw(); -#endif cf->f_datalen = 0; cf->count = 0; @@ -581,11 +564,7 @@ cf_read(capture_file *cf, gboolean from_save) /* Progress so far. */ progbar_val = 0.0f; -#ifdef NEW_PACKET_LIST new_packet_list_freeze(); -#else - packet_list_freeze(); -#endif stop_flag = FALSE; g_get_current_time(&start_time); @@ -620,17 +599,10 @@ cf_read(capture_file *cf, gboolean from_save) if (progbar_quantum > 500000 || displayed_once == 0) { if ((auto_scroll_live || displayed_once == 0 || cf->displayed_count < 1000) && cf->plist_end != NULL) { displayed_once = 1; -#ifdef NEW_PACKET_LIST new_packet_list_thaw(); if (auto_scroll_live) new_packet_list_moveto_end(); new_packet_list_freeze(); -#else - packet_list_thaw(); - if (auto_scroll_live) - packet_list_moveto_end(); - packet_list_freeze(); -#endif /* NEW_PACKET_LIST */ } } #endif /* HAVE_LIBPCAP */ @@ -706,11 +678,7 @@ cf_read(capture_file *cf, gboolean from_save) cf->current_frame = cf->first_displayed; cf->current_row = 0; -#ifdef NEW_PACKET_LIST new_packet_list_thaw(); -#else - packet_list_thaw(); -#endif if (from_save == FALSE) cf_callback_invoke(cf_cb_file_read_finished, cf); else @@ -719,11 +687,7 @@ cf_read(capture_file *cf, gboolean from_save) /* If we have any displayed packets to select, select the first of those packets by making the first row the selected row. */ if (cf->first_displayed != NULL){ -#ifdef NEW_PACKET_LIST new_packet_list_select_first_row(); -#else - packet_list_select_row(0); -#endif /* NEW_PACKET_LIST */ } if(stop_flag) { @@ -819,14 +783,9 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) *err = 0; -#ifdef NEW_PACKET_LIST new_packet_list_check_end(); /* Don't freeze/thaw the list when doing live capture */ /*new_packet_list_freeze();*/ -#else - packet_list_check_end(); - packet_list_freeze(); -#endif /*g_log(NULL, G_LOG_LEVEL_MESSAGE, "cf_continue_tail: %u new: %u", cf->count, to_read);*/ @@ -868,12 +827,8 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) /* XXX - how to avoid a busy wait? */ /* Sleep(100); */ }; -#ifdef NEW_PACKET_LIST /* Don't freeze/thaw the list when doing live capture */ /*new_packet_list_thaw();*/ -#else - packet_list_thaw(); -#endif return CF_READ_ABORTED; } ENDTRY; @@ -888,7 +843,6 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) /*g_log(NULL, G_LOG_LEVEL_MESSAGE, "cf_continue_tail: count %u state: %u err: %u", cf->count, cf->state, *err);*/ -#ifdef NEW_PACKET_LIST /* Don't freeze/thaw the list when doing live capture */ /*new_packet_list_thaw();*/ /* With the new packet list the first packet @@ -896,23 +850,11 @@ cf_continue_tail(capture_file *cf, volatile int to_read, int *err) */ if(!cf->current_frame) new_packet_list_select_first_row(); -#else - /* XXX - this causes "flickering" of the list */ - packet_list_thaw(); -#endif /* moving to the end of the packet list - if the user requested so and we have some new packets. */ if (newly_displayed_packets && auto_scroll_live && cf->plist_end != NULL) -#ifdef NEW_PACKET_LIST new_packet_list_moveto_end(); -#else - /* this doesn't seem to work well with a frozen GTK_Clist, so do this after - packet_list_thaw() is done, see bugzilla 1188 */ - /* XXX - this cheats and looks inside the packet list to find the final - row number. */ - packet_list_moveto_end(); -#endif /* NEW_PACKET_LIST */ if (cf->state == FILE_READ_ABORTED) { /* Well, the user decided to exit Wireshark. Return CF_READ_ABORTED @@ -965,14 +907,9 @@ cf_finish_tail(capture_file *cf, int *err) return CF_READ_ERROR; } -#ifdef NEW_PACKET_LIST new_packet_list_check_end(); /* Don't freeze/thaw the list when doing live capture */ /*new_packet_list_freeze();*/ -#else - packet_list_check_end(); - packet_list_freeze(); -#endif while ((wtap_read(cf->wth, err, &err_info, &data_offset))) { if (cf->state == FILE_READ_ABORTED) { @@ -989,12 +926,8 @@ cf_finish_tail(capture_file *cf, int *err) dfilter_free(dfcode); } -#ifdef NEW_PACKET_LIST /* Don't freeze/thaw the list when doing live capture */ /*new_packet_list_thaw();*/ -#else - packet_list_thaw(); -#endif if (cf->state == FILE_READ_ABORTED) { /* Well, the user decided to abort the read. We're only called @@ -1007,13 +940,7 @@ cf_finish_tail(capture_file *cf, int *err) } if (auto_scroll_live && cf->plist_end != NULL) -#ifdef NEW_PACKET_LIST new_packet_list_moveto_end(); -#else - /* XXX - this cheats and looks inside the packet list to find the final - row number. */ - packet_list_moveto_end(); -#endif /* We're done reading sequentially through the file. */ cf->state = FILE_READ_DONE; @@ -1143,7 +1070,6 @@ void cf_set_rfcode(capture_file *cf, dfilter_t *rfcode) cf->rfcode = rfcode; } -#ifdef NEW_PACKET_LIST static int add_packet_to_packet_list(frame_data *fdata, capture_file *cf, dfilter_t *dfcode, gboolean filtering_tap_listeners, @@ -1232,124 +1158,6 @@ add_packet_to_packet_list(frame_data *fdata, capture_file *cf, return row; } -#else - -static int -add_packet_to_packet_list(frame_data *fdata, capture_file *cf, - dfilter_t *dfcode, gboolean filtering_tap_listeners, - guint tap_flags, - union wtap_pseudo_header *pseudo_header, const guchar *buf, - gboolean refilter, - gboolean add_to_packet_list _U_) -{ - gboolean create_proto_tree = FALSE; - epan_dissect_t edt; - column_info *cinfo; - gint row = -1; - - cinfo = &cf->cinfo; - - /* just add some value here until we know if it is being displayed or not */ - fdata->cum_bytes = cum_bytes + fdata->pkt_len; - - frame_data_set_before_dissect(fdata, &cf->elapsed_time, - &first_ts, &prev_dis_ts, &prev_cap_ts); - - /* If either - - we have a display filter and are re-applying it; - - we have a list of color filters; - - we have tap listeners with filters; - - we have tap listeners that require a protocol tree; - - we have custom columns; - - allocate a protocol tree root node, so that we'll construct - a protocol tree against which a filter expression can be - evaluated. */ - if ((dfcode != NULL && refilter) || - color_filters_used() || - have_custom_cols(cinfo) || - filtering_tap_listeners || (tap_flags & TL_REQUIRES_PROTO_TREE)) - create_proto_tree = TRUE; - - /* Dissect the frame. */ - epan_dissect_init(&edt, create_proto_tree, FALSE); - - if (dfcode != NULL && refilter) { - epan_dissect_prime_dfilter(&edt, dfcode); - } - - /* prepare color filters */ - color_filters_prime_edt(&edt); - col_custom_prime_edt(&edt, cinfo); - - tap_queue_init(&edt); - epan_dissect_run(&edt, pseudo_header, buf, fdata, cinfo); - tap_push_tapped_queue(&edt); - - /* If we have a display filter, apply it if we're refiltering, otherwise - leave the "passed_dfilter" flag alone. - - If we don't have a display filter, set "passed_dfilter" to 1. */ - if (dfcode != NULL) { - if (refilter) { - fdata->flags.passed_dfilter = dfilter_apply_edt(dfcode, &edt) ? 1 : 0; - } - } else - fdata->flags.passed_dfilter = 1; - - if( (fdata->flags.passed_dfilter) || (fdata->flags.ref_time) ) - { - frame_data_set_after_dissect(fdata, &cum_bytes, &prev_dis_ts); - - epan_dissect_fill_in_columns(&edt, FALSE, TRUE); - - /* If we haven't yet seen the first frame, this is it. - - XXX - we must do this before we add the row to the display, - as, if the display's GtkCList's selection mode is - GTK_SELECTION_BROWSE, when the first entry is added to it, - "cf_select_packet()" will be called, and it will fetch the row - data for the 0th row, and will get a null pointer rather than - "fdata", as "gtk_clist_append()" won't yet have returned and - thus "gtk_clist_set_row_data()" won't yet have been called. - - We thus need to leave behind bread crumbs so that - "cf_select_packet()" can find this frame. See the comment - in "cf_select_packet()". */ - if (cf->first_displayed == NULL) - cf->first_displayed = fdata; - - /* This is the last frame we've seen so far. */ - cf->last_displayed = fdata; - - row = packet_list_append(cinfo->col_data, fdata); - - /* colorize packet: first apply color filters - * then if packet is marked, use preferences to overwrite color - * we do both to make sure that when a packet gets un-marked, the - * color will be correctly set (fixes bug 2038) - */ - fdata->color_filter = color_filters_colorize_packet(row, &edt); - if (fdata->flags.marked) { - packet_list_set_colors(row, &prefs.gui_marked_fg, &prefs.gui_marked_bg); - } - if (fdata->flags.ignored) { - packet_list_set_colors(row, &prefs.gui_ignored_fg, &prefs.gui_ignored_bg); - } - - cf->displayed_count++; - } - - epan_dissect_cleanup(&edt); - return row; -} -#endif - /* read in a new packet */ /* returns the row of the new packet in the packet list or -1 if not displayed */ static int @@ -1377,10 +1185,8 @@ read_packet(capture_file *cf, dfilter_t *dfcode, frame_data_init(fdata, cf->count, phdr, offset, cum_bytes); -#ifdef NEW_PACKET_LIST fdata->col_text_len = se_alloc0(sizeof(fdata->col_text_len) * (cf->cinfo.num_cols)); fdata->col_text = se_alloc0(sizeof(fdata->col_text) * (cf->cinfo.num_cols)); -#endif passed = TRUE; if (cf->rfcode) { @@ -1724,20 +1530,10 @@ cf_filter_packets(capture_file *cf, gchar *dftext, gboolean force) } void -cf_colorize_packets(capture_file *cf) -{ - rescan_packets(cf, "Colorizing", "all packets", FALSE, FALSE); -} - -void cf_reftime_packets(capture_file *cf) { -#ifdef NEW_PACKET_LIST ref_time_packets(cf); -#else - rescan_packets(cf, "Reprocessing", "all packets", TRUE, TRUE); -#endif } void @@ -1804,7 +1600,6 @@ cf_read_frame(capture_file *cf, frame_data *fdata) any state information they have (because a preference that affects some dissector has changed, meaning some dissector might construct its state differently from the way it was constructed the last time). */ -#ifdef NEW_PACKET_LIST static void rescan_packets(capture_file *cf, const char *action, const char *action_item, gboolean refilter, gboolean redissect) @@ -2105,299 +1900,12 @@ rescan_packets(capture_file *cf, const char *action, const char *action_item, dfilter_free(dfcode); } -#else - -static void -rescan_packets(capture_file *cf, const char *action, const char *action_item, - gboolean refilter, gboolean redissect) -{ - frame_data *fdata; - progdlg_t *progbar = NULL; - gboolean stop_flag; - int count; - frame_data *selected_frame, *preceding_frame, *following_frame, *prev_frame; - int selected_row, prev_row, preceding_row, following_row; - gboolean selected_frame_seen; - int row; - float progbar_val; - GTimeVal start_time; - gchar status_str[100]; - int progbar_nextstep; - int progbar_quantum; - dfilter_t *dfcode; - gboolean filtering_tap_listeners; - guint tap_flags; - gboolean add_to_packet_list = TRUE; - gboolean compiled; - - /* Compile the current display filter. - * We assume this will not fail since cf->dfilter is only set in - * cf_filter IFF the filter was valid. - */ - compiled = dfilter_compile(cf->dfilter, &dfcode); - g_assert(!cf->dfilter || (compiled && dfcode)); - - /* Do we have any tap listeners with filters? */ - filtering_tap_listeners = have_filtering_tap_listeners(); - - /* Get the union of the flags for all tap listeners. */ - tap_flags = union_of_tap_listener_flags(); - - reset_tap_listeners(); - /* Which frame, if any, is the currently selected frame? - XXX - should the selected frame or the focus frame be the "current" - frame, that frame being the one from which "Find Frame" searches - start? */ - selected_frame = cf->current_frame; - - /* We don't yet know what row that frame will be on, if any, after we - rebuild the clist, however. */ - selected_row = -1; - - /* Freeze the packet list while we redo it, so we don't get any - screen updates while it happens. */ - packet_list_freeze(); - - /* Clear it out. */ - packet_list_clear(); - - if (redissect) { - /* We need to re-initialize all the state information that protocols - keep, because some preference that controls a dissector has changed, - which might cause the state information to be constructed differently - by that dissector. */ - - /* We might receive new packets while redissecting, and we don't - want to dissect those before their time. */ - cf->redissecting = TRUE; - - /* Cleanup all data structures used for dissection. */ - cleanup_dissection(); - /* Initialize all data structures used for dissection. */ - init_dissection(); - - } - - /* We don't yet know which will be the first and last frames displayed. */ - cf->first_displayed = NULL; - cf->last_displayed = NULL; - - reset_elapsed(); - - /* We currently don't display any packets */ - cf->displayed_count = 0; - - /* Iterate through the list of frames. Call a routine for each frame - to check whether it should be displayed and, if so, add it to - the display list. */ - nstime_set_unset(&first_ts); - nstime_set_unset(&prev_dis_ts); - nstime_set_unset(&prev_cap_ts); - cum_bytes = 0; - - /* Update the progress bar when it gets to this value. */ - progbar_nextstep = 0; - /* When we reach the value that triggers a progress bar update, - bump that value by this amount. */ - progbar_quantum = cf->count/N_PROGBAR_UPDATES; - /* Count of packets at which we've looked. */ - count = 0; - /* Progress so far. */ - progbar_val = 0.0f; - - stop_flag = FALSE; - g_get_current_time(&start_time); - - row = -1; /* no previous row yet */ - prev_row = -1; - prev_frame = NULL; - - preceding_row = -1; - preceding_frame = NULL; - following_row = -1; - following_frame = NULL; - - selected_frame_seen = FALSE; - - for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) { - /* Create the progress bar if necessary. - We check on every iteration of the loop, so that it takes no - longer than the standard time to create it (otherwise, for a - large file, we might take considerably longer than that standard - time in order to get to the next progress bar step). */ - if (progbar == NULL) - progbar = delayed_create_progress_dlg(action, action_item, TRUE, - &stop_flag, &start_time, - progbar_val); - - /* Update the progress bar, but do it only N_PROGBAR_UPDATES times; - when we update it, we have to run the GTK+ main loop to get it - to repaint what's pending, and doing so may involve an "ioctl()" - to see if there's any pending input from an X server, and doing - that for every packet can be costly, especially on a big file. */ - if (count >= progbar_nextstep) { - /* let's not divide by zero. I should never be started - * with count == 0, so let's assert that - */ - g_assert(cf->count > 0); - progbar_val = (gfloat) count / cf->count; - - if (progbar != NULL) { - g_snprintf(status_str, sizeof(status_str), - "%4u of %u frames", count, cf->count); - update_progress_dlg(progbar, progbar_val, status_str); - } - - progbar_nextstep += progbar_quantum; - } - - if (stop_flag) { - /* Well, the user decided to abort the filtering. Just stop. - - XXX - go back to the previous filter? Users probably just - want not to wait for a filtering operation to finish; - unless we cancel by having no filter, reverting to the - previous filter will probably be even more expensive than - continuing the filtering, as it involves going back to the - beginning and filtering, and even with no filter we currently - have to re-generate the entire clist, which is also expensive. - - I'm not sure what Network Monitor does, but it doesn't appear - to give you an unfiltered display if you cancel. */ - break; - } - - count++; - - if (redissect) { - /* Since all state for the frame was destroyed, mark the frame - * as not visited, free the GSList referring to the state - * data (the per-frame data itself was freed by - * "init_dissection()"), and null out the GSList pointer. - */ - fdata->flags.visited = 0; - frame_data_cleanup(fdata); - } - - if (!cf_read_frame(cf, fdata)) - break; /* error reading the frame */ - - /* If the previous frame is displayed, and we haven't yet seen the - selected frame, remember that frame - it's the closest one we've - yet seen before the selected frame. */ - if (prev_row != -1 && !selected_frame_seen) { - preceding_row = prev_row; - preceding_frame = prev_frame; - } - row = add_packet_to_packet_list(fdata, cf, dfcode, filtering_tap_listeners, - tap_flags, &cf->pseudo_header, cf->pd, - refilter, - add_to_packet_list); - - /* If this frame is displayed, and this is the first frame we've - seen displayed after the selected frame, remember this frame - - it's the closest one we've yet seen at or after the selected - frame. */ - if (row != -1 && selected_frame_seen && following_row == -1) { - following_row = row; - following_frame = fdata; - } - if (fdata == selected_frame) { - selected_row = row; - selected_frame_seen = TRUE; - } - - /* Remember this row/frame - it'll be the previous row/frame - on the next pass through the loop. */ - prev_row = row; - prev_frame = fdata; - } - - /* We are done redissecting the packet list. */ - cf->redissecting = FALSE; - - if (redissect) { - /* Clear out what remains of the visited flags and per-frame data - pointers. - - XXX - that may cause various forms of bogosity when dissecting - these frames, as they won't have been seen by this sequential - pass, but the only alternative I see is to keep scanning them - even though the user requested that the scan stop, and that - would leave the user stuck with an Wireshark grinding on - until it finishes. Should we just stick them with that? */ - for (; fdata != NULL; fdata = fdata->next) { - fdata->flags.visited = 0; - frame_data_cleanup(fdata); - } - } - - /* We're done filtering the packets; destroy the progress bar if it - was created. */ - if (progbar != NULL) - destroy_progress_dlg(progbar); - - /* Unfreeze the packet list. */ - packet_list_thaw(); - - if (selected_row == -1) { - /* The selected frame didn't pass the filter. */ - if (selected_frame == NULL) { - /* That's because there *was* no selected frame. Make the first - displayed frame the current frame. */ - selected_row = 0; - } else { - /* Find the nearest displayed frame to the selected frame (whether - it's before or after that frame) and make that the current frame. - If the next and previous displayed frames are equidistant from the - selected frame, choose the next one. */ - g_assert(following_frame == NULL || - following_frame->num >= selected_frame->num); - g_assert(preceding_frame == NULL || - preceding_frame->num <= selected_frame->num); - if (following_frame == NULL) { - /* No frame after the selected frame passed the filter, so we - have to select the last displayed frame before the selected - frame. */ - selected_row = preceding_row; - } else if (preceding_frame == NULL) { - /* No frame before the selected frame passed the filter, so we - have to select the first displayed frame after the selected - frame. */ - selected_row = following_row; - } else { - /* Frames before and after the selected frame passed the filter, so - we'll select the previous frame */ - selected_row = preceding_row; - } - } - } - - if (selected_row == -1) { - /* There are no frames displayed at all. */ - cf_unselect_packet(cf); - } else { - /* Either the frame that was selected passed the filter, or we've - found the nearest displayed frame to that frame. Select it, make - it the focus row, and make it visible. */ - if (selected_row == 0) { - /* Set to invalid to force update of packet list and packet details */ - cf->current_row = -1; - } - packet_list_set_selected_row(selected_row); - } - - /* Cleanup and release all dfilter resources */ - dfilter_free(dfcode); -} -#endif /* NEW_PACKET_LIST */ /* * Scan trough all frame data and recalculate the ref time * without rereading the file. * XXX - do we need a progres bar or is this fast enough? */ -#ifdef NEW_PACKET_LIST static void ref_time_packets(capture_file *cf) { @@ -2470,7 +1978,6 @@ ref_time_packets(capture_file *cf) } } } -#endif typedef enum { PSP_FINISHED, @@ -3231,181 +2738,6 @@ cf_write_carrays_packets(capture_file *cf, print_args_t *print_args) return CF_PRINT_OK; } -#ifndef NEW_PACKET_LIST /* This function is not needed with the new packet list */ - -/* Scan through the packet list and change all columns that use the - "command-line-specified" time stamp format to use the current - value of that format. */ -void -cf_change_time_formats(capture_file *cf) -{ - int i; - frame_data *fdata; - progdlg_t *progbar = NULL; - gboolean stop_flag; - int count; - int row; - float progbar_val; - GTimeVal start_time; - gchar status_str[100]; - int progbar_nextstep; - int progbar_quantum; - gboolean sorted_by_frame_column; - - /* Adjust timestamp precision if auto is selected */ - cf_timestamp_auto_precision(cf); - - /* Are there any columns with time stamps in the "command-line-specified" - format? - - XXX - we have to force the "column is writable" flag on, as it - might be off from the last frame that was dissected. */ - col_set_writable(&cf->cinfo, TRUE); - if (!check_col(&cf->cinfo, COL_CLS_TIME) && - !check_col(&cf->cinfo, COL_ABS_TIME) && - !check_col(&cf->cinfo, COL_ABS_DATE_TIME) && - !check_col(&cf->cinfo, COL_REL_TIME) && - !check_col(&cf->cinfo, COL_DELTA_TIME) && - !check_col(&cf->cinfo, COL_DELTA_TIME_DIS)) { - /* No, there aren't any columns in that format, so we have no work - to do. */ - return; - } - - /* Freeze the packet list while we redo it, so we don't get any - screen updates while it happens. */ - packet_list_freeze(); - - /* Update the progress bar when it gets to this value. */ - progbar_nextstep = 0; - /* When we reach the value that triggers a progress bar update, - bump that value by this amount. */ - progbar_quantum = cf->count/N_PROGBAR_UPDATES; - /* Count of packets at which we've looked. */ - count = 0; - /* Progress so far. */ - progbar_val = 0.0f; - - /* If the rows are currently sorted by the frame column then we know - * the row number of each packet: it's the row number of the previously - * displayed packet + 1. - * - * Otherwise, if the display is sorted by a different column then we have - * to use the O(N) packet_list_find_row_from_data() (thus making the job - * of changing the time display format O(N**2)). - * - * (XXX - In fact it's still O(N**2) because gtk_clist_set_text() takes - * the row number and walks that many elements down the clist to find - * the appropriate element.) - */ - sorted_by_frame_column = FALSE; - for (i = 0; i < cf->cinfo.num_cols; i++) { - if (cf->cinfo.col_fmt[i] == COL_NUMBER) - { - sorted_by_frame_column = (i == packet_list_get_sort_column()); - break; - } - } - - stop_flag = FALSE; - g_get_current_time(&start_time); - - /* Iterate through the list of packets, checking whether the packet - is in a row of the summary list and, if so, whether there are - any columns that show the time in the "command-line-specified" - format and, if so, update that row. */ - for (fdata = cf->plist_start, row = -1; fdata != NULL; fdata = fdata->next) { - /* Create the progress bar if necessary. - We check on every iteration of the loop, so that it takes no - longer than the standard time to create it (otherwise, for a - large file, we might take considerably longer than that standard - time in order to get to the next progress bar step). */ - if (progbar == NULL) - progbar = delayed_create_progress_dlg("Changing", "time display", - TRUE, &stop_flag, &start_time, progbar_val); - - /* Update the progress bar, but do it only N_PROGBAR_UPDATES times; - when we update it, we have to run the GTK+ main loop to get it - to repaint what's pending, and doing so may involve an "ioctl()" - to see if there's any pending input from an X server, and doing - that for every packet can be costly, especially on a big file. */ - if (count >= progbar_nextstep) { - /* let's not divide by zero. I should never be started - * with count == 0, so let's assert that - */ - g_assert(cf->count > 0); - - progbar_val = (gfloat) count / cf->count; - - if (progbar != NULL) { - g_snprintf(status_str, sizeof(status_str), - "%4u of %u packets", count, cf->count); - update_progress_dlg(progbar, progbar_val, status_str); - } - - progbar_nextstep += progbar_quantum; - } - - if (stop_flag) { - /* Well, the user decided to abort the redisplay. Just stop. - - XXX - this leaves the time field in the old format in - frames we haven't yet processed. So it goes; should we - simply not offer them the option of stopping? */ - break; - } - - count++; - - /* Find what row this packet is in. */ - if (!sorted_by_frame_column) { - /* This function is O(N), so we try to avoid using it... */ - row = packet_list_find_row_from_data(fdata); - } else { - /* ...which we do by maintaining a count of packets that are - being displayed (i.e., that have passed the display filter), - and using the current value of that count as the row number - (which is why we can only do it when the display is sorted - by the frame number). */ - if (fdata->flags.passed_dfilter) - row++; - else - continue; - } - - if (row != -1) { - /* This packet is in the summary list, on row "row". */ - - for (i = 0; i < cf->cinfo.num_cols; i++) { - if (col_has_time_fmt(&cf->cinfo, i)) { - /* This is one of the columns that shows the time in - "command-line-specified" format; update it. */ - cf->cinfo.col_buf[i][0] = '\0'; - col_set_fmt_time(fdata, &cf->cinfo, cf->cinfo.col_fmt[i], i); - packet_list_set_text(row, i, cf->cinfo.col_data[i]); - } - } - } - } - - /* We're done redisplaying the packets; destroy the progress bar if it - was created. */ - if (progbar != NULL) - destroy_progress_dlg(progbar); - - /* Set the column widths of those columns that show the time in - "command-line-specified" format. */ - for (i = 0; i < cf->cinfo.num_cols; i++) { - if (col_has_time_fmt(&cf->cinfo, i)) { - packet_list_set_time_width(cf->cinfo.col_fmt[i], i); - } - } - - /* Unfreeze the packet list. */ - packet_list_thaw(); -} -#endif /* NEW_PACKET_LIST */ - gboolean cf_find_packet_protocol_tree(capture_file *cf, const char *string, search_direction dir) @@ -3992,16 +3324,11 @@ find_packet(capture_file *cf, } if (new_fd != NULL) { -#ifdef NEW_PACKET_LIST /* Find and select */ cf->search_in_progress = TRUE; row = new_packet_list_find_row_from_data(fdata, TRUE); cf->search_in_progress = FALSE; cf->search_pos = 0; /* Reset the position */ -#else - /* We found a frame. Find what row it's in. */ - row = packet_list_find_row_from_data(new_fd); -#endif /* NEW_PACKET_LIST */ if (row == -1) { /* We didn't find a row even though we know that a frame * exists that satifies the search criteria. This means that the @@ -4012,11 +3339,6 @@ find_packet(capture_file *cf, simple_dialog_primary_start(), simple_dialog_primary_end()); return FALSE; } - -#ifndef NEW_PACKET_LIST - /* Select that row, make it the focus row, and make it visible. */ - packet_list_set_selected_row(row); -#endif /* NEW_PACKET_LIST */ return TRUE; /* success */ } else return FALSE; /* failure */ @@ -4026,9 +3348,6 @@ gboolean cf_goto_frame(capture_file *cf, guint fnumber) { frame_data *fdata; -#ifndef NEW_PACKET_LIST - int row; -#endif for (fdata = cf->plist_start; fdata != NULL && fdata->num < fnumber; fdata = fdata->next) ; @@ -4045,82 +3364,23 @@ cf_goto_frame(capture_file *cf, guint fnumber) return FALSE; /* we failed to go to that packet */ } -#ifdef NEW_PACKET_LIST new_packet_list_find_row_from_data(fdata, TRUE); -#else - /* We found that packet, and it's currently being displayed. - Find what row it's in. */ - row = packet_list_find_row_from_data(fdata); - g_assert(row != -1); - - /* Select that row, make it the focus row, and make it visible. */ - packet_list_set_selected_row(row); -#endif /* NEW_PACKET_LIST */ return TRUE; /* we got to that packet */ } gboolean -cf_goto_top_frame(capture_file *cf _U_) +cf_goto_top_frame() { -#ifdef NEW_PACKET_LIST /* Find and select */ new_packet_list_select_first_row(); -#else - frame_data *fdata; - int row; - frame_data *lowest_fdata = NULL; - - for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) { - if (fdata->flags.passed_dfilter) { - lowest_fdata = fdata; - break; - } - } - - if (lowest_fdata == NULL) { - return FALSE; - } - - /* We found that packet, and it's currently being displayed. - Find what row it's in. */ - row = packet_list_find_row_from_data(lowest_fdata); - g_assert(row != -1); - - /* Select that row, make it the focus row, and make it visible. */ - packet_list_set_selected_row(row); -#endif /* NEW_PACKET_LIST */ return TRUE; /* we got to that packet */ } gboolean -cf_goto_bottom_frame(capture_file *cf _U_) /* cf is unused w/ NEW_PACKET_LIST */ +cf_goto_bottom_frame() { -#ifdef NEW_PACKET_LIST /* Find and select */ new_packet_list_select_last_row(); -#else - frame_data *fdata; - int row; - frame_data *highest_fdata = NULL; - - for (fdata = cf->plist_start; fdata != NULL; fdata = fdata->next) { - if (fdata->flags.passed_dfilter) { - highest_fdata = fdata; - } - } - - if (highest_fdata == NULL) { - return FALSE; - } - - /* We found that packet, and it's currently being displayed. - Find what row it's in. */ - row = packet_list_find_row_from_data(highest_fdata); - g_assert(row != -1); - - /* Select that row, make it the focus row, and make it visible. */ - packet_list_set_selected_row(row); -#endif /* NEW_PACKET_LIST */ return TRUE; /* we got to that packet */ } @@ -4153,11 +3413,7 @@ cf_select_packet(capture_file *cf, int row) frame_data *fdata; /* Get the frame data struct pointer for this frame */ -#ifdef NEW_PACKET_LIST fdata = new_packet_list_get_row_data(row); -#else - fdata = (frame_data *)packet_list_get_row_data(row); -#endif if (fdata == NULL) { /* XXX - if a GtkCList's selection mode is GTK_SELECTION_BROWSE, when |