mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +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
									
									
									
									
									
								
							| @@ -8,6 +8,17 @@ | |||||||
| === | === | ||||||
| ============================================================================== | ============================================================================== | ||||||
|  |  | ||||||
|  | ------------------------------------------------------------------------------ | ||||||
|  | --- 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') | ||||||
| @@ -503,6 +503,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]; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /*! | /*! | ||||||
|   | |||||||
| @@ -897,6 +897,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> | ||||||
| @@ -1958,6 +1967,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> | ||||||
|   | |||||||
| @@ -1861,6 +1861,7 @@ int ast_res_pjsip_initialize_configuration(const struct ast_module_info *ast_mod | |||||||
| 	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"); | ||||||
|   | |||||||
| @@ -352,9 +352,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; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -372,7 +374,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