smb2-dissector: learn the "REPLAY_OPERATION" flag
[obnox/wireshark/wip.git] / packet-range.c
index aed5d29ad5cee0619df3ead30ed590242e995745..6e0e49fd541d47342b663acfb53421c2b7ee54cb 100644 (file)
@@ -66,6 +66,7 @@ static void packet_range_calc(packet_range_t *range) {
     range->displayed_cnt          = 0L;
     range->displayed_marked_cnt   = 0L;
     range->displayed_mark_range_cnt=0L;
+    range->displayed_plus_dependents_cnt    = 0L;
     range->displayed_ignored_cnt            = 0L;
     range->displayed_ignored_marked_cnt     = 0L;
     range->displayed_ignored_mark_range_cnt = 0L;
@@ -76,7 +77,7 @@ static void packet_range_calc(packet_range_t *range) {
      * for example, the case when TShark is doing a one-pass
      * read of a file or a live capture.
      */
-    if (cfile.ptree_root != NULL) {
+    if (cfile.frames != NULL) {
         /* The next for-loop is used to obtain the amount of packets
          * to be processed and is used to present the information in
          * the Save/Print As widget.
@@ -87,7 +88,7 @@ static void packet_range_calc(packet_range_t *range) {
          */
 
         for(framenum = 1; framenum <= cfile.count; framenum++) {
-            packet = cap_file_find_fdata(&cfile, framenum);
+            packet = frame_data_sequence_find(cfile.frames, framenum);
 
             if (cfile.current_frame == packet) {
                 range->selected_packet = framenum;
@@ -95,6 +96,10 @@ static void packet_range_calc(packet_range_t *range) {
             if (packet->flags.passed_dfilter) {
                 range->displayed_cnt++;
             }
+            if (packet->flags.passed_dfilter ||
+               packet->flags.dependent_of_displayed) {
+                range->displayed_plus_dependents_cnt++;
+            }
             if (packet->flags.marked) {
                 if (packet->flags.ignored) {
                     range->ignored_marked_cnt++;
@@ -128,7 +133,7 @@ static void packet_range_calc(packet_range_t *range) {
         }
 
         for(framenum = 1; framenum <= cfile.count; framenum++) {
-            packet = cap_file_find_fdata(&cfile, framenum);
+            packet = frame_data_sequence_find(cfile.frames, framenum);
 
             if (framenum >= mark_low &&
                 framenum <= mark_high)
@@ -181,9 +186,9 @@ static void packet_range_calc_user(packet_range_t *range) {
      * for example, the case when TShark is doing a one-pass
      * read of a file or a live capture.
      */
-    if (cfile.ptree_root != NULL) {
+    if (cfile.frames != NULL) {
         for(framenum = 1; framenum <= cfile.count; framenum++) {
-            packet = cap_file_find_fdata(&cfile, framenum);
+            packet = frame_data_sequence_find(cfile.frames, framenum);
 
             if (value_is_in_range(range->user_range, framenum)) {
                 range->user_range_cnt++;
@@ -292,8 +297,12 @@ range_process_e packet_range_process_packet(packet_range_t *range, frame_data *f
         g_assert_not_reached();
     }
 
-    /* this packet has to pass the display filter but didn't? -> try next */
-    if (range->process_filtered && fdata->flags.passed_dfilter == FALSE) {
+    /* This packet has to pass the display filter but didn't?
+     * Try next, but only if we're not including dependent packets and this
+     * packet happens to be a dependency on something that is displayed.
+     */
+    if ((range->process_filtered && fdata->flags.passed_dfilter == FALSE) &&
+       !(range->include_dependents && fdata->flags.dependent_of_displayed)) {
         return range_process_next;
     }