aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sharkd.c21
-rw-r--r--sharkd.h3
-rw-r--r--sharkd_session.c19
3 files changed, 23 insertions, 20 deletions
diff --git a/sharkd.c b/sharkd.c
index 564e38087c..acb5e1ca62 100644
--- a/sharkd.c
+++ b/sharkd.c
@@ -530,6 +530,12 @@ sharkd_load_cap_file(void)
return load_cap_file(&cfile, 0, 0);
}
+frame_data *
+sharkd_get_frame(guint32 framenum)
+{
+ return frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+}
+
int
sharkd_dissect_request(unsigned int framenum, void (*cb)(epan_dissect_t *, proto_tree *, struct epan_column_info *, const GSList *, void *), int dissect_bytes, int dissect_columns, int dissect_tree, void *data)
{
@@ -543,7 +549,7 @@ sharkd_dissect_request(unsigned int framenum, void (*cb)(epan_dissect_t *, proto
int err;
char *err_info = NULL;
- fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ fdata = sharkd_get_frame(framenum);
if (fdata == NULL)
return -1;
@@ -582,9 +588,8 @@ sharkd_dissect_request(unsigned int framenum, void (*cb)(epan_dissect_t *, proto
/* based on packet_list_dissect_and_cache_record */
int
-sharkd_dissect_columns(int framenum, column_info *cinfo, gboolean dissect_color)
+sharkd_dissect_columns(frame_data *fdata, column_info *cinfo, gboolean dissect_color)
{
- frame_data *fdata;
epan_dissect_t edt;
gboolean create_proto_tree;
struct wtap_pkthdr phdr; /* Packet header */
@@ -593,12 +598,6 @@ sharkd_dissect_columns(int framenum, column_info *cinfo, gboolean dissect_color)
int err;
char *err_info = NULL;
- fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
- if (fdata == NULL) {
- col_fill_in_error(cinfo, fdata, FALSE, TRUE/* fill_fd_columns */);
- return -1; /* error reading the record */
- }
-
wtap_phdr_init(&phdr);
ws_buffer_init(&buf, 1500);
@@ -676,7 +675,7 @@ sharkd_retap(void)
reset_tap_listeners();
for (framenum = 1; framenum <= cfile.count; framenum++) {
- fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ fdata = sharkd_get_frame(framenum);
if (!wtap_seek_read(cfile.frame_set_info.wth, fdata->file_off, &phdr, &buf, &err, &err_info))
break;
@@ -726,7 +725,7 @@ sharkd_filter(const char *dftext, guint8 **result)
result_bits = (guint8 *) g_malloc(2 + (frames_count / 8));
for (framenum = 1; framenum <= frames_count; framenum++) {
- frame_data *fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ frame_data *fdata = sharkd_get_frame(framenum);
if ((framenum & 7) == 0) {
result_bits[(framenum / 8) - 1] = passed_bits;
diff --git a/sharkd.h b/sharkd.h
index b2549f879e..b08754c97a 100644
--- a/sharkd.h
+++ b/sharkd.h
@@ -20,7 +20,8 @@ cf_status_t sharkd_cf_open(const char *fname, unsigned int type, gboolean is_tem
int sharkd_load_cap_file(void);
int sharkd_retap(void);
int sharkd_filter(const char *dftext, guint8 **result);
-int sharkd_dissect_columns(int framenum, column_info *cinfo, gboolean dissect_color);
+frame_data *sharkd_get_frame(guint32 framenum);
+int sharkd_dissect_columns(frame_data *fdata, column_info *cinfo, gboolean dissect_color);
int sharkd_dissect_request(unsigned int framenum, void (*cb)(epan_dissect_t *, proto_tree *, struct epan_column_info *, const GSList *, void *), int dissect_bytes, int dissect_columns, int dissect_tree, void *data);
const char *sharkd_get_user_comment(const frame_data *fd);
int sharkd_set_user_comment(frame_data *fd, const gchar *new_comment);
diff --git a/sharkd_session.c b/sharkd_session.c
index e348ae34a4..61d218fac8 100644
--- a/sharkd_session.c
+++ b/sharkd_session.c
@@ -845,7 +845,7 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun
printf("[");
for (framenum = 1; framenum <= cfile.count; framenum++)
{
- frame_data *fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ frame_data *fdata;
if (filter_data && !(filter_data[framenum / 8] & (1 << (framenum % 8))))
continue;
@@ -856,7 +856,9 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun
continue;
}
- sharkd_dissect_columns(framenum, cinfo, (fdata->color_filter == NULL));
+ fdata = sharkd_get_frame(framenum);
+
+ sharkd_dissect_columns(fdata, cinfo, (fdata->color_filter == NULL));
printf("%s{\"c\":[", frame_sepa);
for (col = 0; col < cinfo->num_cols; ++col)
@@ -2938,7 +2940,7 @@ sharkd_session_process_intervals(char *buf, const jsmntok_t *tokens, int count)
guint64 bytes;
} st, st_total;
- nstime_t *start_ts = NULL;
+ nstime_t *start_ts;
guint32 interval_ms = 1000; /* default: one per second */
@@ -2973,18 +2975,19 @@ sharkd_session_process_intervals(char *buf, const jsmntok_t *tokens, int count)
printf("{\"intervals\":[");
+ start_ts = (cfile.count >= 1) ? &(sharkd_get_frame(1)->abs_ts) : NULL;
+
for (framenum = 1; framenum <= cfile.count; framenum++)
{
- frame_data *fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ frame_data *fdata;
gint64 msec_rel;
gint64 new_idx;
- if (start_ts == NULL)
- start_ts = &fdata->abs_ts;
-
if (filter_data && !(filter_data[framenum / 8] & (1 << (framenum % 8))))
continue;
+ fdata = sharkd_get_frame(framenum);
+
msec_rel = (fdata->abs_ts.secs - start_ts->secs) * (gint64) 1000 + (fdata->abs_ts.nsecs - start_ts->nsecs) / 1000000;
new_idx = msec_rel / interval_ms;
@@ -3312,7 +3315,7 @@ sharkd_session_process_setcomment(char *buf, const jsmntok_t *tokens, int count)
if (!tok_frame || !ws_strtou32(tok_frame, NULL, &framenum) || framenum == 0)
return;
- fdata = frame_data_sequence_find(cfile.frame_set_info.frames, framenum);
+ fdata = sharkd_get_frame(framenum);
if (!fdata)
return;