mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-02 10:22:46 +00:00
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 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432136 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -57,7 +57,7 @@ static int registrar_get_expiration(const struct ast_sip_aor *aor, const pjsip_c
|
|||||||
pjsip_expires_hdr *expires;
|
pjsip_expires_hdr *expires;
|
||||||
int expiration = aor->default_expiration;
|
int expiration = aor->default_expiration;
|
||||||
|
|
||||||
if (contact->expires != -1) {
|
if (contact && contact->expires != -1) {
|
||||||
/* Expiration was provided with the contact itself */
|
/* Expiration was provided with the contact itself */
|
||||||
expiration = contact->expires;
|
expiration = contact->expires;
|
||||||
} else if ((expires = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL))) {
|
} else if ((expires = pjsip_msg_find_hdr(rdata->msg_info.msg, PJSIP_H_EXPIRES, NULL))) {
|
||||||
@@ -424,6 +424,7 @@ static int rx_task(void *data)
|
|||||||
struct ast_sip_contact *response_contact;
|
struct ast_sip_contact *response_contact;
|
||||||
char *user_agent = NULL;
|
char *user_agent = NULL;
|
||||||
pjsip_user_agent_hdr *user_agent_hdr;
|
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 */
|
/* Retrieve the current contacts, we'll need to know whether to update or not */
|
||||||
contacts = ast_sip_location_retrieve_aor_contacts(task_data->aor);
|
contacts = ast_sip_location_retrieve_aor_contacts(task_data->aor);
|
||||||
@@ -597,6 +598,11 @@ static int rx_task(void *data)
|
|||||||
|
|
||||||
ao2_callback(contacts, 0, registrar_add_contact, tdata);
|
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) {
|
if (pjsip_get_response_addr(tdata->pool, task_data->rdata, &addr) == PJ_SUCCESS) {
|
||||||
ast_sip_send_response(&addr, tdata, task_data->endpoint);
|
ast_sip_send_response(&addr, tdata, task_data->endpoint);
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user