Refactored certificate management for the vici and stroke interfaces
[strongswan.git] / src / swanctl / command.h
1 /*
2 * Copyright (C) 2009 Martin Willi
3 * Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup command command
18 * @{ @ingroup swanctl
19 */
20
21 #ifndef COMMAND_H_
22 #define COMMAND_H_
23
24 #include <libvici.h>
25 #include <library.h>
26
27 /**
28 * Maximum number of commands (+1).
29 */
30 #define MAX_COMMANDS 22
31
32 /**
33 * Maximum number of options in a command (+3)
34 */
35 #define MAX_OPTIONS 34
36
37 /**
38 * Maximum number of usage summary lines (+1)
39 */
40 #define MAX_LINES 10
41
42 typedef struct command_t command_t;
43 typedef struct command_option_t command_option_t;
44 typedef enum command_format_options_t command_format_options_t;
45
46 /**
47 * Option specification
48 */
49 struct command_option_t {
50 /** long option string of the option */
51 char *name;
52 /** short option character of the option */
53 char op;
54 /** expected argument to option, no/req/opt_argument */
55 int arg;
56 /** description of the option */
57 char *desc;
58 };
59
60 /**
61 * Command specification.
62 */
63 struct command_t {
64 /** Function implementing the command */
65 int (*call)(vici_conn_t *conn);
66 /** short option character */
67 char op;
68 /** long option string */
69 char *cmd;
70 /** description of the command */
71 char *description;
72 /** usage summary of the command */
73 char *line[MAX_LINES];
74 /** list of options the command accepts */
75 command_option_t options[MAX_OPTIONS];
76 };
77
78 /**
79 * Command format options
80 */
81 enum command_format_options_t {
82 COMMAND_FORMAT_NONE = 0,
83 COMMAND_FORMAT_RAW = (1<<0),
84 COMMAND_FORMAT_PRETTY = (1<<1),
85 COMMAND_FORMAT_PEM = (1<<2),
86 };
87
88 /**
89 * Get the next option, as with getopt.
90 */
91 int command_getopt(char **arg);
92
93 /**
94 * Register a command.
95 */
96 void command_register(command_t command);
97
98 /**
99 * Dispatch commands.
100 */
101 int command_dispatch(int argc, char *argv[]);
102
103 /**
104 * Show usage information of active command.
105 */
106 int command_usage(char *error, ...);
107
108 #endif /** COMMAND_H_ @}*/