Merge branch 'collectd-5.8'
[collectd.git] / src / utils_cmds.h
index f3daa41..f3882f5 100644 (file)
 #include <stdarg.h>
 
 typedef enum {
-       CMD_UNKNOWN = 0,
-       CMD_PUTVAL  = 1,
+  CMD_UNKNOWN = 0,
+  CMD_FLUSH = 1,
+  CMD_GETVAL = 2,
+  CMD_LISTVAL = 3,
+  CMD_PUTVAL = 4,
 } cmd_type_t;
-#define CMD_TO_STRING(type) \
-       ((type) == CMD_PUTVAL) ? "PUTVAL" \
-               : "UNKNOWN"
+#define CMD_TO_STRING(type)                                                    \
+  ((type) == CMD_FLUSH)                                                        \
+      ? "FLUSH"                                                                \
+      : ((type) == CMD_GETVAL)                                                 \
+            ? "GETVAL"                                                         \
+            : ((type) == CMD_LISTVAL)                                          \
+                  ? "LISTVAL"                                                  \
+                  : ((type) == CMD_PUTVAL) ? "PUTVAL" : "UNKNOWN"
 
 typedef struct {
-       /* The raw identifier as provided by the user. */
-       char *identifier;
+  double timeout;
 
-       /* An array of the fully parsed identifier and all value lists, and their
-        * options as provided by the user. */
-       value_list_t *vl;
-       size_t vl_num;
+  char **plugins;
+  size_t plugins_num;
+  identifier_t *identifiers;
+  size_t identifiers_num;
+} cmd_flush_t;
+
+typedef struct {
+  char *raw_identifier;
+  identifier_t identifier;
+} cmd_getval_t;
+
+typedef struct {
+  /* The raw identifier as provided by the user. */
+  char *raw_identifier;
+
+  /* An array of the fully parsed identifier and all value lists, and their
+   * options as provided by the user. */
+  value_list_t *vl;
+  size_t vl_num;
 } cmd_putval_t;
 
 /*
@@ -57,24 +79,42 @@ typedef struct {
  *   The representation of a fully parsed command.
  */
 typedef struct {
-       cmd_type_t type;
-       union {
-               cmd_putval_t putval;
-       } cmd;
+  cmd_type_t type;
+  union {
+    cmd_flush_t flush;
+    cmd_getval_t getval;
+    cmd_putval_t putval;
+  } cmd;
 } cmd_t;
 
 /*
  * NAME
+ *   cmd_options_t
+ *
+ * DESCRIPTIONS
+ *   Optional settings for tuning the parser behavior.
+ */
+typedef struct {
+  /* identifier_default_host: If non-NULL, the hostname is optional and will
+   * default to the specified value. */
+  char *identifier_default_host;
+} cmd_options_t;
+
+/*
+ * NAME
  *   cmd_status_t
  *
  * DESCRIPTION
  *   Status codes describing the parse result.
  */
 typedef enum {
-       CMD_OK              =  0,
-       CMD_ERROR           = -1,
-       CMD_PARSE_ERROR     = -2,
-       CMD_UNKNOWN_COMMAND = -3,
+  CMD_OK = 0,
+  CMD_ERROR = -1,
+  CMD_PARSE_ERROR = -2,
+  CMD_UNKNOWN_COMMAND = -3,
+
+  /* Not necessarily fatal errors. */
+  CMD_NO_OPTION = 1,
 } cmd_status_t;
 
 /*
@@ -87,8 +127,8 @@ typedef enum {
  *   as the first argument.
  */
 typedef struct {
-       void (*cb) (void *, cmd_status_t, const char *, va_list);
-       void *ud;
+  void (*cb)(void *, cmd_status_t, const char *, va_list);
+  void *ud;
 } cmd_error_handler_t;
 
 /*
@@ -98,8 +138,8 @@ typedef struct {
  * DESCRIPTION
  *   Reports an error via the specified error handler (if set).
  */
-void cmd_error (cmd_status_t status, cmd_error_handler_t *err,
-               const char *format, ...);
+void cmd_error(cmd_status_t status, cmd_error_handler_t *err,
+               const char *format, ...);
 
 /*
  * NAME
@@ -111,15 +151,41 @@ void cmd_error (cmd_status_t status, cmd_error_handler_t *err,
  * PARAMETERS
  *   `buffer'  The command string to be parsed.
  *   `ret_cmd' The parse result will be stored at this location.
+ *   `opts'    Parser options. If NULL, defaults will be used.
  *   `err'     An optional error handler to invoke on error.
  *
  * RETURN VALUE
  *   CMD_OK on success or the respective error code otherwise.
  */
-cmd_status_t cmd_parse (char *buffer,
-               cmd_t *ret_cmd, cmd_error_handler_t *err);
+cmd_status_t cmd_parse(char *buffer, cmd_t *ret_cmd, const cmd_options_t *opts,
+                       cmd_error_handler_t *err);
 
-void cmd_destroy (cmd_t *cmd);
+cmd_status_t cmd_parsev(size_t argc, char **argv, cmd_t *ret_cmd,
+                        const cmd_options_t *opts, cmd_error_handler_t *err);
+
+void cmd_destroy(cmd_t *cmd);
+
+/*
+ * NAME
+ *   cmd_parse_option
+ *
+ * DESCRIPTION
+ *   Parses a command option which must be of the form:
+ *     name=value with \ and spaces
+ *
+ * PARAMETERS
+ *   `field'     The parsed input field with any quotes removed and special
+ *               characters unescaped.
+ *   `ret_key'   The parsed key will be stored at this location.
+ *   `ret_value' The parsed value will be stored at this location.
+ *
+ * RETURN VALUE
+ *   CMD_OK on success or an error code otherwise.
+ *   CMD_NO_OPTION if `field' does not represent an option at all (missing
+ *   equal sign).
+ */
+cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value,
+                              cmd_error_handler_t *err);
 
 /*
  * NAME
@@ -137,7 +203,7 @@ void cmd_destroy (cmd_t *cmd);
  *   `ap'     Variable argument list providing the arguments for the format
  *            string.
  */
-void cmd_error_fh (void *ud, cmd_status_t status,
-               const char *format, va_list ap);
+void cmd_error_fh(void *ud, cmd_status_t status, const char *format,
+                  va_list ap);
 
 #endif /* UTILS_CMDS_H */