swanctl: Use a ./configure-able swanctl base directory
[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 11
31
32 /**
33 * Maximum number of options in a command (+3)
34 */
35 #define MAX_OPTIONS 32
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_type_t command_type_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 * Get the next option, as with getopt.
80 */
81 int command_getopt(char **arg);
82
83 /**
84 * Register a command.
85 */
86 void command_register(command_t command);
87
88 /**
89 * Dispatch commands.
90 */
91 int command_dispatch(int argc, char *argv[]);
92
93 /**
94 * Show usage information of active command.
95 */
96 int command_usage(char *error, ...);
97
98 #endif /** COMMAND_H_ @}*/