more information. Defaults to 'no' as setting it to 'yes' can result in
many unnecessary messages being sent to the caller.
+res_pjsip
+------------------
+ * A new CLI command has been added: "pjsip show settings", which shows
+ both the global and system configuration settings.
+
res_ari_channels
------------------
* Two new events, 'ChannelHold' and 'ChannelUnhold', have been added to the
the channel wanted to place someone on hold. This allows external
applications to implement their own custom hold/unhold logic.
-
------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.2.0 to Asterisk 13.3.0 ------------
------------------------------------------------------------------------------
#include "asterisk/sorcery.h"
#include "asterisk/file.h"
#include "asterisk/cli.h"
+#include "asterisk/res_pjsip_cli.h"
/*** MODULEINFO
<depend>pjproject</depend>
#undef ENDPOINT_IDENTIFIER_FORMAT
}
+static char *cli_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
+{
+ struct ast_sip_cli_context context;
+
+ switch (cmd) {
+ case CLI_INIT:
+ e->command = "pjsip show settings";
+ e->usage = "Usage: pjsip show settings\n"
+ " Show global and system configuration options\n";
+ return NULL;
+ case CLI_GENERATE:
+ return NULL;
+ }
+
+ context.output_buffer = ast_str_create(256);
+ if (!context.output_buffer) {
+ ast_cli(a->fd, "Could not allocate output buffer.\n");
+ return CLI_FAILURE;
+ }
+
+ if (sip_cli_print_global(&context) || sip_cli_print_system(&context)) {
+ ast_free(context.output_buffer);
+ ast_cli(a->fd, "Error retrieving settings.\n");
+ return CLI_FAILURE;
+ }
+
+ ast_cli(a->fd, "%s", ast_str_buffer(context.output_buffer));
+ ast_free(context.output_buffer);
+ return CLI_SUCCESS;
+}
+
static struct ast_cli_entry cli_commands[] = {
+ AST_CLI_DEFINE(cli_show_settings, "Show global and system configuration options"),
AST_CLI_DEFINE(cli_show_endpoint_identifiers, "List registered endpoint identifiers")
};
#include "include/res_pjsip_private.h"
#include "asterisk/sorcery.h"
#include "asterisk/ast_version.h"
+#include "asterisk/res_pjsip_cli.h"
#define DEFAULT_MAX_FORWARDS 70
#define DEFAULT_KEEPALIVE_INTERVAL 0
.object_type_loaded = global_loaded_observer,
};
+int sip_cli_print_global(struct ast_sip_cli_context *context)
+{
+ struct global_config *cfg = get_global_cfg();
+
+ if (!cfg) {
+ cfg = ast_sorcery_alloc(ast_sip_get_sorcery(), "global", NULL);
+ if (!cfg) {
+ return -1;
+ }
+ }
+
+ ast_str_append(&context->output_buffer, 0, "\nGlobal Settings:\n\n");
+ ast_sip_cli_print_sorcery_objectset(cfg, context, 0);
+
+ ao2_ref(cfg, -1);
+ return 0;
+}
+
int ast_sip_destroy_sorcery_global(void)
{
struct ast_sorcery *sorcery = ast_sip_get_sorcery();
#include "include/res_pjsip_private.h"
#include "asterisk/threadpool.h"
#include "asterisk/dns.h"
+#include "asterisk/res_pjsip_cli.h"
#define TIMER_T1_MIN 100
#define DEFAULT_TIMER_T1 500
return 0;
}
+static struct system_config *get_system_cfg(void)
+{
+ struct system_config *cfg;
+ struct ao2_container *systems;
+ systems = ast_sorcery_retrieve_by_fields(system_sorcery, "system",
+ AST_RETRIEVE_FLAG_MULTIPLE | AST_RETRIEVE_FLAG_ALL, NULL);
+
+ if (!systems) {
+ return NULL;
+ }
+
+ cfg = ao2_find(systems, NULL, 0);
+ ao2_ref(systems, -1);
+ return cfg;
+}
+
+int sip_cli_print_system(struct ast_sip_cli_context *context)
+{
+ struct system_config *cfg = get_system_cfg();
+
+ if (!cfg) {
+ cfg = ast_sorcery_alloc(system_sorcery, "system", NULL);
+ if (!cfg) {
+ return -1;
+ }
+ }
+
+ ast_str_append(&context->output_buffer, 0, "\nSystem Settings:\n\n");
+ ast_sip_cli_print_sorcery_objectset(cfg, context, 0);
+
+ ao2_ref(cfg, -1);
+ return 0;
+}
+
int ast_sip_initialize_system(void)
{
RAII_VAR(struct ao2_container *, system_configs, NULL, ao2_cleanup);
struct ao2_container;
struct ast_threadpool_options;
+struct ast_sip_cli_context;
/*!
* \internal
int ast_sip_initialize_cli(void);
void ast_sip_destroy_cli(void);
+/*!
+ * \internal
+ * \brief Add res_pjsip global configuration options to the cli context.
+ *
+ * \param context context to add options to
+ * \retval 0 Success, -1 on failure
+ */
+int sip_cli_print_global(struct ast_sip_cli_context *context);
+
+/*!
+ * \internal
+ * \brief Add res_pjsip system configuration options to the cli context.
+ *
+ * \param context context to add options to
+ * \retval 0 Success, -1 on failure
+ */
+int sip_cli_print_system(struct ast_sip_cli_context *context);
+
/*!
* \internal
* \brief Used by res_pjsip.so to register a service without adding a self reference