From 1e16bb01d1bfa2c555d9da38f662924fbc54fef3 Mon Sep 17 00:00:00 2001 From: Ferry Huberts Date: Tue, 1 Dec 2015 16:41:42 +0100 Subject: [PATCH] jsoninfo: use a table of function pointers in send_info Signed-off-by: Ferry Huberts --- lib/jsoninfo/src/olsrd_jsoninfo.c | 74 +++++++++++++++++++------------ 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/lib/jsoninfo/src/olsrd_jsoninfo.c b/lib/jsoninfo/src/olsrd_jsoninfo.c index 190ed8d0..29dfff50 100644 --- a/lib/jsoninfo/src/olsrd_jsoninfo.c +++ b/lib/jsoninfo/src/olsrd_jsoninfo.c @@ -52,6 +52,7 @@ #include "olsr.h" #include "scheduler.h" #include "../../info/http_headers.h" +#include "../../info/info_types.h" #include "jsoninfo_printers.h" #include "olsrd_jsoninfo_helpers.h" #include "olsrd_jsoninfo.h" @@ -115,6 +116,23 @@ static int outbuffer_count = 0; static struct timer_entry *writetimer_entry; +static printer_functions_t printer_functions = { // + // + .neighbors = &ipc_print_neighbors, // + .links = &ipc_print_links, // + .routes = &ipc_print_routes, // + .topology = &ipc_print_topology, // + .hna = &ipc_print_hna, // + .mid = &ipc_print_mid, // + .gateways = &ipc_print_gateways, // + .sgw = &ipc_print_sgw, // + .version = &ipc_print_version, // + .olsrd_conf = &ipc_print_olsrd_conf, // + .interfaces = &ipc_print_interfaces, // + .config = &ipc_print_config, // + .plugins = &ipc_print_plugins // + }; + static void determine_action(unsigned int *send_what, char *requ) { if (strstr(requ, "/olsrd.conf")) *send_what |= SIW_OLSRD_CONF; @@ -426,38 +444,38 @@ static void send_info(unsigned int send_what, int the_socket) { if (*uuid) abuf_json_string(&abuf, "uuid", uuid); - if (send_what & SIW_LINKS) - ipc_print_links(&abuf); - if (send_what & SIW_NEIGHBORS) - ipc_print_neighbors(&abuf, false); - if (send_what & SIW_TOPOLOGY) - ipc_print_topology(&abuf); - if (send_what & SIW_HNA) - ipc_print_hna(&abuf); - if (send_what & SIW_SGW) - ipc_print_sgw(&abuf); - if (send_what & SIW_MID) - ipc_print_mid(&abuf); - if (send_what & SIW_ROUTES) - ipc_print_routes(&abuf); - if (send_what & SIW_GATEWAYS) - ipc_print_gateways(&abuf); - if (send_what & SIW_CONFIG) - ipc_print_config(&abuf); - if (send_what & SIW_INTERFACES) - ipc_print_interfaces(&abuf); - if (send_what & SIW_2HOP) - ipc_print_neighbors(&abuf, true); - if (send_what & SIW_VERSION) - ipc_print_version(&abuf); - if (send_what & SIW_PLUGINS) - ipc_print_plugins(&abuf); + if ((send_what & SIW_LINKS) && printer_functions.links) + (*printer_functions.links)(&abuf); + if ((send_what & SIW_NEIGHBORS) && printer_functions.neighbors) + (*printer_functions.neighbors)(&abuf, false); + if ((send_what & SIW_TOPOLOGY) && printer_functions.topology) + (*printer_functions.topology)(&abuf); + if ((send_what & SIW_HNA) && printer_functions.hna) + (*printer_functions.hna)(&abuf); + if ((send_what & SIW_SGW) && printer_functions.sgw) + (*printer_functions.sgw)(&abuf); + if ((send_what & SIW_MID) && printer_functions.mid) + (*printer_functions.mid)(&abuf); + if ((send_what & SIW_ROUTES) && printer_functions.routes) + (*printer_functions.routes)(&abuf); + if ((send_what & SIW_GATEWAYS) && printer_functions.gateways) + (*printer_functions.gateways)(&abuf); + if ((send_what & SIW_CONFIG) && printer_functions.config) + (*printer_functions.config)(&abuf); + if ((send_what & SIW_INTERFACES) && printer_functions.interfaces) + (*printer_functions.interfaces)(&abuf); + if ((send_what & SIW_2HOP) && printer_functions.neighbors) + (*printer_functions.neighbors)(&abuf, true); + if ((send_what & SIW_VERSION) && printer_functions.version) + (*printer_functions.version)(&abuf); + if ((send_what & SIW_PLUGINS) && printer_functions.plugins) + (*printer_functions.plugins)(&abuf); abuf_json_mark_output(false, &abuf); abuf_puts(&abuf, "\n"); - } else if (send_what & SIW_OLSRD_CONF) { + } else if ((send_what & SIW_OLSRD_CONF) && printer_functions.olsrd_conf) { /* this outputs the olsrd.conf text directly, not normal format */ - ipc_print_olsrd_conf(&abuf); + (*printer_functions.olsrd_conf)(&abuf); } if (http_headers) { -- 2.20.1