diff options
author | Guy Harris <guy@alum.mit.edu> | 2018-02-08 16:19:12 -0800 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-02-09 00:29:51 +0000 |
commit | 1f5f63f8ef98bfe9c4d734674cee0df64855555d (patch) | |
tree | 133dd3563cc8d2d29dd85d4d43cd9a4636283192 /epan/frame_data.c | |
parent | e4c5efafb7da2d25b7d47fe2dac3b1556c0b67b0 (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.c | 45 |
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; |