@ -542,6 +542,33 @@ static void add_pai_header(const struct ast_sip_session *session, pjsip_tx_data
pjsip_msg_add_hdr ( tdata - > msg , ( pjsip_hdr * ) pai_hdr ) ;
}
/*!
* \ internal
* \ brief Add party parameter to a Remote - Party - ID header .
*
* \ param tdata The message where the Remote - Party - ID header is
* \ param hdr The header on which the parameters are being added
* \ param session The session involved
*/
static void add_party_param ( pjsip_tx_data * tdata , pjsip_fromto_hdr * hdr , const struct ast_sip_session * session )
{
static const pj_str_t party_str = { " party " , 5 } ;
static const pj_str_t calling_str = { " calling " , 7 } ;
static const pj_str_t called_str = { " called " , 6 } ;
pjsip_param * party ;
/* The party value can't change throughout the lifetime, so it is set only once */
party = pjsip_param_find ( & hdr - > other_param , & party_str ) ;
if ( party ) {
return ;
}
party = PJ_POOL_ALLOC_T ( tdata - > pool , pjsip_param ) ;
party - > name = party_str ;
party - > value = ( session - > inv_session - > role = = PJSIP_ROLE_UAC ) ? calling_str : called_str ;
pj_list_insert_before ( & hdr - > other_param , party ) ;
}
/*!
* \ internal
* \ brief Add privacy and screen parameters to a Remote - Party - ID header .
@ -631,6 +658,7 @@ static void add_rpid_header(const struct ast_sip_session *session, pjsip_tx_data
pj_list_erase ( old_rpid ) ;
} else {
ast_sip_modify_id_header ( tdata - > pool , old_rpid , id ) ;
add_party_param ( tdata , old_rpid , session ) ;
add_privacy_params ( tdata , old_rpid , id ) ;
return ;
}
@ -646,6 +674,7 @@ static void add_rpid_header(const struct ast_sip_session *session, pjsip_tx_data
if ( ! rpid_hdr ) {
return ;
}
add_party_param ( tdata , rpid_hdr , session ) ;
add_privacy_params ( tdata , rpid_hdr , id ) ;
pjsip_msg_add_hdr ( tdata - > msg , ( pjsip_hdr * ) rpid_hdr ) ;
}