res_pjsip: Log IPv6 addresses correctly

Both pjsip_tx_data.tp_info.dst_name and pjsip_rx_data.pkt_info.src_name
store IPv6 addresses without enclosing brackets. This causes some log
output to be confusing because it is difficult to separate the IPv6
address from a port specification.

* Use pj_sockaddr_print() along with pjsip_tx_data.tp_info.dst_addr and
  pjsip_rx_data.pkt_info.src_addr where possible for consistent IPv6
  output.

* When a pj_sockaddr is not available, explicitly wrap IPv6 addresses
  in brackets.

* When assigning pjsip_rx_data.pkt_info.src_name ourselves, make sure
  to also set pjsip_rx_data.pkt_info.src_addr.

Change-Id: I5cfe997ced7883862a12b9c7d8551d76ae02fcf8
This commit is contained in:
Sean Bright
2018-09-07 10:40:05 -04:00
parent 8be6998f8d
commit 07cb13f75f
7 changed files with 62 additions and 23 deletions

View File

@@ -74,22 +74,25 @@ static inline int pjsip_log_test_addr(const char *address, int port)
static pj_status_t logging_on_tx_msg(pjsip_tx_data *tdata)
{
char buffer[AST_SOCKADDR_BUFLEN];
if (!pjsip_log_test_addr(tdata->tp_info.dst_name, tdata->tp_info.dst_port)) {
return PJ_SUCCESS;
}
ast_verbose("<--- Transmitting SIP %s (%d bytes) to %s:%s:%d --->\n%.*s\n",
ast_verbose("<--- Transmitting SIP %s (%d bytes) to %s:%s --->\n%.*s\n",
tdata->msg->type == PJSIP_REQUEST_MSG ? "request" : "response",
(int) (tdata->buf.cur - tdata->buf.start),
tdata->tp_info.transport->type_name,
tdata->tp_info.dst_name,
tdata->tp_info.dst_port,
pj_sockaddr_print(&tdata->tp_info.dst_addr, buffer, sizeof(buffer), 3),
(int) (tdata->buf.end - tdata->buf.start), tdata->buf.start);
return PJ_SUCCESS;
}
static pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata)
{
char buffer[AST_SOCKADDR_BUFLEN];
if (!pjsip_log_test_addr(rdata->pkt_info.src_name, rdata->pkt_info.src_port)) {
return PJ_FALSE;
}
@@ -98,12 +101,11 @@ static pj_bool_t logging_on_rx_msg(pjsip_rx_data *rdata)
return PJ_FALSE;
}
ast_verbose("<--- Received SIP %s (%d bytes) from %s:%s:%d --->\n%s\n",
ast_verbose("<--- Received SIP %s (%d bytes) from %s:%s --->\n%s\n",
rdata->msg_info.msg->type == PJSIP_REQUEST_MSG ? "request" : "response",
rdata->msg_info.len,
rdata->tp_info.transport->type_name,
rdata->pkt_info.src_name,
rdata->pkt_info.src_port,
pj_sockaddr_print(&rdata->pkt_info.src_addr, buffer, sizeof(buffer), 3),
rdata->pkt_info.packet);
return PJ_FALSE;
}