2 * collectd - src/utils_cmds.h
3 * Copyright (C) 2016 Sebastian 'tokkee' Harl
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice shall be included in
13 * all copies or substantial portions of the Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
24 * Sebastian 'tokkee' Harl <sh at tokkee.org>
28 #define UTILS_CMDS_H 1
41 #define CMD_TO_STRING(type) \
42 ((type) == CMD_FLUSH) \
44 : ((type) == CMD_GETVAL) \
46 : ((type) == CMD_LISTVAL) \
48 : ((type) == CMD_PUTVAL) ? "PUTVAL" : "UNKNOWN"
55 identifier_t *identifiers;
56 size_t identifiers_num;
61 identifier_t identifier;
65 /* The raw identifier as provided by the user. */
68 /* An array of the fully parsed identifier and all value lists, and their
69 * options as provided by the user. */
79 * The representation of a fully parsed command.
95 * Optional settings for tuning the parser behavior.
98 /* identifier_default_host: If non-NULL, the hostname is optional and will
99 * default to the specified value. */
100 char *identifier_default_host;
108 * Status codes describing the parse result.
113 CMD_PARSE_ERROR = -2,
114 CMD_UNKNOWN_COMMAND = -3,
116 /* Not necessarily fatal errors. */
122 * cmd_error_handler_t
125 * An error handler describes a callback to be invoked when the parser
126 * encounters an error. The user data pointer will be passed to the callback
127 * as the first argument.
130 void (*cb)(void *, cmd_status_t, const char *, va_list);
132 } cmd_error_handler_t;
139 * Reports an error via the specified error handler (if set).
141 void cmd_error(cmd_status_t status, cmd_error_handler_t *err,
142 const char *format, ...);
149 * Parse a command string and populate a command object.
152 * `buffer' The command string to be parsed.
153 * `ret_cmd' The parse result will be stored at this location.
154 * `opts' Parser options. If NULL, defaults will be used.
155 * `err' An optional error handler to invoke on error.
158 * CMD_OK on success or the respective error code otherwise.
160 cmd_status_t cmd_parse(char *buffer, cmd_t *ret_cmd, const cmd_options_t *opts,
161 cmd_error_handler_t *err);
163 cmd_status_t cmd_parsev(size_t argc, char **argv, cmd_t *ret_cmd,
164 const cmd_options_t *opts, cmd_error_handler_t *err);
166 void cmd_destroy(cmd_t *cmd);
173 * Parses a command option which must be of the form:
174 * name=value with \ and spaces
177 * `field' The parsed input field with any quotes removed and special
178 * characters unescaped.
179 * `ret_key' The parsed key will be stored at this location.
180 * `ret_value' The parsed value will be stored at this location.
183 * CMD_OK on success or an error code otherwise.
184 * CMD_NO_OPTION if `field' does not represent an option at all (missing
187 cmd_status_t cmd_parse_option(char *field, char **ret_key, char **ret_value,
188 cmd_error_handler_t *err);
195 * An error callback writing the message to an open file handle using the
196 * format expected by the unixsock or exec plugins.
199 * `ud' Error handler user-data pointer. This must be an open
200 * file-handle (FILE *).
201 * `status' The error status code.
202 * `format' Printf-style format string.
203 * `ap' Variable argument list providing the arguments for the format
206 void cmd_error_fh(void *ud, cmd_status_t status, const char *format,
209 #endif /* UTILS_CMDS_H */