Add an item to the "File/Print" dialog box to ask that the full hex data
[obnox/wireshark/wip.git] / packet.c
index f4fad5d69300462d0e90a1d4cb09de3444bfc3a5..dcf12ec83e14f97fd3963c537a0163fecce03dc1 100644 (file)
--- a/packet.c
+++ b/packet.c
@@ -1,7 +1,7 @@
 /* packet.c
  * Routines for packet disassembly
  *
- * $Id: packet.c,v 1.40 1999/08/24 03:19:23 guy Exp $
+ * $Id: packet.c,v 1.45 1999/09/29 22:19:12 guy Exp $
  *
  * Ethereal - Network traffic analyzer
  * By Gerald Combs <gerald@zing.org>
 #endif
 
 #include "packet.h"
+#include "print.h"
 #include "file.h"
 
 extern capture_file  cf;
 
+gboolean       tree_is_expanded[NUM_TREE_TYPES];
+
 int proto_frame = -1;
 int hf_frame_arrival_time = -1;
+int hf_frame_time_delta = -1;
+int hf_frame_number = -1;
 int hf_frame_packet_len = -1;
 int hf_frame_capture_len = -1;
 
@@ -185,7 +190,7 @@ time_secs_to_str(guint32 time)
 }
 
 /* Max string length for displaying byte string.  */
-#define        MAX_BYTE_STR_LEN        16
+#define        MAX_BYTE_STR_LEN        20
 
 /* Turn an array of bytes into a string showing the bytes in hex. */
 gchar *
@@ -266,6 +271,25 @@ abs_time_to_str(struct timeval *abs_time)
         return cur;
 }
 
+gchar *
+rel_time_to_str(struct timeval *rel_time)
+{
+        static gchar *cur;
+        static char str[3][10+1+6+1];
+
+        if (cur == &str[0][0]) {
+                cur = &str[1][0];
+        } else if (cur == &str[1][0]) {
+                cur = &str[2][0];
+        } else {
+                cur = &str[0][0];
+        }
+
+       sprintf(cur, "%ld.%06ld", (long)rel_time->tv_sec,
+               (long)rel_time->tv_usec);
+
+        return cur;
+}
 
 /*
  * Given a pointer into a data buffer, and to the end of the buffer,
@@ -638,6 +662,15 @@ dissect_packet(const u_char *pd, frame_data *fd, proto_tree *tree)
          proto_tree_add_item(fh_tree, hf_frame_arrival_time,
                0, 0, &tv);
 
+         tv.tv_sec = fd->del_secs;
+         tv.tv_usec = fd->del_usecs;
+
+         proto_tree_add_item(fh_tree, hf_frame_time_delta,
+               0, 0, &tv);
+
+         proto_tree_add_item(fh_tree, hf_frame_number,
+               0, 0, fd->num);
+
          proto_tree_add_item_format(fh_tree, hf_frame_packet_len,
                0, 0, fd->pkt_len, "Packet Length: %d byte%s", fd->pkt_len,
                plurality(fd->pkt_len, "", "s"));
@@ -684,6 +717,9 @@ dissect_packet(const u_char *pd, frame_data *fd, proto_tree *tree)
                case WTAP_ENCAP_ATM_SNIFFER :
                        dissect_atm(pd, fd, tree);
                        break;
+               case WTAP_ENCAP_ASCEND :
+                       dissect_ascend(pd, fd, tree);
+                       break;
        }
 }
 
@@ -694,6 +730,12 @@ proto_register_frame(void)
                { &hf_frame_arrival_time,
                { "Arrival Time",               "frame.time", FT_ABSOLUTE_TIME, NULL }},
 
+               { &hf_frame_time_delta,
+               { "Time delta from previous packet",    "frame.time_delta", FT_RELATIVE_TIME, NULL }},
+
+               { &hf_frame_number,
+               { "Frame Number",               "frame.number", FT_UINT32, NULL }},
+
                { &hf_frame_packet_len,
                { "Total Frame Length",         "frame.pkt_len", FT_UINT32, NULL }},