From 4895ddef28b34a47e50b9d89e9827f94b72c4b0c Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Wed, 16 Jul 2014 13:58:07 +0000 Subject: [PATCH] res_pjsip: Support setting a default accountcode on endpoints Most channel drivers let you specify a default accountcode to be set on channels associated with a particular peer/endpoint/object. Prior to this patch, chan_pjsip/res_pjsip did not support such a setting. This patch adds a new setting to the res_pjsip endpoint object, 'accountcode'. When a channel is created that is associated with an endpoint with this value set, the channel will automatically have its accountcode property set to the value configured for the endpoint. Review: https://reviewboard.asterisk.org/r/3724/ ASTERISK-24000 #close Reported by: Matt Jordan git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@418756 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- CHANGES | 11 ++++++++++ channels/chan_pjsip.c | 8 ++++++-- configs/pjsip.conf.sample | 2 ++ .../1d50859ed02e_create_accountcode.py | 20 +++++++++++++++++++ include/asterisk/res_pjsip.h | 2 ++ res/res_pjsip.c | 7 +++++++ res/res_pjsip/pjsip_configuration.c | 1 + 7 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 contrib/ast-db-manage/config/versions/1d50859ed02e_create_accountcode.py diff --git a/CHANGES b/CHANGES index 4b8f1ddb17..a2daa4b561 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,17 @@ === ============================================================================== +------------------------------------------------------------------------------ +--- Functionality changes from Asterisk 12.4.0 to Asterisk 12.5.0 ------------ +------------------------------------------------------------------------------ + +res_pjsip +------------------ + * The endpoint configuration object now supports 'accountcode'. Any channel + created for an endpoint with this setting will have its accountcode set + to the specified value. + + ------------------------------------------------------------------------------ --- Functionality changes from Asterisk 12.3.0 to Asterisk 12.4.0 ------------ ------------------------------------------------------------------------------ diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index e55c488356..695211480c 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -364,8 +364,12 @@ static struct ast_channel *chan_pjsip_new(struct ast_sip_session *session, int s return NULL; } - if (!(chan = ast_channel_alloc(1, state, S_OR(session->id.number.str, ""), S_OR(session->id.name.str, ""), "", "", "", assignedids, requestor, 0, "PJSIP/%s-%08x", ast_sorcery_object_get_id(session->endpoint), - (unsigned)ast_atomic_fetchadd_int((int *)&chan_idx, +1)))) { + + chan = ast_channel_alloc(1, state, S_OR(session->id.number.str, ""), S_OR(session->id.name.str, ""), + session->endpoint->accountcode, "", "", assignedids, + requestor, 0, "PJSIP/%s-%08x", ast_sorcery_object_get_id(session->endpoint), + (unsigned)ast_atomic_fetchadd_int((int *)&chan_idx, +1)); + if (!chan) { return NULL; } diff --git a/configs/pjsip.conf.sample b/configs/pjsip.conf.sample index 3aa05a96b3..58774dc7c0 100644 --- a/configs/pjsip.conf.sample +++ b/configs/pjsip.conf.sample @@ -435,6 +435,8 @@ ; SYNOPSIS: Endpoint ;100rel=yes ; Allow support for RFC3262 provisional ACK tags (default: ; "yes") +;accountcode=foo ; Set a default account code for channels created for + ; this endpoint ;aggregate_mwi=yes ; (default: "yes") ;allow= ; Media Codec s to allow (default: "") ;aors= ; AoR s to be used with the endpoint (default: "") diff --git a/contrib/ast-db-manage/config/versions/1d50859ed02e_create_accountcode.py b/contrib/ast-db-manage/config/versions/1d50859ed02e_create_accountcode.py new file mode 100644 index 0000000000..eb20001378 --- /dev/null +++ b/contrib/ast-db-manage/config/versions/1d50859ed02e_create_accountcode.py @@ -0,0 +1,20 @@ +"""create accountcode + +Revision ID: 1d50859ed02e +Revises: 51f8cb66540e +Create Date: 2014-07-07 21:07:01.661783 + +""" + +# revision identifiers, used by Alembic. +revision = '1d50859ed02e' +down_revision = '51f8cb66540e' + +from alembic import op +import sqlalchemy as sa + +def upgrade(): + op.add_column('ps_endpoints', sa.Column('accountcode', sa.String(20))) + +def downgrade(): + op.drop_column('ps_endpoints', 'accountcode') diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index 733060281f..e009ec6acb 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -573,6 +573,8 @@ struct ast_sip_endpoint { AST_STRING_FIELD(fromdomain); /*! Context to route incoming MESSAGE requests to */ AST_STRING_FIELD(message_context); + /*! Accountcode to auto-set on channels */ + AST_STRING_FIELD(accountcode); ); /*! Configuration for extensions */ struct ast_sip_endpoint_extensions extensions; diff --git a/res/res_pjsip.c b/res/res_pjsip.c index 2936486b02..758c0e3c3e 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -715,6 +715,13 @@ specified, then the context setting is used. + + An accountcode to set automatically on any channels created for this endpoint. + + If specified, any channel created for this endpoint will automatically + have this accountcode set on it. + + Authentication type diff --git a/res/res_pjsip/pjsip_configuration.c b/res/res_pjsip/pjsip_configuration.c index 57c48cd212..2e28243889 100644 --- a/res/res_pjsip/pjsip_configuration.c +++ b/res/res_pjsip/pjsip_configuration.c @@ -1735,6 +1735,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "redirect_method", "user", redirect_handler, NULL, NULL, 0, 0); ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "set_var", "", set_var_handler, set_var_to_str, set_var_to_vl, 0, 0); ast_sorcery_object_field_register(sip_sorcery, "endpoint", "message_context", "", OPT_STRINGFIELD_T, 1, STRFLDSET(struct ast_sip_endpoint, message_context)); + ast_sorcery_object_field_register(sip_sorcery, "endpoint", "accountcode", "", OPT_STRINGFIELD_T, 1, STRFLDSET(struct ast_sip_endpoint, accountcode)); if (ast_sip_initialize_sorcery_transport()) { ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n"); -- 2.47.2