[svn-commits] irroot: branch irroot/distrotech-customers-trunk r322170 - /team/irroot/distr...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Mon Jun 6 22:51:40 CDT 2011


Author: irroot
Date: Mon Jun  6 22:51:36 2011
New Revision: 322170

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=322170
Log:
Add RB:1253 Make handle_request_publish do dialog expiration and destruction.

Modified:
    team/irroot/distrotech-customers-trunk/channels/chan_sip.c

Modified: team/irroot/distrotech-customers-trunk/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-trunk/channels/chan_sip.c?view=diff&rev=322170&r1=322169&r2=322170
==============================================================================
--- team/irroot/distrotech-customers-trunk/channels/chan_sip.c (original)
+++ team/irroot/distrotech-customers-trunk/channels/chan_sip.c Mon Jun  6 22:51:36 2011
@@ -24145,11 +24145,13 @@
 
 	if (ast_strlen_zero(event)) {
 		transmit_response(p, "489 Bad Event", req);
+		pvt_set_needdestroy(p, "missing Event: header");
 		return -1;
 	}
 
 	if (!(esc = get_esc(event))) {
 		transmit_response(p, "489 Bad Event", req);
+		pvt_set_needdestroy(p, "unknown event package in publish");
 		return -1;
 	}
 
@@ -24174,6 +24176,15 @@
 	}
 
 	publish_type = determine_sip_publish_type(req, event, etag, expires_str, &expires_int);
+
+	if (expires_int > max_expiry) {
+		expires_int = max_expiry;
+	} else if (expires_int < min_expiry && expires_int > 0) {
+		transmit_response_with_minexpires(p, "423 Interval too small", req);
+		pvt_set_needdestroy(p, "Expires is less that the min expires allowed.");
+		return 0;
+	}
+	p->expiry = expires_int;
 
 	/* It is the responsibility of these handlers to formulate any response
 	 * sent for a PUBLISH
@@ -24198,6 +24209,11 @@
 		transmit_response(p, "400 Impossible Condition", req);
 		break;
 	}
+	if (!handler_result && p->expiry > 0) {
+		sip_scheddestroy(p, (p->expiry + 10) * 1000);
+	} else {
+		pvt_set_needdestroy(p, "forcing expiration");
+	}
 
 	return handler_result;
 }
@@ -24580,8 +24596,7 @@
 			ast_log(LOG_WARNING, "Received subscription for extension \"%s\" context \"%s\" "
 				"with Expire header less that 'minexpire' limit. Received \"Expire: %d\" min is %d\n",
 				p->exten, p->context, p->expiry, min_expiry);
-			p->expiry = min_expiry;
-			pvt_set_needdestroy(p, "Expires is less that the min expires allowed. ");
+			pvt_set_needdestroy(p, "Expires is less that the min expires allowed.");
 			return 0;
 		}
 




More information about the svn-commits mailing list