X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Futils_cmds.h;h=f3882f544feaf3bef9c071cc2ae401fde3055a79;hp=21564cb855da87049640cc67dd0d1954c9f6b8fe;hb=06a86a60a7dabc685bdbd81ce3d36ea5f7e2c2d4;hpb=938471bee8cc86d32615144c5037f17338b19e70 diff --git a/src/utils_cmds.h b/src/utils_cmds.h index 21564cb8..f3882f54 100644 --- a/src/utils_cmds.h +++ b/src/utils_cmds.h @@ -32,32 +32,43 @@ #include typedef enum { - CMD_UNKNOWN = 0, - CMD_FLUSH = 1, - CMD_PUTVAL = 2, + 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_FLUSH) ? "FLUSH" \ - : ((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 { - double timeout; + double timeout; - char **plugins; - size_t plugins_num; - identifier_t *identifiers; - size_t identifiers_num; + char **plugins; + size_t plugins_num; + identifier_t *identifiers; + size_t identifiers_num; } cmd_flush_t; typedef struct { - /* The raw identifier as provided by the user. */ - char *identifier; + char *raw_identifier; + identifier_t identifier; +} cmd_getval_t; - /* 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; +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; /* @@ -68,28 +79,42 @@ typedef struct { * The representation of a fully parsed command. */ typedef struct { - cmd_type_t type; - union { - cmd_flush_t flush; - 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, + /* Not necessarily fatal errors. */ + CMD_NO_OPTION = 1, } cmd_status_t; /* @@ -102,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; /* @@ -113,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 @@ -126,18 +151,19 @@ 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); -cmd_status_t cmd_parsev (size_t argc, char **argv, - cmd_t *ret_cmd, cmd_error_handler_t *err); +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); +void cmd_destroy(cmd_t *cmd); /* * NAME @@ -158,8 +184,8 @@ void cmd_destroy (cmd_t *cmd); * 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); +cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value, + cmd_error_handler_t *err); /* * NAME @@ -177,7 +203,7 @@ cmd_status_t cmd_parse_option (char *field, * `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 */