]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Allow to convert control command from a string
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 14 Sep 2019 12:23:23 +0000 (13:23 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 14 Sep 2019 12:23:23 +0000 (13:23 +0100)
src/libserver/rspamd_control.c
src/libserver/rspamd_control.h
src/libserver/worker_util.c

index 2ebdbc4d6246e91fcc5d1c55f3ea8a2f39c5df4b..4ca3d6585e9f632f5acabc1880d031fa055a605b 100644 (file)
@@ -676,8 +676,8 @@ rspamd_control_default_worker_handler (EV_P_ ev_io *w, int revents)
 }
 
 void
-rspamd_control_worker_add_default_handler (struct rspamd_worker *worker,
-               struct ev_loop *ev_base)
+rspamd_control_worker_add_default_cmd_handlers (struct rspamd_worker *worker,
+                                                                                               struct ev_loop *ev_base)
 {
        struct rspamd_worker_control_data *cd;
 
@@ -1108,3 +1108,43 @@ rspamd_srv_send_command (struct rspamd_worker *worker,
                        rd->worker->srv_pipe[1], EV_WRITE);
        ev_io_start (ev_base, &rd->io_ev);
 }
+
+enum rspamd_control_type
+rspamd_control_command_from_string (const gchar *str)
+{
+       enum rspamd_control_type ret = RSPAMD_CONTROL_MAX;
+
+       if (!str) {
+               return ret;
+       }
+
+       if (g_ascii_strcasecmp (str, "hyperscan_loaded") == 0) {
+               ret = RSPAMD_CONTROL_HYPERSCAN_LOADED;
+       }
+       else if (g_ascii_strcasecmp (str, "stat") == 0) {
+               ret = RSPAMD_CONTROL_STAT;
+       }
+       else if (g_ascii_strcasecmp (str, "reload") == 0) {
+               ret = RSPAMD_CONTROL_RELOAD;
+       }
+       else if (g_ascii_strcasecmp (str, "reresolve") == 0) {
+               ret = RSPAMD_CONTROL_RERESOLVE;
+       }
+       else if (g_ascii_strcasecmp (str, "recompile") == 0) {
+               ret = RSPAMD_CONTROL_RECOMPILE;
+       }
+       else if (g_ascii_strcasecmp (str, "log_pipe") == 0) {
+               ret = RSPAMD_CONTROL_LOG_PIPE;
+       }
+       else if (g_ascii_strcasecmp (str, "fuzzy_stat") == 0) {
+               ret = RSPAMD_CONTROL_FUZZY_STAT;
+       }
+       else if (g_ascii_strcasecmp (str, "fuzzy_sync") == 0) {
+               ret = RSPAMD_CONTROL_FUZZY_SYNC;
+       }
+       else if (g_ascii_strcasecmp (str, "monitored_change") == 0) {
+               ret = RSPAMD_CONTROL_MONITORED_CHANGE;
+       }
+
+       return ret;
+}
\ No newline at end of file
index 87e5e318691463b6ddc288b5ede4cd2321d718b2..ebb564d7eb7b3b23feb0c523e309337e037ab409 100644 (file)
@@ -210,8 +210,8 @@ void rspamd_control_process_client_socket (struct rspamd_main *rspamd_main,
 /**
  * Register default handlers for a worker
  */
-void rspamd_control_worker_add_default_handler (struct rspamd_worker *worker,
-                                                                                               struct ev_loop *ev_base);
+void rspamd_control_worker_add_default_cmd_handlers (struct rspamd_worker *worker,
+                                                                                                        struct ev_loop *ev_base);
 
 /**
  * Register custom handler for a specific control command for this worker
@@ -240,6 +240,13 @@ void rspamd_srv_send_command (struct rspamd_worker *worker,
                                                          rspamd_srv_reply_handler handler,
                                                          gpointer ud);
 
+/**
+ * Returns command from a specified string (case insensitive)
+ * @param str
+ * @return
+ */
+enum rspamd_control_type rspamd_control_command_from_string (const gchar *str);
+
 #ifdef  __cplusplus
 }
 #endif
index 56fdd70c1861041f5860b6b6908162688f8841e9..19c5ac0300486866254547a2390c324de78fe8d1 100644 (file)
@@ -365,7 +365,7 @@ rspamd_prepare_worker (struct rspamd_worker *worker, const char *name,
        worker->srv->event_loop = event_loop;
 
        rspamd_worker_init_signals (worker, event_loop);
-       rspamd_control_worker_add_default_handler (worker, event_loop);
+       rspamd_control_worker_add_default_cmd_handlers (worker, event_loop);
        rspamd_worker_heartbeat_start (worker, event_loop);
 #ifdef WITH_HIREDIS
        rspamd_redis_pool_config (worker->srv->cfg->redis_pool,