mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 03:50:31 +00:00
pjsip: allow and disallow show same codecs
In order to prevent confusion over the allow and disallow list of codecs being the same an option for registering a field as an alias is added. The alias field will be read from the configuration file, but afterwards is not listed as a known field. With disallow set as an alias, the CLI command pjsip show endpoint # will list the allow= field, but not the disallow field. (closes issue ASTERISK-23092) Review: https://reviewboard.asterisk.org/r/3193/ ........ Merged revisions 410190 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@410191 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -488,6 +488,8 @@ int ast_sorcery_object_fields_register(struct ast_sorcery *sorcery, const char *
|
||||
* \param multiple_handler A custom handler for translating the native representation of the fields
|
||||
* \param opt_type Option type
|
||||
* \param flags Option type specific flags
|
||||
* \param no_doc Field should not be documented
|
||||
* \param alias Interpret and apply field value only
|
||||
*
|
||||
* \retval 0 success
|
||||
* \retval -1 failure
|
||||
@@ -495,7 +497,8 @@ int ast_sorcery_object_fields_register(struct ast_sorcery *sorcery, const char *
|
||||
int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char *type,
|
||||
const char *name, const char *default_val, enum aco_option_type opt_type,
|
||||
aco_option_handler config_handler, sorcery_field_handler sorcery_handler,
|
||||
sorcery_fields_handler multiple_handler, unsigned int flags, unsigned int no_doc, size_t argc, ...);
|
||||
sorcery_fields_handler multiple_handler, unsigned int flags, unsigned int no_doc,
|
||||
unsigned int alias, size_t argc, ...);
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object
|
||||
@@ -511,7 +514,23 @@ int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, NULL, NULL, NULL, flags, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, NULL, NULL, NULL, flags, 0, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object as an alias
|
||||
*
|
||||
* \param sorcery Pointer to a sorcery structure
|
||||
* \param type Type of object
|
||||
* \param name Name of the field
|
||||
* \param default_val Default value of the field
|
||||
* \param opt_type Option type
|
||||
* \param flags Option type specific flags
|
||||
*
|
||||
* \retval 0 success
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register_alias(sorcery, type, name, default_val, opt_type, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, NULL, NULL, flags, 1, 1, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object without documentation
|
||||
@@ -527,7 +546,7 @@ int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register_nodoc(sorcery, type, name, default_val, opt_type, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, NULL, NULL, NULL, flags, 1, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, opt_type, NULL, NULL, NULL, flags, 1, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__)
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object with custom handlers
|
||||
@@ -545,7 +564,24 @@ int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register_custom(sorcery, type, name, default_val, config_handler, sorcery_handler, multiple_handler, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, OPT_CUSTOM_T, config_handler, sorcery_handler, multiple_handler, flags, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__);
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, OPT_CUSTOM_T, config_handler, sorcery_handler, multiple_handler, flags, 0, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__);
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object with custom handlers as an alias
|
||||
*
|
||||
* \param sorcery Pointer to a sorcery structure
|
||||
* \param type Type of object
|
||||
* \param name Name of the field
|
||||
* \param default_val Default value of the field
|
||||
* \param config_handler Custom configuration handler
|
||||
* \param sorcery_handler Custom sorcery handler
|
||||
* \param flags Option type specific flags
|
||||
*
|
||||
* \retval 0 success
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register_custom_alias(sorcery, type, name, default_val, config_handler, sorcery_handler, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, OPT_CUSTOM_T, config_handler, sorcery_handler, flags, 1, 1, VA_NARGS(__VA_ARGS__), __VA_ARGS__);
|
||||
|
||||
/*!
|
||||
* \brief Register a field within an object with custom handlers without documentation
|
||||
@@ -563,7 +599,7 @@ int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char
|
||||
* \retval -1 failure
|
||||
*/
|
||||
#define ast_sorcery_object_field_register_custom_nodoc(sorcery, type, name, default_val, config_handler, sorcery_handler, multiple_handler, flags, ...) \
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, OPT_CUSTOM_T, config_handler, sorcery_handler, multiple_handler, flags, 1, VA_NARGS(__VA_ARGS__), __VA_ARGS__);
|
||||
__ast_sorcery_object_field_register(sorcery, type, name, default_val, OPT_CUSTOM_T, config_handler, sorcery_handler, flags, 1, 0, VA_NARGS(__VA_ARGS__), __VA_ARGS__);
|
||||
|
||||
/*!
|
||||
* \brief Inform any wizards to load persistent objects
|
||||
|
@@ -811,7 +811,7 @@ int ast_sorcery_object_fields_register(struct ast_sorcery *sorcery, const char *
|
||||
}
|
||||
|
||||
int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char *type, const char *name, const char *default_val, enum aco_option_type opt_type,
|
||||
aco_option_handler config_handler, sorcery_field_handler sorcery_handler, sorcery_fields_handler multiple_handler, unsigned int flags, unsigned int no_doc, size_t argc, ...)
|
||||
aco_option_handler config_handler, sorcery_field_handler sorcery_handler, sorcery_fields_handler multiple_handler, unsigned int flags, unsigned int no_doc, unsigned int alias, size_t argc, ...)
|
||||
{
|
||||
RAII_VAR(struct ast_sorcery_object_type *, object_type, ao2_find(sorcery->types, type, OBJ_KEY), ao2_cleanup);
|
||||
RAII_VAR(struct ast_sorcery_object_field *, object_field, NULL, ao2_cleanup);
|
||||
@@ -840,7 +840,9 @@ int __ast_sorcery_object_field_register(struct ast_sorcery *sorcery, const char
|
||||
}
|
||||
va_end(args);
|
||||
|
||||
ao2_link(object_type->fields, object_field);
|
||||
if (!alias) {
|
||||
ao2_link(object_type->fields, object_field);
|
||||
}
|
||||
|
||||
/* TODO: Improve this hack */
|
||||
if (!argc) {
|
||||
|
@@ -1577,7 +1577,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod
|
||||
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "type", "", OPT_NOOP_T, 0, 0);
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "context", "default", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_endpoint, context));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "disallow", "", OPT_CODEC_T, 0, FLDSET(struct ast_sip_endpoint, media.prefs, media.codecs));
|
||||
ast_sorcery_object_field_register_alias(sip_sorcery, "endpoint", "disallow", "", OPT_CODEC_T, 0, FLDSET(struct ast_sip_endpoint, media.prefs, media.codecs));
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "allow", "", OPT_CODEC_T, 1, FLDSET(struct ast_sip_endpoint, media.prefs, media.codecs));
|
||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "dtmf_mode", "rfc4733", dtmf_handler, dtmf_to_str, NULL, 0, 0);
|
||||
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "rtp_ipv6", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, media.rtp.ipv6));
|
||||
|
Reference in New Issue
Block a user