[svn-commits] file: branch 13 r432136 - /branches/13/res/res_pjsip_registrar.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Sat Feb 21 13:26:43 CST 2015


Author: file
Date: Sat Feb 21 13:26:41 2015
New Revision: 432136

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432136
Log:
res_pjsip_registrar: Add Expires header to 200 OK if present in REGISTER.

Some implementations don't pay attention to the expires for individual contacts.
In this case they may consider the lack of an Expires header in the 200 OK as
unregistered. This change makes it so if an Expires header is present in the REGISTER
we will add one in the 200 OK.

ASTERISK-24785 #close
Reported by: Ross Beer

Modified:
    branches/13/res/res_pjsip_registrar.c

Modified: branches/13/res/res_pjsip_registrar.c
URL: http://svnview.digium.com/svn/asterisk/branches/13/res/res_pjsip_registrar.c?view=diff&rev=432136&r1=432135&r2=432136
==============================================================================
--- branches/13/res/res_pjsip_registrar.c (original)
+++ branches/13/res/res_pjsip_registrar.c Sat Feb 21 13:26:41 2015
@@ -57,7 +57,7 @@
 	pjsip_expires_hdr *expires;
 	int expiration = aor->default_expiration;
 
-	if (contact->expires != -1) {
+	if (contact && contact->expires != -1) {
 		/* Expiration was provided with the contact itself */
 		expiration = contact->expires;
 	} else if ((expires = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL))) {
@@ -424,6 +424,7 @@
 	struct ast_sip_contact *response_contact;
 	char *user_agent = NULL;
 	pjsip_user_agent_hdr *user_agent_hdr;
+	pjsip_expires_hdr *expires_hdr;
 
 	/* Retrieve the current contacts, we'll need to know whether to update or not */
 	contacts = ast_sip_location_retrieve_aor_contacts(task_data->aor);
@@ -597,6 +598,11 @@
 
 	ao2_callback(contacts, 0, registrar_add_contact, tdata);
 
+	if ((expires_hdr = pjsip_msg_find_hdr(task_data->rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL))) {
+		expires_hdr = pjsip_expires_hdr_create(tdata->pool, registrar_get_expiration(task_data->aor, NULL, task_data->rdata));
+		pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)expires_hdr);
+	}
+
 	if (pjsip_get_response_addr(tdata->pool, task_data->rdata, &addr) == PJ_SUCCESS) {
 		ast_sip_send_response(&addr, tdata, task_data->endpoint);
 	} else {




More information about the svn-commits mailing list