1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/* Copyright 2017 greenbytes GmbH (https://www.greenbytes.de)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef md_cmd_h
#define md_cmd_h
struct apr_getopt_option_t;
struct apr_table_t;
struct md_json_t;
struct md_store_t;
struct md_ref_t;
struct md_acme_t;
typedef struct md_opts md_opts;
typedef struct md_cmd_ctx md_cmd_ctx;
typedef struct md_cmd_t md_cmd_t;
typedef apr_status_t md_cmd_opt_fn(md_cmd_ctx *ctx, int option, const char *optarg);
typedef apr_status_t md_cmd_do_fn(md_cmd_ctx *ctx, const md_cmd_t *cmd);
struct md_cmd_ctx {
apr_pool_t *p;
const char *base_dir;
const char *ca_url;
struct md_store_t *store;
struct md_reg_t *reg;
struct md_acme_t *acme;
struct apr_table_t *options;
const char *tos;
struct md_json_t *json_out;
int argc;
const char *const *argv;
};
#define MD_CMD_OPT_PROXY_URL "proxy-url"
int md_cmd_ctx_has_option(md_cmd_ctx *ctx, const char *key);
const char *md_cmd_ctx_get_option(md_cmd_ctx *ctx, const char *key);
void md_cmd_ctx_set_option(md_cmd_ctx *ctx, const char *key, const char *value);
/* needs */
#define MD_CTX_NONE 0x0000
#define MD_CTX_STORE 0x0001
#define MD_CTX_REG 0x0002
#define MD_CTX_ACME 0x0004
struct md_cmd_t {
const char *name; /* command name */
int needs; /* command needs: store, reg, acme etc. */
md_cmd_opt_fn *opt_fn; /* callback for options handling */
md_cmd_do_fn *do_fn; /* callback for executing the command */
const struct apr_getopt_option_t *opts; /* options definitions */
const md_cmd_t **sub_cmds; /* sub commands of this command or NULL */
const char *synopsis; /* command line synopsis for this command */
const char *description; /* textual description of this command */
};
extern apr_getopt_option_t MD_NoOptions[];
apr_status_t usage(const md_cmd_t *cmd, const char *msg);
apr_array_header_t *md_cmd_gather_args(md_cmd_ctx *ctx, int index);
void md_cmd_print_md(md_cmd_ctx *ctx, const md_t *md);
#endif /* md_cmd_h */
|