Merge "res/res_hep_pjsip: Fix reported local IP address when bound to 'any'"
This commit is contained in:
commit
1f36270b21
1 changed files with 49 additions and 5 deletions
|
@ -77,13 +77,35 @@ static pj_status_t logging_on_tx_msg(pjsip_tx_data *tdata)
|
|||
pjsip_cid_hdr *cid_hdr;
|
||||
pjsip_from_hdr *from_hdr;
|
||||
pjsip_to_hdr *to_hdr;
|
||||
pjsip_tpmgr_fla2_param prm;
|
||||
|
||||
capture_info = hepv3_create_capture_info(tdata->buf.start, (size_t)(tdata->buf.cur - tdata->buf.start));
|
||||
if (!capture_info) {
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
pj_sockaddr_print(&tdata->tp_info.transport->local_addr, local_buf, sizeof(local_buf), 3);
|
||||
/* Attempt to determine what IP address will we send this packet out of */
|
||||
pjsip_tpmgr_fla2_param_default(&prm);
|
||||
prm.tp_type = tdata->tp_info.transport->key.type;
|
||||
pj_strset2(&prm.dst_host, tdata->tp_info.dst_name);
|
||||
prm.local_if = PJ_TRUE;
|
||||
|
||||
/* If we can't get the local address use what we have already */
|
||||
if (pjsip_tpmgr_find_local_addr2(pjsip_endpt_get_tpmgr(ast_sip_get_pjsip_endpoint()), tdata->pool, &prm) != PJ_SUCCESS) {
|
||||
pj_sockaddr_print(&tdata->tp_info.transport->local_addr, local_buf, sizeof(local_buf), 3);
|
||||
} else {
|
||||
if (prm.tp_type & PJSIP_TRANSPORT_IPV6) {
|
||||
snprintf(local_buf, sizeof(local_buf), "[%.*s]:%hu",
|
||||
(int)pj_strlen(&prm.ret_addr),
|
||||
pj_strbuf(&prm.ret_addr),
|
||||
prm.ret_port);
|
||||
} else {
|
||||
snprintf(local_buf, sizeof(local_buf), "%.*s:%hu",
|
||||
(int)pj_strlen(&prm.ret_addr),
|
||||
pj_strbuf(&prm.ret_addr),
|
||||
prm.ret_port);
|
||||
}
|
||||
}
|
||||
pj_sockaddr_print(&tdata->tp_info.dst_addr, remote_buf, sizeof(remote_buf), 3);
|
||||
|
||||
cid_hdr = PJSIP_MSG_CID_HDR(tdata->msg);
|
||||
|
@ -115,17 +137,39 @@ static pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata)
|
|||
char remote_buf[256];
|
||||
char *uuid;
|
||||
struct hepv3_capture_info *capture_info;
|
||||
pjsip_tpmgr_fla2_param prm;
|
||||
|
||||
capture_info = hepv3_create_capture_info(&rdata->pkt_info.packet, rdata->pkt_info.len);
|
||||
if (!capture_info) {
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
||||
if (rdata->tp_info.transport->addr_len) {
|
||||
pj_sockaddr_print(&rdata->tp_info.transport->local_addr, local_buf, sizeof(local_buf), 3);
|
||||
if (!rdata->pkt_info.src_addr_len) {
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
if (rdata->pkt_info.src_addr_len) {
|
||||
pj_sockaddr_print(&rdata->pkt_info.src_addr, remote_buf, sizeof(remote_buf), 3);
|
||||
pj_sockaddr_print(&rdata->pkt_info.src_addr, remote_buf, sizeof(remote_buf), 3);
|
||||
|
||||
/* Attempt to determine what IP address we probably received this packet on */
|
||||
pjsip_tpmgr_fla2_param_default(&prm);
|
||||
prm.tp_type = rdata->tp_info.transport->key.type;
|
||||
pj_strset2(&prm.dst_host, rdata->pkt_info.src_name);
|
||||
prm.local_if = PJ_TRUE;
|
||||
|
||||
/* If we can't get the local address use what we have already */
|
||||
if (pjsip_tpmgr_find_local_addr2(pjsip_endpt_get_tpmgr(ast_sip_get_pjsip_endpoint()), rdata->tp_info.pool, &prm) != PJ_SUCCESS) {
|
||||
pj_sockaddr_print(&rdata->tp_info.transport->local_addr, local_buf, sizeof(local_buf), 3);
|
||||
} else {
|
||||
if (prm.tp_type & PJSIP_TRANSPORT_IPV6) {
|
||||
snprintf(local_buf, sizeof(local_buf), "[%.*s]:%hu",
|
||||
(int)pj_strlen(&prm.ret_addr),
|
||||
pj_strbuf(&prm.ret_addr),
|
||||
prm.ret_port);
|
||||
} else {
|
||||
snprintf(local_buf, sizeof(local_buf), "%.*s:%hu",
|
||||
(int)pj_strlen(&prm.ret_addr),
|
||||
pj_strbuf(&prm.ret_addr),
|
||||
prm.ret_port);
|
||||
}
|
||||
}
|
||||
|
||||
uuid = assign_uuid(&rdata->msg_info.cid->id, &rdata->msg_info.to->tag, &rdata->msg_info.from->tag);
|
||||
|
|
Loading…
Reference in a new issue