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
changes/42/42/1
Kevin Harwell 10 years ago
parent b2b1f24af6
commit 520b9f2174

@ -127,6 +127,11 @@ chan_pjsip
more information. Defaults to 'no' as setting it to 'yes' can result in more information. Defaults to 'no' as setting it to 'yes' can result in
many unnecessary messages being sent to the caller. 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 res_ari_channels
------------------ ------------------
* Two new events, 'ChannelHold' and 'ChannelUnhold', have been added to the * 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 the channel wanted to place someone on hold. This allows external
applications to implement their own custom hold/unhold logic. applications to implement their own custom hold/unhold logic.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
--- Functionality changes from Asterisk 13.2.0 to Asterisk 13.3.0 ------------ --- Functionality changes from Asterisk 13.2.0 to Asterisk 13.3.0 ------------
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

@ -37,6 +37,7 @@
#include "asterisk/sorcery.h" #include "asterisk/sorcery.h"
#include "asterisk/file.h" #include "asterisk/file.h"
#include "asterisk/cli.h" #include "asterisk/cli.h"
#include "asterisk/res_pjsip_cli.h"
/*** MODULEINFO /*** MODULEINFO
<depend>pjproject</depend> <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 #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[] = { 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") AST_CLI_DEFINE(cli_show_endpoint_identifiers, "List registered endpoint identifiers")
}; };

@ -25,6 +25,7 @@
#include "include/res_pjsip_private.h" #include "include/res_pjsip_private.h"
#include "asterisk/sorcery.h" #include "asterisk/sorcery.h"
#include "asterisk/ast_version.h" #include "asterisk/ast_version.h"
#include "asterisk/res_pjsip_cli.h"
#define DEFAULT_MAX_FORWARDS 70 #define DEFAULT_MAX_FORWARDS 70
#define DEFAULT_KEEPALIVE_INTERVAL 0 #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, .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) int ast_sip_destroy_sorcery_global(void)
{ {
struct ast_sorcery *sorcery = ast_sip_get_sorcery(); struct ast_sorcery *sorcery = ast_sip_get_sorcery();

@ -26,6 +26,7 @@
#include "include/res_pjsip_private.h" #include "include/res_pjsip_private.h"
#include "asterisk/threadpool.h" #include "asterisk/threadpool.h"
#include "asterisk/dns.h" #include "asterisk/dns.h"
#include "asterisk/res_pjsip_cli.h"
#define TIMER_T1_MIN 100 #define TIMER_T1_MIN 100
#define DEFAULT_TIMER_T1 500 #define DEFAULT_TIMER_T1 500
@ -112,6 +113,40 @@ static int system_apply(const struct ast_sorcery *system_sorcery, void *obj)
return 0; 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) int ast_sip_initialize_system(void)
{ {
RAII_VAR(struct ao2_container *, system_configs, NULL, ao2_cleanup); RAII_VAR(struct ao2_container *, system_configs, NULL, ao2_cleanup);

@ -19,6 +19,7 @@
struct ao2_container; struct ao2_container;
struct ast_threadpool_options; struct ast_threadpool_options;
struct ast_sip_cli_context;
/*! /*!
* \internal * \internal
@ -270,6 +271,24 @@ char *ast_sip_global_default_outbound_endpoint(void);
int ast_sip_initialize_cli(void); int ast_sip_initialize_cli(void);
void ast_sip_destroy_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 * \internal
* \brief Used by res_pjsip.so to register a service without adding a self reference * \brief Used by res_pjsip.so to register a service without adding a self reference

Loading…
Cancel
Save