vici: Match identity with wildcards against remote ID in redirect command
[strongswan.git] / src / swanctl / commands / list_algs.c
1 /*
2 * Copyright (C) 2015 Tobias Brunner
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 #include "command.h"
17
18 #include <errno.h>
19
20 CALLBACK(algs, int,
21 void *null, vici_res_t *res, char *name, void *value, int len)
22 {
23 if (chunk_printable(chunk_create(value, len), NULL, ' '))
24 {
25 printf(" %s[%.*s]\n", name, len, value);
26 }
27 return 0;
28 }
29
30 CALLBACK(types, int,
31 void *null, vici_res_t *res, char *name)
32 {
33 printf("%s:\n", name);
34 return vici_parse_cb(res, NULL, algs, NULL, NULL);
35 }
36
37 static int algorithms(vici_conn_t *conn)
38 {
39 vici_req_t *req;
40 vici_res_t *res;
41 char *arg;
42 command_format_options_t format = COMMAND_FORMAT_NONE;
43 int ret;
44
45 while (TRUE)
46 {
47 switch (command_getopt(&arg))
48 {
49 case 'h':
50 return command_usage(NULL);
51 case 'P':
52 format |= COMMAND_FORMAT_PRETTY;
53 /* fall through to raw */
54 case 'r':
55 format |= COMMAND_FORMAT_RAW;
56 continue;
57 case EOF:
58 break;
59 default:
60 return command_usage("invalid --list-algs option");
61 }
62 break;
63 }
64
65 req = vici_begin("get-algorithms");
66 res = vici_submit(req, conn);
67 if (!res)
68 {
69 ret = errno;
70 fprintf(stderr, "get-algorithms request failed: %s\n", strerror(errno));
71 return ret;
72 }
73 if (format & COMMAND_FORMAT_RAW)
74 {
75 vici_dump(res, "get-algorithms reply", format & COMMAND_FORMAT_PRETTY,
76 stdout);
77 }
78 else
79 {
80 if (vici_parse_cb(res, types, NULL, NULL, NULL) != 0)
81 {
82 fprintf(stderr, "parsing get-algorithms reply failed: %s\n",
83 strerror(errno));
84 }
85 }
86 vici_free_res(res);
87 return 0;
88 }
89
90 /**
91 * Register the command.
92 */
93 static void __attribute__ ((constructor))reg()
94 {
95 command_register((command_t) {
96 algorithms, 'g', "list-algs", "show loaded algorithms",
97 {"[--raw|--pretty]"},
98 {
99 {"help", 'h', 0, "show usage information"},
100 {"raw", 'r', 0, "dump raw response message"},
101 {"pretty", 'P', 0, "dump raw response message in pretty print"},
102 }
103 });
104 }