aboutsummaryrefslogtreecommitdiffstats
path: root/epan/frame_data.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2018-02-08 16:19:12 -0800
committerGuy Harris <guy@alum.mit.edu>2018-02-09 00:29:51 +0000
commit1f5f63f8ef98bfe9c4d734674cee0df64855555d (patch)
tree133dd3563cc8d2d29dd85d4d43cd9a4636283192 /epan/frame_data.c
parente4c5efafb7da2d25b7d47fe2dac3b1556c0b67b0 (diff)
Generalize wtap_pkthdr into a structure for packet and non-packet records.
Separate the stuff that any record could have from the stuff that only particular record types have; put the latter into a union, and put all that into a wtap_rec structure. Add some record-type checks as necessary. Change-Id: Id6b3486858f826fce4b096c59231f463e44bfaa2 Reviewed-on: https://code.wireshark.org/review/25696 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'epan/frame_data.c')
-rw-r--r--epan/frame_data.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/epan/frame_data.c b/epan/frame_data.c
index ef75cd5075..e546296bdb 100644
--- a/epan/frame_data.c
+++ b/epan/frame_data.c
@@ -151,19 +151,13 @@ frame_data_compare(const struct epan_session *epan, const frame_data *fdata1, co
}
void
-frame_data_init(frame_data *fdata, guint32 num,
- const struct wtap_pkthdr *phdr, gint64 offset,
- guint32 cum_bytes)
+frame_data_init(frame_data *fdata, guint32 num, const wtap_rec *rec,
+ gint64 offset, guint32 cum_bytes)
{
fdata->pfd = NULL;
fdata->num = num;
- fdata->pkt_len = phdr->len;
- fdata->cum_bytes = cum_bytes + phdr->len;
- fdata->cap_len = phdr->caplen;
fdata->file_off = offset;
fdata->subnum = 0;
- /* To save some memory, we coerce it into a gint16 */
- g_assert(phdr->pkt_encap <= G_MAXINT16);
fdata->flags.passed_dfilter = 0;
fdata->flags.dependent_of_displayed = 0;
fdata->flags.encoding = PACKET_CHAR_ENC_CHAR_ASCII;
@@ -171,13 +165,40 @@ frame_data_init(frame_data *fdata, guint32 num,
fdata->flags.marked = 0;
fdata->flags.ref_time = 0;
fdata->flags.ignored = 0;
- fdata->flags.has_ts = (phdr->presence_flags & WTAP_HAS_TS) ? 1 : 0;
- fdata->flags.has_phdr_comment = (phdr->opt_comment != NULL);
+ fdata->flags.has_ts = (rec->presence_flags & WTAP_HAS_TS) ? 1 : 0;
+ switch (rec->rec_type) {
+
+ case REC_TYPE_PACKET:
+ fdata->pkt_len = rec->rec_header.packet_header.len;
+ fdata->cum_bytes = cum_bytes + rec->rec_header.packet_header.len;
+ fdata->cap_len = rec->rec_header.packet_header.caplen;
+ break;
+
+ case REC_TYPE_FT_SPECIFIC_EVENT:
+ case REC_TYPE_FT_SPECIFIC_REPORT:
+ /*
+ * XXX
+ */
+ fdata->pkt_len = 0;
+ fdata->cum_bytes = 0;
+ fdata->cap_len = 0;
+ break;
+
+ case REC_TYPE_SYSCALL:
+ fdata->pkt_len = rec->rec_header.syscall_header.len;
+ fdata->cum_bytes = cum_bytes + rec->rec_header.syscall_header.len;
+ fdata->cap_len = rec->rec_header.syscall_header.caplen;
+ break;
+ }
+
+ /* To save some memory, we coerce it into a gint16 */
+ g_assert(rec->tsprec <= G_MAXINT16);
+ fdata->tsprec = (gint16)rec->tsprec;
+ fdata->abs_ts = rec->ts;
+ fdata->flags.has_phdr_comment = (rec->opt_comment != NULL);
fdata->flags.has_user_comment = 0;
fdata->flags.need_colorize = 0;
- fdata->tsprec = (gint16)phdr->pkt_tsprec;
fdata->color_filter = NULL;
- fdata->abs_ts = phdr->ts;
fdata->shift_offset.secs = 0;
fdata->shift_offset.nsecs = 0;
fdata->frame_ref_num = 0;