| /* |
| * |
| * Wireless daemon for Linux |
| * |
| * Copyright (C) 2017-2019 Intel Corporation. All rights reserved. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| * |
| */ |
| |
| #define COMMAND_OPTION_USERNAME "username" |
| #define COMMAND_OPTION_PASSWORD "password" |
| #define COMMAND_OPTION_PASSPHRASE "passphrase" |
| #define COMMAND_OPTION_DONTASK "dont-ask" |
| |
| typedef char *(*command_completion_func_t) (const char *text, int state); |
| |
| enum cmd_status { |
| CMD_STATUS_TRIGGERED, |
| CMD_STATUS_DONE, |
| CMD_STATUS_INVALID_ARGS, |
| CMD_STATUS_INVALID_VALUE, |
| CMD_STATUS_UNSUPPORTED, |
| CMD_STATUS_FAILED, |
| }; |
| |
| struct command { |
| const char *entity; |
| const char *cmd; |
| const char *arg; |
| enum cmd_status (*function)(const char *entity, |
| char **argv, int argc); |
| const char *desc; |
| const bool refreshable; |
| command_completion_func_t completion; |
| }; |
| |
| struct command_family { |
| const char *caption; |
| const char *name; |
| const struct command *command_list; |
| command_completion_func_t family_arg_completion; |
| command_completion_func_t entity_arg_completion; |
| void (*set_default_entity)(const char *entity); |
| void (*reset_default_entity)(void); |
| }; |
| |
| bool command_option_get(const char *name, const char **value_out); |
| bool command_needs_no_agent(void); |
| |
| bool command_line_find_token(const char *token, uint8_t num_to_inspect); |
| char **command_completion(const char *text, int start, int end); |
| char *command_entity_arg_completion(const char *text, int state, |
| const struct command *command_list); |
| |
| void command_process_prompt(char **argv, int argc); |
| |
| void command_noninteractive_trigger(void); |
| bool command_is_interactive_mode(void); |
| int command_get_exit_status(void); |
| void command_set_exit_status(int status); |
| void command_reset_default_entities(void); |
| |
| void command_family_register(const struct command_family *family); |
| void command_family_unregister(const struct command_family *family); |
| |
| struct command_family_desc { |
| const char *name; |
| int (*init)(void); |
| void (*exit)(void); |
| } __attribute__((aligned(8))); |
| |
| #define COMMAND_FAMILY(name, init, exit) \ |
| static struct command_family_desc __command_family_ ## name \ |
| __attribute__((used, section("__command"), aligned(8))) = {\ |
| #name, init, exit \ |
| }; \ |
| |
| bool command_init(char **argv, int argc); |
| void command_exit(void); |