Author: file Date: Sat Feb 21 13:28:09 2015 New Revision: 432137 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=432137 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 ........ Merged revisions 432136 from http://svn.asterisk.org/svn/asterisk/branches/13 Modified: trunk/ (props changed) trunk/res/res_pjsip_registrar.c Propchange: trunk/ ------------------------------------------------------------------------------ Binary property 'branch-13-merged' - no diff available. Modified: trunk/res/res_pjsip_registrar.c URL: http://svnview.digium.com/svn/asterisk/trunk/res/res_pjsip_registrar.c?view=diff&rev=432137&r1=432136&r2=432137 ============================================================================== --- trunk/res/res_pjsip_registrar.c (original) +++ trunk/res/res_pjsip_registrar.c Sat Feb 21 13:28:09 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 { -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits