if requesting all status, then return everything as a JSON array
authorHans-Christoph Steiner <hans@eds.org>
Wed, 9 May 2012 04:31:14 +0000 (00:31 -0400)
committerHans-Christoph Steiner <hans@eds.org>
Wed, 9 May 2012 04:44:16 +0000 (00:44 -0400)
lib/jsoninfo/src/olsrd_jsoninfo.c

index 6b853bd..d4b4ad5 100644 (file)
@@ -805,30 +805,51 @@ send_info(unsigned int send_what, int the_socket)
 
   abuf_init(&abuf, 4096);
 
-  /* Print minimal http header */
-  abuf_puts(&abuf, "HTTP/1.0 200 OK\n");
-  abuf_puts(&abuf, "Content-type: text/plain\n\n");
+  /* if sending all, then wrap in a JSON array */
+  if (send_what == SIW_ALL)
+    abuf_appendf(&abuf, "[\n");
 
   /* Print tables to IPC socket */
 
-  if ((send_what & SIW_LINKS) == SIW_LINKS)
+  if ((send_what & SIW_LINKS) == SIW_LINKS) {
     ipc_print_links(&abuf);
-  if ((send_what & SIW_NEIGHBORS) == SIW_NEIGHBORS)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_NEIGHBORS) == SIW_NEIGHBORS) {
     ipc_print_neighbors(&abuf);
-  if ((send_what & SIW_TOPOLOGY) == SIW_TOPOLOGY)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_TOPOLOGY) == SIW_TOPOLOGY) {
     ipc_print_topology(&abuf);
-  if ((send_what & SIW_HNA) == SIW_HNA)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_HNA) == SIW_HNA) {
     ipc_print_hna(&abuf);
-  if ((send_what & SIW_MID) == SIW_MID)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_MID) == SIW_MID) {
     ipc_print_mid(&abuf);
-  if ((send_what & SIW_ROUTES) == SIW_ROUTES)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_ROUTES) == SIW_ROUTES) {
     ipc_print_routes(&abuf);
-  if ((send_what & SIW_GATEWAYS) == SIW_GATEWAYS)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_GATEWAYS) == SIW_GATEWAYS) {
     ipc_print_gateways(&abuf);
-  if ((send_what & SIW_CONFIG) == SIW_CONFIG)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_CONFIG) == SIW_CONFIG) {
     ipc_print_config(&abuf);
-  if ((send_what & SIW_INTERFACES) == SIW_INTERFACES)
+    if (send_what == SIW_ALL) abuf_appendf(&abuf, ",");
+  }
+  if ((send_what & SIW_INTERFACES) == SIW_INTERFACES) {
     ipc_print_interfaces(&abuf);
+  }
+
+  /* end of JSON array for status */
+  if (send_what == SIW_ALL)
+    abuf_appendf(&abuf, "]\n");
 
   outbuffer[outbuffer_count] = olsr_malloc(abuf.len, "txt output buffer");
   outbuffer_size[outbuffer_count] = abuf.len;