/*! * \internal * \brief Add a Remote-Party-ID header to an outbound message * \param tdata The message to add the header to * \param id The identification information used to populate the header */ static void add_rpid_header(pjsip_tx_data *tdata, const struct ast_party_id *id) { static const pj_str_t pj_rpid_name = { "Remote-Party-ID", 15 }; pjsip_fromto_hdr *rpid_hdr; pjsip_fromto_hdr *old_rpid; if (!id->number.valid) { return; } /* Since inv_session reuses responses, we have to make sure there's not already * a P-Asserted-Identity present. If there is, we just modify the old one. */ old_rpid = pjsip_msg_find_hdr_by_name(tdata->msg, &pj_rpid_name, NULL); if (old_rpid) { modify_id_header(tdata->pool, old_rpid, id); add_privacy_params(tdata, old_rpid, id); return; } rpid_hdr = create_new_id_hdr(&pj_rpid_name, tdata, id); if (!rpid_hdr) { return; } add_privacy_params(tdata, rpid_hdr, id); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *)rpid_hdr); }
/*! * \internal * \brief Add a P-Asserted-Identity header to an outbound message * \param tdata The message to add the header to * \param id The identification information used to populate the header */ static void add_pai_header(const struct ast_sip_session *session, pjsip_tx_data *tdata, const struct ast_party_id *id) { static const pj_str_t pj_pai_name = { "P-Asserted-Identity", 19 }; pjsip_fromto_hdr *base; pjsip_fromto_hdr *pai_hdr; pjsip_fromto_hdr *old_pai; /* Since inv_session reuses responses, we have to make sure there's not already * a P-Asserted-Identity present. If there is, we just modify the old one. */ old_pai = pjsip_msg_find_hdr_by_name(tdata->msg, &pj_pai_name, NULL); if (old_pai) { /* If type is OTHER, then the existing header was most likely * added by the PJSIP_HEADER dial plan function as a simple * name/value pair. We can't pass this to modify_id_header because * there are no virtual functions to get the uri. We could parse * it into a pjsip_fromto_hdr but it isn't worth it since * modify_id_header is just going to overwrite the name and number * anyway. We'll just remove it from the header list instead * and create a new one. */ if (old_pai->type == PJSIP_H_OTHER) { pj_list_erase(old_pai); } else { ast_sip_modify_id_header(tdata->pool, old_pai, id); add_privacy_header(tdata, id); return; } } base = tdata->msg->type == PJSIP_REQUEST_MSG ? session->saved_from_hdr : PJSIP_MSG_TO_HDR(tdata->msg); pai_hdr = create_new_id_hdr(&pj_pai_name, base, tdata, id); if (!pai_hdr) { return; } add_privacy_header(tdata, id); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *)pai_hdr); }
/*! * \internal * \brief Add a Remote-Party-ID header to an outbound message * \param tdata The message to add the header to * \param id The identification information used to populate the header */ static void add_rpid_header(pjsip_tx_data *tdata, const struct ast_party_id *id) { static const pj_str_t pj_rpid_name = { "Remote-Party-ID", 15 }; pjsip_fromto_hdr *rpid_hdr; pjsip_fromto_hdr *old_rpid; /* Since inv_session reuses responses, we have to make sure there's not already * a P-Asserted-Identity present. If there is, we just modify the old one. */ old_rpid = pjsip_msg_find_hdr_by_name(tdata->msg, &pj_rpid_name, NULL); if (old_rpid) { /* If type is OTHER, then the existing header was most likely * added by the PJSIP_HEADER dial plan function as a simple * name/value pair. We can't pass this to modify_id_header because * there are no virtual functions to get the uri. We could parse * it into a pjsip_fromto_hdr but it isn't worth it since * modify_id_header is just going to overwrite the name and number * anyway. We'll just remove it from the header list instead * and create a new one. */ if (old_rpid->type == PJSIP_H_OTHER) { pj_list_erase(old_rpid); } else { modify_id_header(tdata->pool, old_rpid, id); add_privacy_params(tdata, old_rpid, id); return; } } rpid_hdr = create_new_id_hdr(&pj_rpid_name, tdata, id); if (!rpid_hdr) { return; } add_privacy_params(tdata, rpid_hdr, id); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *)rpid_hdr); }
/*! * \internal * \brief Add a P-Asserted-Identity header to an outbound message * \param tdata The message to add the header to * \param id The identification information used to populate the header */ static void add_pai_header(pjsip_tx_data *tdata, const struct ast_party_id *id) { static const pj_str_t pj_pai_name = { "P-Asserted-Identity", 19 }; pjsip_fromto_hdr *pai_hdr; pjsip_fromto_hdr *old_pai; /* Since inv_session reuses responses, we have to make sure there's not already * a P-Asserted-Identity present. If there is, we just modify the old one. */ old_pai = pjsip_msg_find_hdr_by_name(tdata->msg, &pj_pai_name, NULL); if (old_pai) { modify_id_header(tdata->pool, old_pai, id); add_privacy_header(tdata, id); return; } pai_hdr = create_new_id_hdr(&pj_pai_name, tdata, id); if (!pai_hdr) { return; } add_privacy_header(tdata, id); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr *)pai_hdr); }