info: only try to match supported commands
authorFerry Huberts <ferry.huberts@pelagic.nl>
Tue, 12 Apr 2016 15:44:52 +0000 (17:44 +0200)
committerFerry Huberts <ferry.huberts@pelagic.nl>
Wed, 13 Apr 2016 10:57:32 +0000 (12:57 +0200)
Signed-off-by: Ferry Huberts <ferry.huberts@pelagic.nl>
lib/info/info_types.h
lib/info/olsrd_info.c
lib/jsoninfo/src/olsrd_jsoninfo.c
lib/jsoninfo/src/olsrd_jsoninfo.h
lib/jsoninfo/src/olsrd_plugin.c
lib/txtinfo/src/olsrd_plugin.c
lib/txtinfo/src/olsrd_txtinfo.c
lib/txtinfo/src/olsrd_txtinfo.h

index 474444f..3392e8a 100644 (file)
@@ -99,6 +99,7 @@ typedef struct {
 #define SIW_EVERYTHING                   ((1ULL << 14) - 1)
 
 typedef void (*init_plugin)(const char *plugin_name);
+typedef unsigned long long (*supported_commands_mask_func)(void);
 typedef bool (*command_matcher)(const char *str, unsigned long long siw);
 typedef long (*cache_timeout_func)(info_plugin_config_t *plugin_config, unsigned long long siw);
 typedef const char * (*mime_type)(unsigned int send_what);
@@ -109,6 +110,7 @@ typedef void (*printer_generic)(struct autobuf *abuf);
 typedef struct {
     bool supportsCompositeCommands;
     init_plugin init;
+    supported_commands_mask_func supported_commands_mask;
     command_matcher is_command;
     cache_timeout_func cache_timeout;
     mime_type determine_mime_type;
index 0a15cb3..6bed503 100644 (file)
@@ -209,13 +209,14 @@ static INLINE void info_plugin_cache_init_entry(struct info_cache_entry_t * entr
 
 static unsigned int determine_single_action(char *requ) {
   unsigned int i;
+  unsigned long long siw_mask = !functions->supported_commands_mask ? SIW_EVERYTHING : functions->supported_commands_mask();
 
-  if (!functions->is_command)
+  if (!functions->is_command || !siw_mask)
     return 0;
 
   for (i = 0; i < ARRAY_SIZE(SIW_ENTRIES_ALL); ++i) {
     unsigned long long siw = SIW_ENTRIES_ALL[i];
-    if (functions->is_command(requ, siw))
+    if ((siw & siw_mask) && functions->is_command(requ, siw))
       return siw;
   }
 
index 86af51a..065e399 100644 (file)
@@ -111,6 +111,10 @@ void plugin_init(const char *plugin_name) {
   read_uuid_from_file(plugin_name, uuidfile);
 }
 
+unsigned long long get_supported_commands_mask(void) {
+  return SIW_ALL | SIW_OLSRD_CONF;
+}
+
 bool isCommand(const char *str, unsigned long long siw) {
   const char * cmd;
   switch (siw) {
index dd03334..0506246 100644 (file)
@@ -51,6 +51,7 @@ extern struct timeval start_time;
 
 void plugin_init(const char * plugin_name);
 
+unsigned long long get_supported_commands_mask(void);
 bool isCommand(const char *str, unsigned long long siw);
 
 const char * determine_mime_type(unsigned int send_what);
index 3ae3480..356ce95 100644 (file)
@@ -57,6 +57,7 @@ static info_plugin_functions_t functions = { //
     //
         .supportsCompositeCommands = true, //
         .init = plugin_init, //
+        .supported_commands_mask = get_supported_commands_mask, //
         .is_command = isCommand, //
         .cache_timeout = cache_timeout_generic, //
         .determine_mime_type = determine_mime_type, //
index 24e55de..732d7dd 100644 (file)
@@ -57,6 +57,7 @@ static info_plugin_functions_t functions = { //
     //
         .supportsCompositeCommands = true, //
         .init = NULL, //
+        .supported_commands_mask = get_supported_commands_mask, //
         .is_command = isCommand, //
         .cache_timeout = cache_timeout_generic, //
         .determine_mime_type = NULL, //
index b661d10..abdb871 100644 (file)
 #include "../../info/http_headers.h"
 #include "gateway_default_handler.h"
 
+unsigned long long get_supported_commands_mask(void) {
+  return (SIW_ALL | SIW_OLSRD_CONF) & ~(SIW_CONFIG | SIW_PLUGINS);
+}
+
 bool isCommand(const char *str, unsigned long long siw) {
   const char * cmd;
   switch (siw) {
@@ -120,14 +124,6 @@ bool isCommand(const char *str, unsigned long long siw) {
       cmd = "/ver";
       break;
 
-    case SIW_CONFIG:
-      cmd = "/config";
-      return false; /* not implemented */
-
-    case SIW_PLUGINS:
-      cmd = "/plugins";
-      return false; /* not implemented */
-
     case SIW_NEIGHBORS_FREIFUNK:
       cmd = "/neighbours";
       break;
index 2fab3bb..97c57ef 100644 (file)
@@ -46,6 +46,7 @@
 
 #include "common/autobuf.h"
 
+unsigned long long get_supported_commands_mask(void);
 bool isCommand(const char *str, unsigned long long siw);
 void output_error(struct autobuf *abuf, unsigned int status, const char * req, bool http_headers);