diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c index daeeec9b89..7fe2b77d9f 100644 --- a/res/res_pjsip_registrar.c +++ b/res/res_pjsip_registrar.c @@ -57,7 +57,7 @@ static int registrar_get_expiration(const struct ast_sip_aor *aor, const pjsip_c 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 @@ static int rx_task(void *data) 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 @@ static int rx_task(void *data) 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 {