res_pjsip: Updates and adds more PJSIP CLI commands.
[asterisk/asterisk.git] / include / asterisk / res_pjsip_cli.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2013, Fairview 5 Engineering, LLC.
5  *
6  * George Joseph <george.joseph@fairview5.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 #ifndef RES_PJSIP_CLI_H_
20 #define RES_PJSIP_CLI_H_
21
22 #include "asterisk/cli.h"
23
24 #define CLI_HEADER_FILLER ".........................................................................................."
25 #define CLI_DETAIL_FILLER "                                                                                          "
26 #define CLI_MAX_WIDTH 90
27 #define CLI_LAST_TABSTOP 62
28 #define CLI_MAX_TITLE_NAME 8
29 #define CLI_INDENT_TO_SPACES(x) ((x * 2) + 1 + CLI_MAX_TITLE_NAME)
30
31 /*
32  * \brief CLI Formatter Context
33  */
34 struct ast_sip_cli_context {
35         int peers_mon_online;
36         int peers_mon_offline;
37         int peers_unmon_offline;
38         int peers_unmon_online;
39         struct ast_str *output_buffer;
40         const struct ast_cli_args *a;
41         const struct ast_sip_endpoint *current_endpoint;
42         const struct ast_sip_auth *current_auth;
43         const struct ast_sip_aor *current_aor;
44         char *auth_direction;
45         unsigned int print_flags;
46         int indent_level;
47         unsigned show_details : 1;
48         unsigned recurse : 1;
49         unsigned show_details_only_level_0 : 1;
50 };
51
52 /*
53  * \brief CLI Formatter Registry Entry
54  */
55 struct ast_sip_cli_formatter_entry {
56         const char *name;
57         ao2_callback_fn *print_header;
58         ao2_callback_fn *print_body;
59         struct ao2_container *(* get_container)(void);
60         int (* iterator)(const void *container, ao2_callback_fn callback, void *args);
61         ao2_sort_fn *comparator;
62 };
63
64 /*!
65  * \brief Registers a CLI formatter.
66  *
67  * \param name The name of the formatter, usually the sorcery object type.
68  * \param formatter An ao2_callback_fn that outputs the formatted data.
69  * \retval 0 Success, non-zero on failure
70  */
71 int ast_sip_register_cli_formatter(struct ast_sip_cli_formatter_entry *formatter);
72
73 /*!
74  * \brief Unregisters a CLI formatter.
75  *
76  * \param name The name of the formatter, usually the sorcery object type.
77  * \retval 0 Success, non-zero on failure
78  */
79 int ast_sip_unregister_cli_formatter(struct ast_sip_cli_formatter_entry *formatter);
80
81 /*!
82  * \brief Looks up a CLI formatter by type.
83  *
84  * \param name The name of the formatter, usually the sorcery object type.
85  * \retval Pointer to formatter entry structure
86  */
87 struct ast_sip_cli_formatter_entry *ast_sip_lookup_cli_formatter(const char *name);
88
89 /*!
90  * \brief Prints a sorcery object's ast_variable list
91  *
92  * \param obj The sorcery object
93  * \param arg The ast_sip_cli_context.
94  * \retval 0 Success, non-zero on failure
95  */
96 int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags);
97
98 char *ast_sip_cli_traverse_objects(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
99
100
101 #endif /* RES_PJSIP_CLI_H_ */