jsoninfo: put output start/end in the functions table
[olsrd.git] / lib / jsoninfo / src / jsoninfo_printers.c
index f0bd1cc..5806b95 100644 (file)
@@ -70,10 +70,87 @@ void plugin_init(const char *plugin_name) {
   read_uuid_from_file(plugin_name, uuidfile);
 }
 
+bool isCommand(const char *str, unsigned int siw) {
+  switch (siw) {
+    case SIW_OLSRD_CONF:
+      return strstr(str, "/olsrd.conf");
+
+    case SIW_ALL:
+      return strstr(str, "/all");
+
+    case SIW_RUNTIME_ALL:
+      return strstr(str, "/runtime");
+
+    case SIW_STARTUP_ALL:
+      return strstr(str, "/startup");
+
+    case SIW_NEIGHBORS:
+      return strstr(str, "/neighbors");
+
+    case SIW_LINKS:
+      return strstr(str, "/links");
+
+    case SIW_ROUTES:
+      return strstr(str, "/routes");
+
+    case SIW_HNA:
+      return strstr(str, "/hna");
+
+    case SIW_MID:
+      return strstr(str, "/mid");
+
+    case SIW_TOPOLOGY:
+      return strstr(str, "/topology");
+
+    case SIW_GATEWAYS:
+      return strstr(str, "/gateways");
+
+    case SIW_INTERFACES:
+      return strstr(str, "/interfaces");
+
+    case SIW_2HOP:
+      return strstr(str, "/2hop");
+
+    case SIW_SGW:
+      return strstr(str, "/sgw");
+
+    case SIW_VERSION:
+      return strstr(str, "/version");
+
+    case SIW_CONFIG:
+      return strstr(str, "/config");
+
+    case SIW_PLUGINS:
+      return strstr(str, "/plugins");
+
+    case SIW_NEIGHBORS_FREIFUNK:
+      return strstr(str, "/neighbours");
+
+    default:
+      return false;
+  }
+}
+
 const char * determine_mime_type(unsigned int send_what) {
   return (send_what & SIW_ALL) ? "application/json; charset=utf-8" : "text/plain; charset=utf-8";
 }
 
+void output_start(struct autobuf *abuf) {
+  /* global variables for tracking when to put a comma in for JSON */
+  abuf_json_reset_entry_number_and_depth();
+  abuf_json_mark_output(true, abuf);
+
+  abuf_json_int(abuf, "systemTime", time(NULL));
+  abuf_json_int(abuf, "timeSinceStartup", now_times);
+  if (*uuid)
+    abuf_json_string(abuf, "uuid", uuid);
+}
+
+void output_end(struct autobuf *abuf) {
+  abuf_json_mark_output(false, abuf);
+  abuf_puts(abuf, "\n");
+}
+
 void ipc_print_neighbors(struct autobuf *abuf, bool list_2hop) {
   struct ipaddr_str buf1;
   struct neighbor_entry *neigh;