mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-13 16:21:01 +00:00
Merge "Fix Alembic upgrades." into 13
This commit is contained in:
@@ -16,10 +16,8 @@ import sqlalchemy as sa
|
||||
|
||||
def upgrade():
|
||||
op.add_column('ps_contacts', sa.Column('reg_server', sa.String(20)))
|
||||
op.drop_constraint('id', 'ps_contacts', type_='unique')
|
||||
op.create_unique_constraint('ps_contacts_uq', 'ps_contacts', ['id','reg_server'])
|
||||
|
||||
def downgrade():
|
||||
op.drop_constraint('ps_contacts_uq', 'ps_contacts', type_='unique')
|
||||
op.drop_column('ps_contacts', 'reg_server')
|
||||
op.create_unique_constraint(None, 'ps_contacts', 'id')
|
||||
|
@@ -445,6 +445,28 @@ enum aco_option_type {
|
||||
* {endcode}
|
||||
*/
|
||||
OPT_UINT_T,
|
||||
|
||||
/*! \brief Type for default option handler for bools (ast_true/ast_false)
|
||||
* \note aco_option_register flags:
|
||||
* non-zero : process via ast_true
|
||||
* 0 : process via ast_false
|
||||
* aco_option_register varargs:
|
||||
* FLDSET macro with the field of type int. It is important to note that the field
|
||||
* cannot be a bitfield. If bitfields are required, they must be set via a custom handler.
|
||||
*
|
||||
* This is exactly the same as OPT_BOOL_T. The only difference is that when
|
||||
* translated to a string, OPT_BOOL_T becomes "true" or "false"; OPT_YESNO_T becomes
|
||||
* "yes" or "no".
|
||||
*
|
||||
* Example:
|
||||
* {code}
|
||||
* struct test_item {
|
||||
* int enabled;
|
||||
* };
|
||||
* aco_option_register(&cfg_info, "enabled", ACO_EXACT, my_types, "no", OPT_YESNO_T, 1, FLDSET(struct test_item, enabled));
|
||||
* {endcode}
|
||||
*/
|
||||
OPT_YESNO_T,
|
||||
};
|
||||
|
||||
/*! \brief A callback function for handling a particular option
|
||||
|
@@ -97,6 +97,7 @@ static char *aco_option_type_string[] = {
|
||||
"IP Address", /* OPT_SOCKADDR_T, */
|
||||
"String", /* OPT_STRINGFIELD_T, */
|
||||
"Unsigned Integer", /* OPT_UINT_T, */
|
||||
"Boolean", /* OPT_YESNO_T, */
|
||||
};
|
||||
|
||||
void *aco_pending_config(struct aco_info *info)
|
||||
@@ -139,6 +140,10 @@ static aco_option_handler ast_config_option_default_handler(enum aco_option_type
|
||||
switch(type) {
|
||||
case OPT_ACL_T: return acl_handler_fn;
|
||||
case OPT_BOOL_T: return bool_handler_fn;
|
||||
/* Reading from config files, BOOL and YESNO are handled exactly the
|
||||
* same. Their difference is in how they are rendered to users
|
||||
*/
|
||||
case OPT_YESNO_T: return bool_handler_fn;
|
||||
case OPT_BOOLFLAG_T: return boolflag_handler_fn;
|
||||
case OPT_CHAR_ARRAY_T: return chararray_handler_fn;
|
||||
case OPT_CODEC_T: return codec_handler_fn;
|
||||
|
@@ -290,6 +290,12 @@ static int bool_handler_fn(const void *obj, const intptr_t *args, char **buf)
|
||||
return !(*buf = ast_strdup(*field ? "true" : "false")) ? -1 : 0;
|
||||
}
|
||||
|
||||
static int yesno_handler_fn(const void *obj, const intptr_t *args, char **buf)
|
||||
{
|
||||
unsigned int *field = (unsigned int *)(obj + args[0]);
|
||||
return !(*buf = ast_strdup(*field ? "yes" : "no")) ? -1 : 0;
|
||||
}
|
||||
|
||||
static int sockaddr_handler_fn(const void *obj, const intptr_t *args, char **buf)
|
||||
{
|
||||
struct ast_sockaddr *field = (struct ast_sockaddr *)(obj + args[0]);
|
||||
@@ -313,6 +319,7 @@ static sorcery_field_handler sorcery_field_default_handler(enum aco_option_type
|
||||
{
|
||||
switch(type) {
|
||||
case OPT_BOOL_T: return bool_handler_fn;
|
||||
case OPT_YESNO_T: return yesno_handler_fn;
|
||||
case OPT_CHAR_ARRAY_T: return chararray_handler_fn;
|
||||
case OPT_CODEC_T: return codec_handler_fn;
|
||||
case OPT_DOUBLE_T: return double_handler_fn;
|
||||
|
@@ -1138,7 +1138,7 @@ int ast_sip_initialize_sorcery_location(void)
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "qualify_frequency", 0, OPT_UINT_T,
|
||||
PARSE_IN_RANGE, FLDSET(struct ast_sip_contact, qualify_frequency), 0, 86400);
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "qualify_timeout", "3.0", OPT_DOUBLE_T, 0, FLDSET(struct ast_sip_contact, qualify_timeout));
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "authenticate_qualify", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_contact, authenticate_qualify));
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "authenticate_qualify", "no", OPT_YESNO_T, 1, FLDSET(struct ast_sip_contact, authenticate_qualify));
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "outbound_proxy", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, outbound_proxy));
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "user_agent", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, user_agent));
|
||||
ast_sorcery_object_field_register(sorcery, "contact", "reg_server", "", OPT_STRINGFIELD_T, 0, STRFLDSET(struct ast_sip_contact, reg_server));
|
||||
|
Reference in New Issue
Block a user