[svn-commits] mmichelson: branch mmichelson/sip_options r394177 - in /team/mmichelson/sip_o...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Jul 11 17:30:05 CDT 2013


Author: mmichelson
Date: Thu Jul 11 17:30:03 2013
New Revision: 394177

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=394177
Log:
Add "subminexpiry" option.


Modified:
    team/mmichelson/sip_options/include/asterisk/res_sip.h
    team/mmichelson/sip_options/res/res_sip.c
    team/mmichelson/sip_options/res/res_sip/sip_configuration.c
    team/mmichelson/sip_options/res/res_sip_pubsub.c

Modified: team/mmichelson/sip_options/include/asterisk/res_sip.h
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_options/include/asterisk/res_sip.h?view=diff&rev=394177&r1=394176&r2=394177
==============================================================================
--- team/mmichelson/sip_options/include/asterisk/res_sip.h (original)
+++ team/mmichelson/sip_options/include/asterisk/res_sip.h Thu Jul 11 17:30:03 2013
@@ -438,6 +438,8 @@
 	unsigned int cos_video;
 	/*! Indicates if endpoint is allowed to initiate subscriptions */
 	unsigned int allowsubscribe;
+	/*! The minimum allowed expiration for subscriptions from endpoint */
+	unsigned int subminexpiry;
 };
 
 /*!

Modified: team/mmichelson/sip_options/res/res_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_options/res/res_sip.c?view=diff&rev=394177&r1=394176&r2=394177
==============================================================================
--- team/mmichelson/sip_options/res/res_sip.c (original)
+++ team/mmichelson/sip_options/res/res_sip.c Thu Jul 11 17:30:03 2013
@@ -461,6 +461,12 @@
 						See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for more information about QoS settings
 					</para></description>
 				</configOption>
+				<configOption name="allowsubscribe" default="no">
+					<synopsis>Determines if endpoint is allowed to initiate subscriptions with Asterisk.</synopsis>
+				</configOption>
+				<configOption name="subminexpiry" default="60">
+					<synopsis>The minimum allowed expiry time for subscriptions initiated by the endpoint.</synopsis>
+				</configOption>
 			</configObject>
 			<configObject name="auth">
 				<synopsis>Authentication type</synopsis>

Modified: team/mmichelson/sip_options/res/res_sip/sip_configuration.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_options/res/res_sip/sip_configuration.c?view=diff&rev=394177&r1=394176&r2=394177
==============================================================================
--- team/mmichelson/sip_options/res/res_sip/sip_configuration.c (original)
+++ team/mmichelson/sip_options/res/res_sip/sip_configuration.c Thu Jul 11 17:30:03 2013
@@ -671,6 +671,8 @@
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "cos_audio", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, cos_audio));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "cos_video", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, cos_video));
 	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "allowsubscribe", "no", OPT_BOOL_T, 1, FLDSET(struct ast_sip_endpoint, allowsubscribe));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "subminexpiry", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, subminexpiry));
+	ast_sorcery_object_field_register(sip_sorcery, "endpoint", "subminexpirey", "0", OPT_UINT_T, 0, FLDSET(struct ast_sip_endpoint, subminexpiry));
 
 	if (ast_sip_initialize_sorcery_transport(sip_sorcery)) {
 		ast_log(LOG_ERROR, "Failed to register SIP transport support with sorcery\n");

Modified: team/mmichelson/sip_options/res/res_sip_pubsub.c
URL: http://svnview.digium.com/svn/asterisk/team/mmichelson/sip_options/res/res_sip_pubsub.c?view=diff&rev=394177&r1=394176&r2=394177
==============================================================================
--- team/mmichelson/sip_options/res/res_sip_pubsub.c (original)
+++ team/mmichelson/sip_options/res/res_sip_pubsub.c Thu Jul 11 17:30:03 2013
@@ -616,6 +616,7 @@
 	char accept[AST_SIP_MAX_ACCEPT][64];
 	pjsip_accept_hdr *accept_header;
 	pjsip_event_hdr *event_header;
+	pjsip_expires_hdr *expires_header;
 	struct ast_sip_subscription_handler *handler;
 	RAII_VAR(struct ast_sip_endpoint *, endpoint, NULL, ao2_cleanup);
 	struct ast_sip_subscription *sub;
@@ -627,6 +628,15 @@
 	if (!endpoint->allowsubscribe) {
 		ast_log(LOG_WARNING, "Subscriptions not permitted for endpoint %s.\n", ast_sorcery_object_get_id(endpoint));
 		pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata, 603, NULL, NULL, NULL);
+		return PJ_TRUE;
+	}
+
+	expires_header = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, rdata->msg_info.msg->hdr.next);
+
+	if (expires_header && expires_header->ivalue < endpoint->subminexpiry) {
+		ast_log(LOG_WARNING, "Subscription expiration %d is too brief for endpoint %s. Minimum is %d\n",
+				expires_header->ivalue, ast_sorcery_object_get_id(endpoint), endpoint->subminexpiry);
+		pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata, 423, NULL, NULL, NULL);
 		return PJ_TRUE;
 	}
 




More information about the svn-commits mailing list