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 3f9544c1f5
commit 887a315e17
7 changed files with 62 additions and 23 deletions

View File

@@ -3674,6 +3674,8 @@ int ast_sip_create_rdata_with_contact(pjsip_rx_data *rdata, char *packet, const
ast_copy_string(rdata->pkt_info.packet, packet, sizeof(rdata->pkt_info.packet));
ast_copy_string(rdata->pkt_info.src_name, src_name, sizeof(rdata->pkt_info.src_name));
rdata->pkt_info.src_port = src_port;
pj_sockaddr_parse(pj_AF_UNSPEC(), 0, pj_cstr(&tmp, src_name), &rdata->pkt_info.src_addr);
pj_sockaddr_set_port(&rdata->pkt_info.src_addr, src_port);
pjsip_parse_rdata(packet, strlen(packet), rdata);
if (!rdata->msg_info.msg || !pj_list_empty(&rdata->msg_info.parse_err)) {