epan: use json_dumper for json outputs.
[metze/wireshark/wip.git] / wsutil / json_dumper.h
index 98ce99a3e73d64bbb0bcf494f4c5d99b996ce844..f2ea2c58baf0c6d3e81834b57df8555e1cd7ee1b 100644 (file)
@@ -35,6 +35,10 @@ extern "C" {
  *  json_dumper_begin_array(&dumper);
  *  json_dumper_value_anyf(&dumper, "true");
  *  json_dumper_value_anyf(&dumper, "1.0");
+ *  json_dumper_begin_base64(&dumper);
+ *  json_dumper_write_base64(&dumper, (const guchar *)"abcd", 4);
+ *  json_dumper_write_base64(&dumper, (const guchar *)"1234", 4);
+ *  json_dumper_end_base64(&dumper);
  *  json_dumper_begin_object(&dumper);
  *  json_dumper_end_object(&dumper);
  *  json_dumper_begin_array(&dumper);
@@ -49,9 +53,12 @@ extern "C" {
 typedef struct json_dumper {
     FILE   *output_file;    /**< Output file, must be set. */
 #define JSON_DUMPER_FLAGS_PRETTY_PRINT  (1 << 0)    /* Enable pretty printing. */
+#define JSON_DUMPER_DOT_TO_UNDERSCORE   (1 << 1)    /* Convert dots to underscores in keys */
     int     flags;
     /* for internal use, initialize with zeroes. */
     int     current_depth;
+    gint    base64_state;
+    gint    base64_save;
     guint8  state[JSON_DUMPER_MAX_DEPTH];
 } json_dumper;
 
@@ -80,6 +87,23 @@ WS_DLL_PUBLIC void
 json_dumper_value_anyf(json_dumper *dumper, const char *format, ...)
 G_GNUC_PRINTF(2, 3);
 
+/**
+ * Dump literal values (like json_dumper_value_anyf), but taking a va_list
+ * as parameter. String values MUST be properly quoted by the caller, no
+ * escaping occurs. Do not use with untrusted data.
+ */
+WS_DLL_PUBLIC void
+json_dumper_value_va_list(json_dumper *dumper, const char *format, va_list ap);
+
+WS_DLL_PUBLIC void
+json_dumper_begin_base64(json_dumper *dumper);
+
+WS_DLL_PUBLIC void
+json_dumper_end_base64(json_dumper *dumper);
+
+WS_DLL_PUBLIC void
+json_dumper_write_base64(json_dumper *dumper, const guchar *data, size_t len);
+
 /**
  * Finishes dumping data. Returns TRUE if everything is okay and FALSE if
  * something went wrong (open/close mismatch, missing values, etc.).