mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-19 19:52:48 +00:00
res_pjsip: Added "subscribe_context" to endpoint
If specified, incoming SUBSCRIBE requests will be searched for the matching extension in the indicated context. If no "subscribe_context" is specified, then the "context" setting is used. ASTERISK-25471 #close Change-Id: I3fb7a15f5bc154079bd348c08b7ad1cdd2d5e514
This commit is contained in:
11
CHANGES
11
CHANGES
@@ -360,6 +360,17 @@ cdr_csv
|
|||||||
post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.
|
post-1.8 CDR columns 'peeraccount', 'linkedid', and 'sequence'.
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
--- Functionality changes from Asterisk 13.10.0 to Asterisk 13.11.0 ----------
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
res_pjsip
|
||||||
|
------------------
|
||||||
|
* Added "subscribe_context" to endpoint.
|
||||||
|
If specified, incoming SUBSCRIBE requests will be searched for the matching
|
||||||
|
extension in the indicated context. If no "subscribe_context" is specified,
|
||||||
|
then the "context" setting is used.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
--- Functionality changes from Asterisk 13.9.0 to Asterisk 13.10.0 -----------
|
--- Functionality changes from Asterisk 13.9.0 to Asterisk 13.10.0 -----------
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@@ -0,0 +1,21 @@
|
|||||||
|
"""pjsip_add_subscribe_context
|
||||||
|
|
||||||
|
Revision ID: 9deac0ae4717
|
||||||
|
Revises: ef7efc2d3964
|
||||||
|
Create Date: 2016-07-04 12:11:28.117788
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '9deac0ae4717'
|
||||||
|
down_revision = 'ef7efc2d3964'
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade():
|
||||||
|
op.add_column('ps_endpoints', sa.Column('subscribe_context', sa.String(40)))
|
||||||
|
|
||||||
|
def downgrade():
|
||||||
|
op.drop_column('ps_endpoints', 'subscribe_context')
|
@@ -505,6 +505,8 @@ struct ast_sip_endpoint_subscription_configuration {
|
|||||||
unsigned int minexpiry;
|
unsigned int minexpiry;
|
||||||
/*! Message waiting configuration */
|
/*! Message waiting configuration */
|
||||||
struct ast_sip_mwi_configuration mwi;
|
struct ast_sip_mwi_configuration mwi;
|
||||||
|
/* Context for SUBSCRIBE requests */
|
||||||
|
char context[AST_MAX_CONTEXT];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -900,6 +900,15 @@
|
|||||||
mask with a slash ('/')
|
mask with a slash ('/')
|
||||||
</para></description>
|
</para></description>
|
||||||
</configOption>
|
</configOption>
|
||||||
|
<configOption name="subscribe_context">
|
||||||
|
<synopsis>Context for incoming MESSAGE requests.</synopsis>
|
||||||
|
<description><para>
|
||||||
|
If specified, incoming SUBSCRIBE requests will be searched for the matching
|
||||||
|
extension in the indicated context.
|
||||||
|
If no <replaceable>subscribe_context</replaceable> is specified,
|
||||||
|
then the <replaceable>context</replaceable> setting is used.
|
||||||
|
</para></description>
|
||||||
|
</configOption>
|
||||||
</configObject>
|
</configObject>
|
||||||
<configObject name="auth">
|
<configObject name="auth">
|
||||||
<synopsis>Authentication type</synopsis>
|
<synopsis>Authentication type</synopsis>
|
||||||
@@ -1964,6 +1973,9 @@
|
|||||||
<parameter name="ActiveChannels">
|
<parameter name="ActiveChannels">
|
||||||
<para>The number of active channels associated with this endpoint.</para>
|
<para>The number of active channels associated with this endpoint.</para>
|
||||||
</parameter>
|
</parameter>
|
||||||
|
<parameter name="SubscribeContext">
|
||||||
|
<para><xi:include xpointer="xpointer(/docs/configInfo[@name='res_pjsip']/configFile[@name='pjsip.conf']/configObject[@name='endpoint']/configOption[@name='subscribe_context']/synopsis/node())"/></para>
|
||||||
|
</parameter>
|
||||||
</syntax>
|
</syntax>
|
||||||
</managerEventInstance>
|
</managerEventInstance>
|
||||||
</managerEvent>
|
</managerEvent>
|
||||||
|
@@ -1859,6 +1859,7 @@ int ast_res_pjsip_initialize_configuration(void)
|
|||||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_deny", "", endpoint_acl_handler, NULL, NULL, 0, 0);
|
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_deny", "", endpoint_acl_handler, NULL, NULL, 0, 0);
|
||||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_permit", "", endpoint_acl_handler, NULL, NULL, 0, 0);
|
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_permit", "", endpoint_acl_handler, NULL, NULL, 0, 0);
|
||||||
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_acl", "", endpoint_acl_handler, contact_acl_to_str, NULL, 0, 0);
|
ast_sorcery_object_field_register_custom(sip_sorcery, "endpoint", "contact_acl", "", endpoint_acl_handler, contact_acl_to_str, NULL, 0, 0);
|
||||||
|
ast_sorcery_object_field_register(sip_sorcery, "endpoint", "subscribe_context", "", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct ast_sip_endpoint, subscription.context));
|
||||||
|
|
||||||
if (ast_sip_initialize_sorcery_transport()) {
|
if (ast_sip_initialize_sorcery_transport()) {
|
||||||
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
|
ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");
|
||||||
|
@@ -412,9 +412,11 @@ static void subscription_shutdown(struct ast_sip_subscription *sub)
|
|||||||
static int new_subscribe(struct ast_sip_endpoint *endpoint,
|
static int new_subscribe(struct ast_sip_endpoint *endpoint,
|
||||||
const char *resource)
|
const char *resource)
|
||||||
{
|
{
|
||||||
if (!ast_exists_extension(NULL, endpoint->context, resource, PRIORITY_HINT, NULL)) {
|
const char *context = S_OR(endpoint->subscription.context, endpoint->context);
|
||||||
|
|
||||||
|
if (!ast_exists_extension(NULL, context, resource, PRIORITY_HINT, NULL)) {
|
||||||
ast_log(LOG_NOTICE, "Extension state subscription failed: Extension %s does not exist in context '%s' or has no associated hint\n",
|
ast_log(LOG_NOTICE, "Extension state subscription failed: Extension %s does not exist in context '%s' or has no associated hint\n",
|
||||||
resource, endpoint->context);
|
resource, context);
|
||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -432,7 +434,9 @@ static int subscription_established(struct ast_sip_subscription *sip_sub)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_copy_string(exten_state_sub->context, endpoint->context, sizeof(exten_state_sub->context));
|
ast_copy_string(exten_state_sub->context,
|
||||||
|
S_OR(endpoint->subscription.context, endpoint->context),
|
||||||
|
sizeof(exten_state_sub->context));
|
||||||
ast_copy_string(exten_state_sub->exten, resource, sizeof(exten_state_sub->exten));
|
ast_copy_string(exten_state_sub->exten, resource, sizeof(exten_state_sub->exten));
|
||||||
|
|
||||||
if ((exten_state_sub->id = ast_extension_state_add_destroy_extended(
|
if ((exten_state_sub->id = ast_extension_state_add_destroy_extended(
|
||||||
|
Reference in New Issue
Block a user