@ -1386,6 +1386,8 @@ static void transfer_refer(struct ast_sip_session *session, const char *target)
enum ast_control_transfer message = AST_TRANSFER_SUCCESS ;
enum ast_control_transfer message = AST_TRANSFER_SUCCESS ;
pj_str_t tmp ;
pj_str_t tmp ;
pjsip_tx_data * packet ;
pjsip_tx_data * packet ;
const char * ref_by_val ;
char local_info [ pj_strlen ( & session - > inv_session - > dlg - > local . info_str ) + 1 ] ;
if ( pjsip_xfer_create_uac ( session - > inv_session - > dlg , NULL , & sub ) ! = PJ_SUCCESS ) {
if ( pjsip_xfer_create_uac ( session - > inv_session - > dlg , NULL , & sub ) ! = PJ_SUCCESS ) {
message = AST_TRANSFER_FAILED ;
message = AST_TRANSFER_FAILED ;
@ -1402,6 +1404,14 @@ static void transfer_refer(struct ast_sip_session *session, const char *target)
return ;
return ;
}
}
ref_by_val = pbx_builtin_getvar_helper ( session - > channel , " SIPREFERREDBYHDR " ) ;
if ( ! ast_strlen_zero ( ref_by_val ) ) {
ast_sip_add_header ( packet , " Referred-By " , ref_by_val ) ;
} else {
ast_copy_pj_str ( local_info , & session - > inv_session - > dlg - > local . info_str , sizeof ( local_info ) ) ;
ast_sip_add_header ( packet , " Referred-By " , local_info ) ;
}
pjsip_xfer_send_request ( sub , packet ) ;
pjsip_xfer_send_request ( sub , packet ) ;
ast_queue_control_data ( session - > channel , AST_CONTROL_TRANSFER , & message , sizeof ( message ) ) ;
ast_queue_control_data ( session - > channel , AST_CONTROL_TRANSFER , & message , sizeof ( message ) ) ;
}
}