mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +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