sharkd: cleanup printf() usage during JSON generation (part III).

Most of sharkd printf()'s are used to output formatted value with given key.
Add two formatting-function helpers: sharkd_json_value_anyf and sharkd_json_value_stringf.

Conversion printf to these function lower number of printf() from 300 to 156 (48% reduction).

Change-Id: Ied538cc5b84d48d942e2140ff6b93969579d6132
Reviewed-on: https://code.wireshark.org/review/29816
Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Jakub Zawadzki <darkjames-ws@darkjames.pl>
This commit is contained in:
Jakub Zawadzki 2018-09-24 22:47:42 +02:00
parent 19b8329278
commit 5507d1b344
1 changed files with 173 additions and 151 deletions

View File

@ -13,6 +13,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <errno.h>
@ -169,19 +170,42 @@ json_print_base64(const guint8 *data, size_t len)
putchar('"');
}
static inline void
sharkd_json_open(gboolean sepa, const char *key, char ch)
static void G_GNUC_PRINTF(3, 4)
sharkd_json_value_anyf(gboolean sepa, const char *key, const char *valuef, ...)
{
if (key)
printf("%s\"%s\":%c", (sepa) ? "," : "", key, ch);
printf("%s\"%s\":", (sepa) ? "," : "", key);
else
printf("%s%c", (sepa) ? "," : "", ch);
printf("%s", (sepa) ? "," : "");
if (valuef && *valuef)
{
va_list ap;
va_start(ap, valuef);
vprintf(valuef, ap);
va_end(ap);
}
}
static void G_GNUC_PRINTF(3, 4)
sharkd_json_value_stringf(gboolean sepa, const char *key, const char *format, ...)
{
va_list ap;
sharkd_json_value_anyf(sepa, key, NULL);
va_start(ap, format);
putchar('"');
vprintf(format, ap);
putchar('"');
va_end(ap);
}
static void
sharkd_json_array_open(gboolean sepa, const char *key)
{
sharkd_json_open(sepa, key, '[');
sharkd_json_value_anyf(sepa, key, "[");
}
static void
@ -193,7 +217,7 @@ sharkd_json_array_close(void)
static void
sharkd_json_object_open(gboolean sepa)
{
sharkd_json_open(sepa, NULL, '{');
sharkd_json_value_anyf(sepa, NULL, "{");
}
static void
@ -284,8 +308,8 @@ sharkd_session_process_info_nstat_cb(const void *key, void *value, void *userdat
int *pi = (int *) userdata;
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"%s\"", stat_tap->title);
printf(",\"tap\":\"nstat:%s\"", (const char *) key);
sharkd_json_value_stringf(FALSE, "name", "%s", stat_tap->title);
sharkd_json_value_stringf(TRUE, "tap", "nstat:%s", (const char *) key);
sharkd_json_object_close();
*pi = *pi + 1;
@ -303,8 +327,8 @@ sharkd_session_process_info_conv_cb(const void* key, void* value, void* userdata
if (get_conversation_packet_func(table))
{
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Conversation List/%s\"", label);
printf(",\"tap\":\"conv:%s\"", label);
sharkd_json_value_stringf(FALSE, "name", "Conversation List/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "conv:%s", label);
sharkd_json_object_close();
*pi = *pi + 1;
@ -313,8 +337,8 @@ sharkd_session_process_info_conv_cb(const void* key, void* value, void* userdata
if (get_hostlist_packet_func(table))
{
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Endpoint/%s\"", label);
printf(",\"tap\":\"endpt:%s\"", label);
sharkd_json_value_stringf(FALSE, "name", "Endpoint/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "endpt:%s", label);
sharkd_json_object_close();
*pi = *pi + 1;
@ -329,8 +353,8 @@ sharkd_session_seq_analysis_cb(const void *key, void *value, void *userdata)
int *pi = (int *) userdata;
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"%s\"", sequence_analysis_get_ui_name(analysis));
printf(",\"tap\":\"seqa:%s\"", (const char *) key);
sharkd_json_value_stringf(FALSE, "name", "%s", sequence_analysis_get_ui_name(analysis));
sharkd_json_value_stringf(TRUE, "tap", "seqa:%s", (const char *) key);
sharkd_json_object_close();
*pi = *pi + 1;
@ -348,8 +372,8 @@ sharkd_export_object_visit_cb(const void *key _U_, void *value, void *user_data)
const char *label = proto_get_protocol_short_name(find_protocol_by_id(proto_id));
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Export Object/%s\"", label);
printf(",\"tap\":\"eo:%s\"", filter);
sharkd_json_value_stringf(FALSE, "name", "Export Object/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "eo:%s", filter);
sharkd_json_object_close();
*pi = *pi + 1;
@ -367,8 +391,8 @@ sharkd_srt_visit_cb(const void *key _U_, void *value, void *user_data)
const char *label = proto_get_protocol_short_name(find_protocol_by_id(proto_id));
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Service Response Time/%s\"", label);
printf(",\"tap\":\"srt:%s\"", filter);
sharkd_json_value_stringf(FALSE, "name", "Service Response Time/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "srt:%s", filter);
sharkd_json_object_close();
*pi = *pi + 1;
@ -386,8 +410,8 @@ sharkd_rtd_visit_cb(const void *key _U_, void *value, void *user_data)
const char *label = proto_get_protocol_short_name(find_protocol_by_id(proto_id));
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Response Time Delay/%s\"", label);
printf(",\"tap\":\"rtd:%s\"", filter);
sharkd_json_value_stringf(FALSE, "name", "Response Time Delay/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "rtd:%s", filter);
sharkd_json_object_close();
*pi = *pi + 1;
@ -405,8 +429,8 @@ sharkd_follower_visit_cb(const void *key _U_, void *value, void *user_data)
const char *filter = label; /* correct: get_follow_by_name() is registered by short name */
sharkd_json_object_open(*pi != 0);
printf("\"name\":\"Follow/%s\"", label);
printf(",\"tap\":\"follow:%s\"", filter);
sharkd_json_value_stringf(FALSE, "name", "Follow/%s", label);
sharkd_json_value_stringf(TRUE, "tap", "follow:%s", filter);
sharkd_json_object_close();
*pi = *pi + 1;
@ -471,8 +495,8 @@ sharkd_session_process_info(void)
const char *col_descr = col_format_desc(i);
sharkd_json_object_open(i != 0);
printf("\"name\":\"%s\"", col_descr);
printf(",\"format\":\"%s\"", col_format);
sharkd_json_value_stringf(FALSE, "name", "%s", col_descr);
sharkd_json_value_stringf(TRUE, "format", "%s", col_format);
sharkd_json_object_close();
}
sharkd_json_array_close();
@ -488,8 +512,8 @@ sharkd_session_process_info(void)
stats_tree_cfg *cfg = (stats_tree_cfg *) l->data;
sharkd_json_object_open(sepa);
printf("\"name\":\"%s\"", cfg->name);
printf(",\"tap\":\"stat:%s\"", cfg->abbr);
sharkd_json_value_stringf(FALSE, "name", "%s", cfg->name);
sharkd_json_value_stringf(TRUE, "tap", "stat:%s", cfg->abbr);
sharkd_json_object_close();
sepa = TRUE;
}
@ -613,7 +637,7 @@ sharkd_session_process_status(void)
{
printf("{\"frames\":%u", cfile.count);
printf(",\"duration\":%.9f", nstime_to_sec(&cfile.elapsed_time));
sharkd_json_value_anyf(TRUE, "duration", "%.9f", nstime_to_sec(&cfile.elapsed_time));
if (cfile.filename)
{
@ -629,7 +653,7 @@ sharkd_session_process_status(void)
gint64 file_size = wtap_file_size(cfile.provider.wth, NULL);
if (file_size > 0)
printf(",\"filesize\":%" G_GINT64_FORMAT, file_size);
sharkd_json_value_anyf(TRUE, "filesize", "%" G_GINT64_FORMAT, file_size);
}
printf("}\n");
@ -709,10 +733,10 @@ sharkd_session_process_analyse(void)
sharkd_json_array_close();
if (analyser.first_time)
printf(",\"first\":%.9f", nstime_to_sec(analyser.first_time));
sharkd_json_value_anyf(TRUE, "first", "%.9f", nstime_to_sec(analyser.first_time));
if (analyser.last_time)
printf(",\"last\":%.9f", nstime_to_sec(analyser.last_time));
sharkd_json_value_anyf(TRUE, "last", "%.9f", nstime_to_sec(analyser.last_time));
printf("}\n");
@ -938,19 +962,19 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun
if (fdata->flags.has_user_comment || fdata->flags.has_phdr_comment)
{
if (!fdata->flags.has_user_comment || sharkd_get_user_comment(fdata) != NULL)
printf(",\"ct\":true");
sharkd_json_value_anyf(TRUE, "ct", "true");
}
if (fdata->flags.ignored)
printf(",\"i\":true");
sharkd_json_value_anyf(TRUE, "i", "true");
if (fdata->flags.marked)
printf(",\"m\":true");
sharkd_json_value_anyf(TRUE, "m", "true");
if (fdata->color_filter)
{
printf(",\"bg\":\"%x\"", color_t_to_rgb(&fdata->color_filter->bg_color));
printf(",\"fg\":\"%x\"", color_t_to_rgb(&fdata->color_filter->fg_color));
sharkd_json_value_stringf(TRUE, "bg", "%x", color_t_to_rgb(&fdata->color_filter->bg_color));
sharkd_json_value_stringf(TRUE, "fg", "%x", color_t_to_rgb(&fdata->color_filter->fg_color));
}
sharkd_json_object_close();
@ -977,30 +1001,30 @@ sharkd_session_process_tap_stats_node_cb(const stat_node *n)
{
/* code based on stats_tree_get_values_from_node() */
printf("%s{\"name\":\"%s\"", sepa, node->name);
printf(",\"count\":%d", node->counter);
sharkd_json_value_anyf(TRUE, "count", "%d", node->counter);
if (node->counter && ((node->st_flags & ST_FLG_AVERAGE) || node->rng))
{
printf(",\"avg\":%.2f", ((float)node->total) / node->counter);
printf(",\"min\":%d", node->minvalue);
printf(",\"max\":%d", node->maxvalue);
sharkd_json_value_anyf(TRUE, "avg", "%.2f", ((float)node->total) / node->counter);
sharkd_json_value_anyf(TRUE, "min", "%d", node->minvalue);
sharkd_json_value_anyf(TRUE, "max", "%d", node->maxvalue);
}
if (node->st->elapsed)
printf(",\"rate\":%.4f",((float)node->counter) / node->st->elapsed);
sharkd_json_value_anyf(TRUE, "rate", "%.4f", ((float)node->counter) / node->st->elapsed);
if (node->parent && node->parent->counter)
printf(",\"perc\":%.2f", (node->counter * 100.0) / node->parent->counter);
sharkd_json_value_anyf(TRUE, "perc", "%.2f", (node->counter * 100.0) / node->parent->counter);
else if (node->parent == &(node->st->root))
printf(",\"perc\":100");
sharkd_json_value_anyf(TRUE, "perc", "100");
if (prefs.st_enable_burstinfo && node->max_burst)
{
if (prefs.st_burst_showcount)
printf(",\"burstcount\":%d", node->max_burst);
sharkd_json_value_anyf(TRUE, "burstcount", "%d", node->max_burst);
else
printf(",\"burstrate\":%.4f", ((double)node->max_burst) / prefs.st_burst_windowlen);
sharkd_json_value_anyf(TRUE, "burstrate", "%.4f", ((double)node->max_burst) / prefs.st_burst_windowlen);
printf(",\"bursttime\":%.3f", ((double)node->burst_time / 1000.0));
sharkd_json_value_anyf(TRUE, "bursttime", "%.3f", ((double)node->burst_time / 1000.0));
}
if (node->children)
@ -1206,9 +1230,9 @@ sharkd_session_process_tap_flow_cb(void *tapdata)
sharkd_json_object_open(sepa);
printf("\"t\":\"%s\"", sai->time_str);
printf(",\"n\":[%u,%u]", sai->src_node, sai->dst_node);
printf(",\"pn\":[%u,%u]", sai->port_src, sai->port_dst);
sharkd_json_value_stringf(FALSE, "t", "%s", sai->time_str);
sharkd_json_value_anyf(TRUE, "n", "[%u,%u]", sai->src_node, sai->dst_node);
sharkd_json_value_anyf(TRUE, "pn", "[%u,%u]", sai->port_src, sai->port_dst);
if (sai->comment)
{
@ -1429,16 +1453,16 @@ sharkd_session_process_tap_rtp_analyse_cb(void *tapdata)
printf("{\"tap\":\"%s\",\"type\":\"rtp-analyse\"", rtp_req->tap_name);
printf(",\"ssrc\":%u", rtp_req->id.ssrc);
sharkd_json_value_anyf(TRUE, "ssrc", "%u", rtp_req->id.ssrc);
printf(",\"max_delta\":%f", statinfo->max_delta);
printf(",\"max_delta_nr\":%u", statinfo->max_nr);
printf(",\"max_jitter\":%f", statinfo->max_jitter);
printf(",\"mean_jitter\":%f", statinfo->mean_jitter);
printf(",\"max_skew\":%f", statinfo->max_skew);
printf(",\"total_nr\":%u", statinfo->total_nr);
printf(",\"seq_err\":%u", statinfo->sequence);
printf(",\"duration\":%f", statinfo->time - statinfo->start_time);
sharkd_json_value_anyf(TRUE, "max_delta", "%f", statinfo->max_delta);
sharkd_json_value_anyf(TRUE, "max_delta_nr", "%u", statinfo->max_nr);
sharkd_json_value_anyf(TRUE, "max_jitter", "%f", statinfo->max_jitter);
sharkd_json_value_anyf(TRUE, "mean_jitter", "%f", statinfo->mean_jitter);
sharkd_json_value_anyf(TRUE, "max_skew", "%f", statinfo->max_skew);
sharkd_json_value_anyf(TRUE, "total_nr", "%u", statinfo->total_nr);
sharkd_json_value_anyf(TRUE, "seq_err", "%u", statinfo->sequence);
sharkd_json_value_anyf(TRUE, "duration", "%f", statinfo->time - statinfo->start_time);
sharkd_json_array_open(TRUE, "items");
for (l = rtp_req->packets; l; l = l->next)
@ -1447,13 +1471,13 @@ sharkd_session_process_tap_rtp_analyse_cb(void *tapdata)
sharkd_json_object_open(sepa);
printf("\"f\":%u", item->frame_num);
printf(",\"o\":%.9f", item->arrive_offset);
printf(",\"sn\":%u", item->sequence_num);
printf(",\"d\":%.2f", item->delta);
printf(",\"j\":%.2f", item->jitter);
printf(",\"sk\":%.2f", item->skew);
printf(",\"bw\":%.2f", item->bandwidth);
sharkd_json_value_anyf(FALSE, "f", "%u", item->frame_num);
sharkd_json_value_anyf(TRUE, "o", "%.9f", item->arrive_offset);
sharkd_json_value_anyf(TRUE, "sn", "%u", item->sequence_num);
sharkd_json_value_anyf(TRUE, "d", "%.2f", item->delta);
sharkd_json_value_anyf(TRUE, "j", "%.2f", item->jitter);
sharkd_json_value_anyf(TRUE, "sk", "%.2f", item->skew);
sharkd_json_value_anyf(TRUE, "bw", "%.2f", item->bandwidth);
if (item->pt == PT_CN)
printf(",\"s\":\"%s\",\"t\":%d", "Comfort noise (PT=13, RFC 3389)", RTP_TYPE_CN);
@ -1481,10 +1505,10 @@ sharkd_session_process_tap_rtp_analyse_cb(void *tapdata)
else if (item->flags & STAT_FLAG_PT_T_EVENT)
printf(",\"s\":\"PT=%u telephone/event\",\"t\":%d", item->pt, RTP_TYPE_PT_EVENT);
else if (item->flags & STAT_FLAG_MARKER)
printf(",\"t\":%d", RTP_TYPE_WARN);
sharkd_json_value_anyf(TRUE, "t", "%d", RTP_TYPE_WARN);
if (item->marker)
printf(",\"mark\":1");
sharkd_json_value_anyf(TRUE, "mark", "1");
sharkd_json_object_close();
sepa = TRUE;
@ -1565,31 +1589,31 @@ sharkd_session_process_tap_conv_cb(void *arg)
sharkd_json_object_open(i != 0);
printf("\"saddr\":\"%s\"", (src_addr = get_conversation_address(NULL, &iui->src_address, iu->resolve_name)));
printf(",\"daddr\":\"%s\"", (dst_addr = get_conversation_address(NULL, &iui->dst_address, iu->resolve_name)));
sharkd_json_value_stringf(FALSE, "saddr", "%s", (src_addr = get_conversation_address(NULL, &iui->src_address, iu->resolve_name)));
sharkd_json_value_stringf(TRUE, "daddr", "%s", (dst_addr = get_conversation_address(NULL, &iui->dst_address, iu->resolve_name)));
if (proto_with_port)
{
printf(",\"sport\":\"%s\"", (src_port = get_conversation_port(NULL, iui->src_port, iui->etype, iu->resolve_port)));
printf(",\"dport\":\"%s\"", (dst_port = get_conversation_port(NULL, iui->dst_port, iui->etype, iu->resolve_port)));
sharkd_json_value_stringf(TRUE, "sport", "%s", (src_port = get_conversation_port(NULL, iui->src_port, iui->etype, iu->resolve_port)));
sharkd_json_value_stringf(TRUE, "dport", "%s", (dst_port = get_conversation_port(NULL, iui->dst_port, iui->etype, iu->resolve_port)));
wmem_free(NULL, src_port);
wmem_free(NULL, dst_port);
}
printf(",\"rxf\":%" G_GUINT64_FORMAT, iui->rx_frames);
printf(",\"rxb\":%" G_GUINT64_FORMAT, iui->rx_bytes);
sharkd_json_value_anyf(TRUE, "rxf", "%" G_GUINT64_FORMAT, iui->rx_frames);
sharkd_json_value_anyf(TRUE, "rxb", "%" G_GUINT64_FORMAT, iui->rx_bytes);
printf(",\"txf\":%" G_GUINT64_FORMAT, iui->tx_frames);
printf(",\"txb\":%" G_GUINT64_FORMAT, iui->tx_bytes);
sharkd_json_value_anyf(TRUE, "txf", "%" G_GUINT64_FORMAT, iui->tx_frames);
sharkd_json_value_anyf(TRUE, "txb", "%" G_GUINT64_FORMAT, iui->tx_bytes);
printf(",\"start\":%.9f", nstime_to_sec(&iui->start_time));
printf(",\"stop\":%.9f", nstime_to_sec(&iui->stop_time));
sharkd_json_value_anyf(TRUE, "start", "%.9f", nstime_to_sec(&iui->start_time));
sharkd_json_value_anyf(TRUE, "stop", "%.9f", nstime_to_sec(&iui->stop_time));
filter_str = get_conversation_filter(iui, CONV_DIR_A_TO_FROM_B);
if (filter_str)
{
printf(",\"filter\":\"%s\"", filter_str);
sharkd_json_value_stringf(TRUE, "filter", "%s", filter_str);
g_free(filter_str);
}
@ -1614,25 +1638,25 @@ sharkd_session_process_tap_conv_cb(void *arg)
sharkd_json_object_open(i != 0);
printf("\"host\":\"%s\"", (host_str = get_conversation_address(NULL, &host->myaddress, iu->resolve_name)));
sharkd_json_value_stringf(FALSE, "host", "%s", (host_str = get_conversation_address(NULL, &host->myaddress, iu->resolve_name)));
if (proto_with_port)
{
printf(",\"port\":\"%s\"", (port_str = get_conversation_port(NULL, host->port, host->etype, iu->resolve_port)));
sharkd_json_value_stringf(TRUE, "port", "%s", (port_str = get_conversation_port(NULL, host->port, host->etype, iu->resolve_port)));
wmem_free(NULL, port_str);
}
printf(",\"rxf\":%" G_GUINT64_FORMAT, host->rx_frames);
printf(",\"rxb\":%" G_GUINT64_FORMAT, host->rx_bytes);
sharkd_json_value_anyf(TRUE, "rxf", "%" G_GUINT64_FORMAT, host->rx_frames);
sharkd_json_value_anyf(TRUE, "rxb", "%" G_GUINT64_FORMAT, host->rx_bytes);
printf(",\"txf\":%" G_GUINT64_FORMAT, host->tx_frames);
printf(",\"txb\":%" G_GUINT64_FORMAT, host->tx_bytes);
sharkd_json_value_anyf(TRUE, "txf", "%" G_GUINT64_FORMAT, host->tx_frames);
sharkd_json_value_anyf(TRUE, "txb", "%" G_GUINT64_FORMAT, host->tx_bytes);
filter_str = get_hostlist_filter(host);
if (filter_str)
{
printf(",\"filter\":\"%s\"", filter_str);
sharkd_json_value_stringf(TRUE, "filter", "%s", filter_str);
g_free(filter_str);
}
@ -1708,8 +1732,7 @@ sharkd_session_process_tap_nstat_cb(void *arg)
sharkd_json_object_open(i != 0);
printf("\"t\":");
printf("\"%s\"", table->title);
sharkd_json_value_stringf(FALSE, "t", "%s", table->title);
sharkd_json_array_open(TRUE, "i");
for (j = 0; j < table->num_elements; j++)
@ -1822,10 +1845,10 @@ sharkd_session_process_tap_rtd_cb(void *arg)
{
const rtd_timestat *ms = &rtd_data->stat_table.time_stats[0];
printf(",\"open_req\":%u", ms->open_req_num);
printf(",\"disc_rsp\":%u", ms->disc_rsp_num);
printf(",\"req_dup\":%u", ms->req_dup_num);
printf(",\"rsp_dup\":%u", ms->rsp_dup_num);
sharkd_json_value_anyf(TRUE, "open_req", "%u", ms->open_req_num);
sharkd_json_value_anyf(TRUE, "disc_rsp", "%u", ms->disc_rsp_num);
sharkd_json_value_anyf(TRUE, "req_dup", "%u", ms->req_dup_num);
sharkd_json_value_anyf(TRUE, "rsp_dup", "%u", ms->rsp_dup_num);
}
sharkd_json_array_open(TRUE, "stats");
@ -1849,20 +1872,20 @@ sharkd_session_process_tap_rtd_cb(void *arg)
printf("\"type\":");
json_puts_string(type_str);
printf(",\"num\":%u", ms->rtd[j].num);
printf(",\"min\":%.9f", nstime_to_sec(&(ms->rtd[j].min)));
printf(",\"max\":%.9f", nstime_to_sec(&(ms->rtd[j].max)));
printf(",\"tot\":%.9f", nstime_to_sec(&(ms->rtd[j].tot)));
printf(",\"min_frame\":%u", ms->rtd[j].min_num);
printf(",\"max_frame\":%u", ms->rtd[j].max_num);
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)));
sharkd_json_value_anyf(TRUE, "max", "%.9f", nstime_to_sec(&(ms->rtd[j].max)));
sharkd_json_value_anyf(TRUE, "tot", "%.9f", nstime_to_sec(&(ms->rtd[j].tot)));
sharkd_json_value_anyf(TRUE, "min_frame", "%u", ms->rtd[j].min_num);
sharkd_json_value_anyf(TRUE, "max_frame", "%u", ms->rtd[j].max_num);
if (rtd_data->stat_table.num_rtds != 1)
{
/* like in tshark, display it on every row */
printf(",\"open_req\":%u", ms->open_req_num);
printf(",\"disc_rsp\":%u", ms->disc_rsp_num);
printf(",\"req_dup\":%u", ms->req_dup_num);
printf(",\"rsp_dup\":%u", ms->rsp_dup_num);
sharkd_json_value_anyf(TRUE, "open_req", "%u", ms->open_req_num);
sharkd_json_value_anyf(TRUE, "disc_rsp", "%u", ms->disc_rsp_num);
sharkd_json_value_anyf(TRUE, "req_dup", "%u", ms->req_dup_num);
sharkd_json_value_anyf(TRUE, "rsp_dup", "%u", ms->rsp_dup_num);
}
sharkd_json_object_close();
@ -1958,13 +1981,13 @@ sharkd_session_process_tap_srt_cb(void *arg)
json_puts_string(proc->procedure);
if (rst->filter_string)
printf(",\"idx\":%d", proc->proc_index);
sharkd_json_value_anyf(TRUE, "idx", "%d", proc->proc_index);
printf(",\"num\":%u", proc->stats.num);
sharkd_json_value_anyf(TRUE, "num", "%u", proc->stats.num);
printf(",\"min\":%.9f", nstime_to_sec(&proc->stats.min));
printf(",\"max\":%.9f", nstime_to_sec(&proc->stats.max));
printf(",\"tot\":%.9f", nstime_to_sec(&proc->stats.tot));
sharkd_json_value_anyf(TRUE, "min", "%.9f", nstime_to_sec(&proc->stats.min));
sharkd_json_value_anyf(TRUE, "max", "%.9f", nstime_to_sec(&proc->stats.max));
sharkd_json_value_anyf(TRUE, "tot", "%.9f", nstime_to_sec(&proc->stats.tot));
sharkd_json_object_close();
sepa = TRUE;
@ -2023,7 +2046,7 @@ sharkd_session_process_tap_eo_cb(void *tapdata)
int i = 0;
printf("{\"tap\":\"%s\",\"type\":\"eo\"", object_list->type);
printf(",\"proto\":\"%s\"", object_list->proto);
sharkd_json_value_stringf(TRUE, "proto", "%s", object_list->proto);
sharkd_json_array_open(TRUE, "objects");
for (slist = object_list->entries; slist; slist = slist->next)
@ -2032,7 +2055,7 @@ sharkd_session_process_tap_eo_cb(void *tapdata)
sharkd_json_object_open(i != 0);
printf("\"pkt\":%u", eo_entry->pkt_num);
sharkd_json_value_anyf(FALSE, "pkt", "%u", eo_entry->pkt_num);
if (eo_entry->hostname)
{
@ -2052,9 +2075,9 @@ sharkd_session_process_tap_eo_cb(void *tapdata)
json_puts_string(eo_entry->filename);
}
printf(",\"_download\":\"%s_%d\"", object_list->type, i);
sharkd_json_value_stringf(TRUE, "_download", "%s_%d", object_list->type, i);
printf(",\"len\":%" G_GINT64_FORMAT, eo_entry->payload_len);
sharkd_json_value_anyf(TRUE, "len", "%" G_GINT64_FORMAT, eo_entry->payload_len);
sharkd_json_object_close();
@ -2122,27 +2145,26 @@ sharkd_session_process_tap_rtp_cb(void *arg)
rtpstream_info_calculate(streaminfo, &calc);
printf("%s{\"ssrc\":%u", sepa, calc.ssrc);
printf(",\"payload\":\"%s\"", calc.all_payload_type_names);
sharkd_json_value_stringf(TRUE, "payload", "%s", calc.all_payload_type_names);
printf(",\"saddr\":\"%s\"", calc.src_addr_str);
printf(",\"sport\":%u", calc.src_port);
sharkd_json_value_stringf(TRUE, "saddr", "%s", calc.src_addr_str);
sharkd_json_value_anyf(TRUE, "sport", "%u", calc.src_port);
sharkd_json_value_stringf(TRUE, "daddr", "%s", calc.dst_addr_str);
sharkd_json_value_anyf(TRUE, "dport", "%u", calc.dst_port);
printf(",\"daddr\":\"%s\"", calc.dst_addr_str);
printf(",\"dport\":%u", calc.dst_port);
sharkd_json_value_anyf(TRUE, "pkts", "%u", calc.packet_count);
printf(",\"pkts\":%u", calc.packet_count);
sharkd_json_value_anyf(TRUE, "max_delta", "%f",calc.max_delta);
sharkd_json_value_anyf(TRUE, "max_jitter", "%f", calc.max_jitter);
sharkd_json_value_anyf(TRUE, "mean_jitter", "%f", calc.mean_jitter);
printf(",\"max_delta\":%f",calc.max_delta);
printf(",\"max_jitter\":%f", calc.max_jitter);
printf(",\"mean_jitter\":%f", calc.mean_jitter);
sharkd_json_value_anyf(TRUE, "expectednr", "%u", calc.packet_expected);
sharkd_json_value_anyf(TRUE, "totalnr", "%u", calc.total_nr);
printf(",\"expectednr\":%u", calc.packet_expected);
printf(",\"totalnr\":%u", calc.total_nr);
printf(",\"problem\":%s", calc.problem? "true" : "false");
sharkd_json_value_anyf(TRUE, "problem", calc.problem ? "true" : "false");
/* for filter */
printf(",\"ipver\":%d", (streaminfo->id.src_addr.type == AT_IPv6) ? 6 : 4);
sharkd_json_value_anyf(TRUE, "ipver", "%d", (streaminfo->id.src_addr.type == AT_IPv6) ? 6 : 4);
rtpstream_info_calc_free(&calc);
@ -2570,7 +2592,7 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
sharkd_json_object_open(FALSE);
printf("\"err\":0");
sharkd_json_value_anyf(FALSE, "err", "0");
/* Server information: hostname, port, bytes sent */
host = address_to_name(&follow_info->server_ip);
@ -2582,7 +2604,7 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
json_puts_string(port);
wmem_free(NULL, port);
printf(",\"sbytes\":%u", follow_info->bytes_written[0]);
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);
@ -2594,7 +2616,7 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
json_puts_string(port);
wmem_free(NULL, port);
printf(",\"cbytes\":%u", follow_info->bytes_written[1]);
sharkd_json_value_anyf(TRUE, "cbytes", "%u", follow_info->bytes_written[1]);
if (follow_info->payload)
{
@ -2609,13 +2631,13 @@ sharkd_session_process_follow(char *buf, const jsmntok_t *tokens, int count)
sharkd_json_object_open(sepa);
printf("\"n\":%u", follow_record->packet_num);
sharkd_json_value_anyf(FALSE, "n", "%u", follow_record->packet_num);
printf(",\"d\":");
json_print_base64(follow_record->data->data, follow_record->data->len);
if (follow_record->is_server)
printf(",\"s\":%d", 1);
sharkd_json_value_anyf(TRUE, "s", "%d", 1);
sharkd_json_object_close();
sepa = TRUE;
@ -2670,17 +2692,17 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
{
if (tvbs[idx] == finfo->ds_tvb)
{
printf(",\"ds\":%d", idx);
sharkd_json_value_anyf(TRUE, "ds", "%d", idx);
break;
}
}
}
if (finfo->start >= 0 && finfo->length > 0)
printf(",\"h\":[%d,%d]", finfo->start, finfo->length);
sharkd_json_value_anyf(TRUE, "h", "[%d,%d]", finfo->start, finfo->length);
if (finfo->appendix_start >= 0 && finfo->appendix_length > 0)
printf(",\"i\":[%d,%d]", finfo->appendix_start, finfo->appendix_length);
sharkd_json_value_anyf(TRUE, "i", "[%d,%d]", finfo->appendix_start, finfo->appendix_length);
if (finfo->hfinfo)
@ -2689,7 +2711,7 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
if (finfo->hfinfo->type == FT_PROTOCOL)
{
printf(",\"t\":\"proto\"");
sharkd_json_value_stringf(TRUE, "t", "proto");
}
else if (finfo->hfinfo->type == FT_FRAMENUM)
{
@ -2714,10 +2736,10 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
}
if (FI_GET_FLAG(finfo, FI_GENERATED))
printf(",\"g\":true");
sharkd_json_value_anyf(TRUE, "g", "true");
if (FI_GET_FLAG(finfo, FI_HIDDEN))
printf(",\"v\":true");
sharkd_json_value_anyf(TRUE, "v", "true");
if (FI_GET_FLAG(finfo, PI_SEVERITY_MASK))
{
@ -2725,13 +2747,13 @@ sharkd_session_process_frame_cb_tree(epan_dissect_t *edt, proto_tree *tree, tvbu
g_assert(severity != NULL);
printf(",\"s\":\"%s\"", severity);
sharkd_json_value_stringf(TRUE, "s", "%s", severity);
}
if (((proto_tree *) node)->first_child)
{
if (finfo->tree_type != -1)
printf(",\"e\":%d", finfo->tree_type);
sharkd_json_value_anyf(TRUE, "e", "%d", finfo->tree_type);
printf(",\"n\":");
sharkd_session_process_frame_cb_tree(edt, (proto_tree *) node, tvbs, display_hidden);
}
@ -2786,7 +2808,7 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
sharkd_json_object_open(FALSE);
printf("\"err\":0");
sharkd_json_value_anyf(FALSE, "err", "0");
if (fdata->flags.has_user_comment)
pkt_comment = sharkd_get_user_comment(fdata);
@ -2843,15 +2865,15 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
}
if (fdata->flags.ignored)
printf(",\"i\":true");
sharkd_json_value_anyf(TRUE, "i", "true");
if (fdata->flags.marked)
printf(",\"m\":true");
sharkd_json_value_anyf(TRUE, "m", "true");
if (fdata->color_filter)
{
printf(",\"bg\":\"%x\"", color_t_to_rgb(&fdata->color_filter->bg_color));
printf(",\"fg\":\"%x\"", color_t_to_rgb(&fdata->color_filter->fg_color));
sharkd_json_value_stringf(TRUE, "bg", "%x", color_t_to_rgb(&fdata->color_filter->bg_color));
sharkd_json_value_stringf(TRUE, "fg", "%x", color_t_to_rgb(&fdata->color_filter->fg_color));
}
if (data_src)
@ -2925,7 +2947,7 @@ sharkd_session_process_frame_cb(epan_dissect_t *edt, proto_tree *tree, struct ep
}
sharkd_json_array_open(TRUE, "fol");
printf("0");
sharkd_json_value_anyf(FALSE, NULL, "0");
follow_iterate_followers(sharkd_follower_visit_layers_cb, pi);
sharkd_json_array_close();
@ -3379,7 +3401,7 @@ sharkd_session_process_check(char *buf, const jsmntok_t *tokens, int count)
if (dfp && dfilter_deprecated_tokens(dfp))
s = "warn";
printf(",\"filter\":\"%s\"", s);
sharkd_json_value_stringf(TRUE, "filter", "%s", s);
dfilter_free(dfp);
}
else
@ -3394,7 +3416,7 @@ sharkd_session_process_check(char *buf, const jsmntok_t *tokens, int count)
{
header_field_info *hfi = proto_registrar_get_byname(tok_field);
printf(",\"field\":\"%s\"", (hfi) ? "ok" : "notfound");
sharkd_json_value_stringf(TRUE, "field", (hfi) ? "ok" : "notfound");
}
printf("}\n");
@ -3495,7 +3517,7 @@ sharkd_session_process_complete(char *buf, const jsmntok_t *tokens, int count)
{
printf("\"f\":");
json_puts_string(protocol_filter);
printf(",\"t\":%d", FT_PROTOCOL);
sharkd_json_value_anyf(TRUE, "t", "%d", FT_PROTOCOL);
printf(",\"n\":");
json_puts_string(protocol_name);
}
@ -3521,7 +3543,7 @@ sharkd_session_process_complete(char *buf, const jsmntok_t *tokens, int count)
/* XXX, skip displaying name, if there are multiple (to not confuse user) */
if (hfinfo->same_name_next == NULL)
{
printf(",\"t\":%d", hfinfo->type);
sharkd_json_value_anyf(TRUE, "t", "%d", hfinfo->type);
printf(",\"n\":");
json_puts_string(hfinfo->name);
}
@ -3660,13 +3682,13 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
{
case PREF_UINT:
case PREF_DECODE_AS_UINT:
printf("\"u\":%u", prefs_get_uint_value_real(pref, pref_current));
sharkd_json_value_anyf(FALSE, "u", "%u", prefs_get_uint_value_real(pref, pref_current));
if (prefs_get_uint_base(pref) != 10)
printf(",\"ub\":%u", prefs_get_uint_base(pref));
sharkd_json_value_anyf(TRUE, "ub", "%u", prefs_get_uint_base(pref));
break;
case PREF_BOOL:
printf("\"b\":%s", prefs_get_bool_value(pref, pref_current) ? "1" : "0");
sharkd_json_value_anyf(FALSE, "b", prefs_get_bool_value(pref, pref_current) ? "1" : "0");
break;
case PREF_STRING:
@ -3688,7 +3710,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
printf("%s{\"v\":%d", enum_sepa, enums->value);
if (enums->value == prefs_get_enum_value(pref, pref_current))
printf(",\"s\":1");
sharkd_json_value_anyf(TRUE, "s", "1");
printf(",\"d\":");
json_puts_string(enums->description);
@ -3704,7 +3726,7 @@ sharkd_session_process_dumpconf_cb(pref_t *pref, gpointer d)
case PREF_DECODE_AS_RANGE:
{
char *range_str = range_convert_range(NULL, prefs_get_range_value_real(pref, pref_current));
printf("\"r\":\"%s\"", range_str);
sharkd_json_value_stringf(FALSE, "r", "%s", range_str);
wmem_free(NULL, range_str);
break;
}