mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 04:11:08 +00:00
res_pjsip: add CLI command to show global and system configuration
Added a new CLI command for res_pjsip that shows both global and system configuration settings: pjsip show settings ASTERISK-24918 #close Reported by: Scott Griepentrog Review: https://reviewboard.asterisk.org/r/4597/ ........ Merged revisions 434527 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@434528 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
6
CHANGES
6
CHANGES
@@ -127,6 +127,11 @@ chan_pjsip
|
||||
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
|
||||
@@ -142,7 +147,6 @@ func_holdintercept
|
||||
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 ------------
|
||||
------------------------------------------------------------------------------
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include "asterisk/sorcery.h"
|
||||
#include "asterisk/file.h"
|
||||
#include "asterisk/cli.h"
|
||||
#include "asterisk/res_pjsip_cli.h"
|
||||
|
||||
/*** MODULEINFO
|
||||
<depend>pjproject</depend>
|
||||
@@ -2147,7 +2148,39 @@ static char *cli_show_endpoint_identifiers(struct ast_cli_entry *e, int cmd, str
|
||||
#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")
|
||||
};
|
||||
|
||||
|
@@ -25,6 +25,7 @@
|
||||
#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
|
||||
@@ -213,6 +214,24 @@ static const struct ast_sorcery_instance_observer observer_callbacks_global = {
|
||||
.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();
|
||||
|
@@ -26,6 +26,7 @@
|
||||
#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
|
||||
@@ -112,6 +113,40 @@ static int system_apply(const struct ast_sorcery *system_sorcery, void *obj)
|
||||
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);
|
||||
|
@@ -19,6 +19,7 @@
|
||||
|
||||
struct ao2_container;
|
||||
struct ast_threadpool_options;
|
||||
struct ast_sip_cli_context;
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
@@ -270,6 +271,24 @@ char *ast_sip_global_default_outbound_endpoint(void);
|
||||
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
|
||||
|
Reference in New Issue
Block a user