aboutsummaryrefslogtreecommitdiffstats
path: root/sharkd_session.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2018-09-25 11:06:12 +0200
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2018-09-25 10:05:14 +0000
commit933de9fdbfde742ebc32c3b70b14e007eec84df4 (patch)
tree0fb3b4e389ffc61933dbbf1e66ded0eedbf1e74c /sharkd_session.c
parent70e340aaafbc07c00d0babde4727dd2f56cebaa2 (diff)
sharkd: cleanup printf() usage during JSON generation (part IV).
Many printf()s generates only key, value is generated by json_puts_string() or json_print_base64(). Add helper functions sharkd_json_value_string, sharkd_json_value_base64 to generate key with a string, or base64 as a value. It lower number of printf() from 156 to 105 (32% reduction). Change-Id: I22901d9759534a4fab7bcdefd66242fd6c5b20cc Reviewed-on: https://code.wireshark.org/review/29821 Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl> Tested-by: Petri Dish Buildbot Reviewed-by: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Diffstat (limited to 'sharkd_session.c')
-rw-r--r--sharkd_session.c209
1 files changed, 76 insertions, 133 deletions
diff --git a/sharkd_session.c b/sharkd_session.c
index 900d42d8bd..aecb7a3b48 100644
--- a/sharkd_session.c
+++ b/sharkd_session.c
@@ -188,6 +188,20 @@ sharkd_json_value_anyf(gboolean sepa, const char *key, const char *valuef, ...)
}
}
+static void
+sharkd_json_value_string(gboolean sepa, const char *key, const char *str)
+{
+ sharkd_json_value_anyf(sepa, key, NULL);
+ json_puts_string(str);
+}
+
+static void
+sharkd_json_value_base64(gboolean sepa, const char *key, const guint8 *data, size_t len)
+{
+ sharkd_json_value_anyf(sepa, key, NULL);
+ json_print_base64(data, len);
+}
+
static void G_GNUC_PRINTF(3, 4)
sharkd_json_value_stringf(gboolean sepa, const char *key, const char *format, ...)
{
@@ -524,15 +538,10 @@ sharkd_session_process_info(void)
sharkd_json_array_open(TRUE, "ftypes");
for (i = 0; i < FT_NUM_TYPES; i++)
- {
- if (i)
- printf(",");
- json_puts_string(ftype_name((ftenum_t) i));
- }
+ sharkd_json_value_string(i != 0, NULL, ftype_name((ftenum_t) i));
sharkd_json_array_close();
- printf(",\"version\":");
- json_puts_string(sharkd_version());
+ sharkd_json_value_string(TRUE, "version", sharkd_version());
sharkd_json_array_open(TRUE, "nstat");
i = 0;
@@ -643,8 +652,7 @@ sharkd_session_process_status(void)
{
char *name = g_path_get_basename(cfile.filename);
- printf(",\"filename\":");
- json_puts_string(name);
+ sharkd_json_value_string(TRUE, "filename", name);
g_free(name);
}
@@ -693,11 +701,11 @@ sharkd_session_process_analyse_cb(epan_dissect_t *edt, proto_tree *tree, struct
if (!g_hash_table_lookup_extended(analyser->protocols_set, GUINT_TO_POINTER(proto_id), NULL, NULL))
{
+ guint proto_count = g_hash_table_size(analyser->protocols_set);
+
g_hash_table_insert(analyser->protocols_set, GUINT_TO_POINTER(proto_id), GUINT_TO_POINTER(proto_id));
- if (g_hash_table_size(analyser->protocols_set) != 1)
- printf(",");
- json_puts_string(proto_get_protocol_filter_name(proto_id));
+ sharkd_json_value_string(proto_count != 0, NULL, proto_get_protocol_filter_name(proto_id));
}
}
}
@@ -952,10 +960,7 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun
{
const col_item_t *col_item = &cinfo->columns[col];
- if (col)
- printf(",");
-
- json_puts_string(col_item->col_data);
+ sharkd_json_value_string(col != 0, NULL, col_item->col_data);
}
printf("],\"num\":%u", framenum);
@@ -1126,15 +1131,10 @@ sharkd_session_process_tap_expert_cb(void *tapdata)
if (tmp)
printf("\"g\":\"%s\",", tmp);
- printf("\"m\":");
- json_puts_string(ei->summary);
- printf(",");
+ sharkd_json_value_string(FALSE, "m", ei->summary);
if (ei->protocol)
- {
- printf("\"p\":");
- json_puts_string(ei->protocol);
- }
+ sharkd_json_value_string(TRUE, "p", ei->protocol);
sharkd_json_object_close();
sepa = TRUE;
@@ -1208,11 +1208,8 @@ sharkd_session_process_tap_flow_cb(void *tapdata)
{
char *addr_str;
- if (i)
- printf(",");
-
addr_str = address_to_display(NULL, &(graph_analysis->nodes[i]));
- json_puts_string(addr_str);
+ sharkd_json_value_string(i != 0, NULL, addr_str);
wmem_free(NULL, addr_str);
}
sharkd_json_array_close();
@@ -1235,10 +1232,7 @@ sharkd_session_process_tap_flow_cb(void *tapdata)
sharkd_json_value_anyf(TRUE, "pn", "[%u,%u]", sai->port_src, sai->port_dst);
if (sai->comment)
- {
- printf(",\"c\":");
- json_puts_string(sai->comment);
- }
+ sharkd_json_value_string(TRUE, "c", sai->comment);
sharkd_json_object_close();
sepa = TRUE;
@@ -1716,10 +1710,7 @@ sharkd_session_process_tap_nstat_cb(void *arg)
stat_tap_table_item *field = &(stat_data->stat_tap_data->fields[i]);
sharkd_json_object_open(i != 0);
-
- printf("\"c\":");
- json_puts_string(field->column_name);
-
+ sharkd_json_value_string(FALSE, "c", field->column_name);
sharkd_json_object_close();
}
sharkd_json_array_close();
@@ -1869,8 +1860,7 @@ sharkd_session_process_tap_rtd_cb(void *arg)
type_str = val_to_str_const(j, vs, "Other"); /* 1 table - description per row */
else
type_str = val_to_str_const(i, vs, "Other"); /* multiple table - description per table */
- printf("\"type\":");
- json_puts_string(type_str);
+ sharkd_json_value_string(FALSE, "type", type_str);
sharkd_json_value_anyf(TRUE, "num", "%u", ms->rtd[j].num);
sharkd_json_value_anyf(TRUE, "min", "%.9f", nstime_to_sec(&(ms->rtd[j].min)));
@@ -1946,25 +1936,18 @@ sharkd_session_process_tap_srt_cb(void *arg)
sharkd_json_object_open(i != 0);
- printf("\"n\":");
if (rst->name)
- json_puts_string(rst->name);
+ sharkd_json_value_string(FALSE, "n", rst->name);
else if (rst->short_name)
- json_puts_string(rst->short_name);
+ sharkd_json_value_string(FALSE, "n", rst->short_name);
else
- printf("\"table%u\"", i);
+ sharkd_json_value_stringf(FALSE, "n", "table%u", i);
if (rst->filter_string)
- {
- printf(",\"f\":");
- json_puts_string(rst->filter_string);
- }
+ sharkd_json_value_string(TRUE, "f", rst->filter_string);
if (rst->proc_column_name)
- {
- printf(",\"c\":");
- json_puts_string(rst->proc_column_name);
- }
+ sharkd_json_value_string(TRUE, "c", rst->proc_column_name);
sharkd_json_array_open(TRUE, "r");
for (j = 0; j < rst->num_procs; j++)
@@ -1977,8 +1960,7 @@ sharkd_session_process_tap_srt_cb(void *arg)
sharkd_json_object_open(sepa);
- printf("\"n\":");
- json_puts_string(proc->procedure);
+ sharkd_json_value_string(FALSE, "n", proc->procedure);
if (rst->filter_string)
sharkd_json_value_anyf(TRUE, "idx", "%d", proc->proc_index);
@@ -2058,22 +2040,13 @@ sharkd_session_process_tap_eo_cb(void *tapdata)
sharkd_json_value_anyf(FALSE, "pkt", "%u", eo_entry->pkt_num);
if (eo_entry->hostname)
- {
- printf(",\"hostname\":");
- json_puts_string(eo_entry->hostname);
- }
+ sharkd_json_value_string(TRUE, "hostname", eo_entry->hostname);
if (eo_entry->content_type)
- {
- printf(",\"type\":");
- json_puts_string(eo_entry->content_type);
- }
+ sharkd_json_value_string(TRUE, "type", eo_entry->content_type);
if (eo_entry->filename)
- {
- printf(",\"filename\":");
- json_puts_string(eo_entry->filename);
- }
+ sharkd_json_value_string(TRUE, "filename", eo_entry->filename);
sharkd_json_value_stringf(TRUE, "_download", "%s_%d", object_list->type, i);
@@ -2596,24 +2569,20 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
/* Server information: hostname, port, bytes sent */
host = address_to_name(&follow_info->server_ip);
- printf(",\"shost\":");
- json_puts_string(host);
+ sharkd_json_value_string(TRUE, "shost", host);
port = get_follow_port_to_display(follower)(NULL, follow_info->server_port);
- printf(",\"sport\":");
- json_puts_string(port);
+ sharkd_json_value_string(TRUE, "sport", port);
wmem_free(NULL, port);
sharkd_json_value_anyf(TRUE, "sbytes", "%u", follow_info->bytes_written[0]);
/* Client information: hostname, port, bytes sent */
host = address_to_name(&follow_info->client_ip);
- printf(",\"chost\":");
- json_puts_string(host);
+ sharkd_json_value_string(TRUE, "chost", host);
port = get_follow_port_to_display(follower)(NULL, follow_info->client_port);
- printf(",\"cport\":");
- json_puts_string(port);
+ sharkd_json_value_string(TRUE, "cport", port);
wmem_free(NULL, port);
sharkd_json_value_anyf(TRUE, "cbytes", "%u", follow_info->bytes_written[1]);
@@ -2632,9 +2601,7 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
sharkd_json_object_open(sepa);
sharkd_json_value_anyf(FALSE, "n", "%u", follow_record->packet_num);
-
- printf(",\"d\":");
- json_print_base64(follow_record->data->data, follow_record->data->len);
+ sharkd_json_value_base64(TRUE, "d", follow_record->data->data, follow_record->data->len);
if (follow_record->is_server)
sharkd_json_value_anyf(TRUE, "s", "%d", 1);
@@ -2670,18 +2637,17 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
sharkd_json_object_open(sepa);
- printf("\"l\":");
if (!finfo->rep)
{
char label_str[ITEM_LABEL_LENGTH];
label_str[0] = '\0';
proto_item_fill_label(finfo, label_str);
- json_puts_string(label_str);
+ sharkd_json_value_string(FALSE, "l", label_str);
}
else
{
- json_puts_string(finfo->rep->representation);
+ sharkd_json_value_string(FALSE, "l", finfo->rep->representation);
}
if (finfo->ds_tvb && tvbs && tvbs[0] != finfo->ds_tvb)
@@ -2721,16 +2687,15 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
{
char *url = fvalue_to_string_repr(NULL, &finfo->value, FTREPR_DISPLAY, finfo->hfinfo->display);
- printf(",\"t\":\"url\",\"url\":");
- json_puts_string(url);
+ sharkd_json_value_string(TRUE, "t", "url");
+ sharkd_json_value_string(TRUE, "url", url);
wmem_free(NULL, url);
}
filter = proto_construct_match_selected_string(finfo, edt);
if (filter)
{
- printf(",\"f\":");
- json_puts_string(filter);
+ sharkd_json_value_string(TRUE, "f", filter);
wmem_free(NULL, filter);
}
}
@@ -2781,8 +2746,9 @@ sharkd_follower_visit_layers_cb(const void *key _U_, void *value, void *user_dat
follow_filter = get_follow_conv_func(follower)(pi, &ignore_stream);
- printf(",[\"%s\",", layer_proto);
- json_puts_string(follow_filter);
+ sharkd_json_array_open(TRUE, NULL);
+ sharkd_json_value_string(FALSE, NULL, layer_proto);
+ sharkd_json_value_string(TRUE, NULL, follow_filter);
sharkd_json_array_close();
g_free(follow_filter);
@@ -2816,10 +2782,7 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
pkt_comment = pi->rec->opt_comment;
if (pkt_comment)
- {
- printf(",\"comment\":");
- json_puts_string(pkt_comment);
- }
+ sharkd_json_value_string(TRUE, "comment", pkt_comment);
if (tree)
{
@@ -2887,17 +2850,16 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
tvb = get_data_source_tvb(src);
length = tvb_captured_length(tvb);
- printf(",\"bytes\":");
if (length != 0)
{
const guchar *cp = tvb_get_ptr(tvb, 0, length);
/* XXX pi.fd->flags.encoding */
- json_print_base64(cp, length);
+ sharkd_json_value_base64(TRUE, "bytes", cp, length);
}
else
{
- json_print_base64("", 0);
+ sharkd_json_value_base64(TRUE, "bytes", "", 0);
}
data_src = data_src->next;
@@ -2922,17 +2884,16 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
tvb = get_data_source_tvb(src);
length = tvb_captured_length(tvb);
- printf(",\"bytes\":");
if (length != 0)
{
const guchar *cp = tvb_get_ptr(tvb, 0, length);
/* XXX pi.fd->flags.encoding */
- json_print_base64(cp, length);
+ sharkd_json_value_base64(TRUE, "bytes", cp, length);
}
else
{
- json_print_base64("", 0);
+ sharkd_json_value_base64(TRUE, "bytes", "", 0);
}
sharkd_json_object_close();
@@ -3120,8 +3081,7 @@ sharkd_session_process_iograph(char *buf, const jsmntok_t *tokens, int count)
if (graph->error)
{
- printf("\"errmsg\":");
- json_puts_string(graph->error->str);
+ sharkd_json_value_string(FALSE, "errmsg", graph->error->str);
g_string_free(graph->error, TRUE);
}
else
@@ -3406,8 +3366,7 @@ sharkd_session_process_check(char *buf, const jsmntok_t *tokens, int count)
}
else
{
- printf(",\"filter\":");
- json_puts_string(err_msg);
+ sharkd_json_value_string(TRUE, "filter", err_msg);
g_free(err_msg);
}
}
@@ -3515,11 +3474,9 @@ sharkd_session_process_complete(char *buf, const jsmntok_t *tokens, int count)
{
sharkd_json_object_open(sepa);
{
- printf("\"f\":");
- json_puts_string(protocol_filter);
+ sharkd_json_value_string(FALSE, "f", protocol_filter);
sharkd_json_value_anyf(TRUE, "t", "%d", FT_PROTOCOL);
- printf(",\"n\":");
- json_puts_string(protocol_name);
+ sharkd_json_value_string(TRUE, "n", protocol_name);
}
sharkd_json_object_close();
sepa = TRUE;
@@ -3537,15 +3494,13 @@ sharkd_session_process_complete(char *buf, const jsmntok_t *tokens, int count)
{
sharkd_json_object_open(sepa);
{
- printf("\"f\":");
- json_puts_string(hfinfo->abbrev);
+ sharkd_json_value_string(FALSE, "f", hfinfo->abbrev);
/* XXX, skip displaying name, if there are multiple (to not confuse user) */
if (hfinfo->same_name_next == NULL)
{
sharkd_json_value_anyf(TRUE, "t", "%d", hfinfo->type);
- printf(",\"n\":");
- json_puts_string(hfinfo->name);
+ sharkd_json_value_string(TRUE, "n", hfinfo->name);
}
}
sharkd_json_object_close();
@@ -3657,8 +3612,7 @@ sharkd_session_process_setconf(char *buf, const jsmntok_t *tokens, int count)
if (errmsg)
{
/* Add error message for some syntax errors. */
- printf(",\"errmsg\":");
- json_puts_string(errmsg);
+ sharkd_json_value_string(TRUE, "errmsg", errmsg);
}
printf("}\n");
g_free(errmsg);
@@ -3695,8 +3649,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
case PREF_SAVE_FILENAME:
case PREF_OPEN_FILENAME:
case PREF_DIRNAME:
- printf("\"s\":");
- json_puts_string(prefs_get_string_value(pref, pref_current));
+ sharkd_json_value_string(FALSE, "s", prefs_get_string_value(pref, pref_current));
break;
case PREF_ENUM:
@@ -3712,8 +3665,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
if (enums->value == prefs_get_enum_value(pref, pref_current))
sharkd_json_value_anyf(TRUE, "s", "1");
- printf(",\"d\":");
- json_puts_string(enums->description);
+ sharkd_json_value_string(TRUE, "d", enums->description);
sharkd_json_object_close();
enum_sepa = ",";
@@ -3747,10 +3699,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
{
char *str = uat_fld_tostr(rec, &(uat->fields[colnum]));
- if (colnum)
- printf(",");
-
- json_puts_string(str);
+ sharkd_json_value_string(colnum != 0, NULL, str);
g_free(str);
}
@@ -3770,8 +3719,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
}
#if 0
- printf(",\"t\":");
- json_puts_string(prefs_get_title(pref));
+ sharkd_json_value_string(TRUE, "t", prefs_get_title(pref));
#endif
sharkd_json_object_close();
@@ -4103,12 +4051,10 @@ sharkd_session_process_download(char *buf, const jsmntok_t *tokens, int count)
const char *mime = (eo_entry->content_type) ? eo_entry->content_type : "application/octet-stream";
const char *filename = (eo_entry->filename) ? eo_entry->filename : tok_token;
- printf("{\"file\":");
- json_puts_string(filename);
- printf(",\"mime\":");
- json_puts_string(mime);
- printf(",\"data\":");
- json_print_base64(eo_entry->payload_data, (size_t) eo_entry->payload_len);
+ sharkd_json_object_open(FALSE);
+ sharkd_json_value_string(FALSE, "file", filename);
+ sharkd_json_value_string(TRUE, "mime", mime);
+ sharkd_json_value_base64(TRUE, "data", eo_entry->payload_data, (size_t) eo_entry->payload_len);
printf("}\n");
}
}
@@ -4121,12 +4067,10 @@ sharkd_session_process_download(char *buf, const jsmntok_t *tokens, int count)
const char *mime = "text/plain";
const char *filename = "keylog.txt";
- printf("{\"file\":");
- json_puts_string(filename);
- printf(",\"mime\":");
- json_puts_string(mime);
- printf(",\"data\":");
- json_print_base64(str, strlen(str));
+ sharkd_json_object_open(FALSE);
+ sharkd_json_value_string(FALSE, "file", filename);
+ sharkd_json_value_string(TRUE, "mime", mime);
+ sharkd_json_value_base64(TRUE, "data", str, strlen(str));
printf("}\n");
}
g_free(str);
@@ -4159,10 +4103,9 @@ sharkd_session_process_download(char *buf, const jsmntok_t *tokens, int count)
const char *mime = "audio/x-wav";
const char *filename = tok_token;
- printf("{\"file\":");
- json_puts_string(filename);
- printf(",\"mime\":");
- json_puts_string(mime);
+ sharkd_json_object_open(FALSE);
+ sharkd_json_value_string(FALSE, "file", filename);
+ sharkd_json_value_string(TRUE, "mime", mime);
printf(",\"data\":");
putchar('"');