[Asterisk-code-review] res pjsip: Log IPv6 addresses correctly (asterisk[13])
Sean Bright
asteriskteam at digium.com
Fri Sep 7 14:08:31 CDT 2018
Sean Bright has uploaded this change for review. ( https://gerrit.asterisk.org/10058
Change subject: res_pjsip: Log IPv6 addresses correctly
......................................................................
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.
Instead, we use pjsip_tx_data.tp_info.dst_addr and
pjsip_rx_data.pkt_info.src_addr and pj_sockaddr_print() which includes
the brackets if the address is IPv6.
Change-Id: I5cfe997ced7883862a12b9c7d8551d76ae02fcf8
---
M include/asterisk/netsock2.h
M res/res_pjsip/pjsip_distributor.c
M res/res_pjsip_logger.c
M res/res_pjsip_session.c
4 files changed, 41 insertions(+), 15 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/58/10058/1
diff --git a/include/asterisk/netsock2.h b/include/asterisk/netsock2.h
index 5c6c733..b6f2858 100644
--- a/include/asterisk/netsock2.h
+++ b/include/asterisk/netsock2.h
@@ -31,6 +31,18 @@
#include <netinet/in.h>
+/*
+ * String buffer size that can accommodate a fully stringified representation of a
+ * supported IP address & port:
+ *
+ * - 45 bytes for an IPv6 address
+ * - 2 bytes for brackets around an IPv6 address
+ * - 1 byte for the port separator (a colon)
+ * - 5 bytes for the port
+ * - 1 byte for the zero-terminator
+ */
+#define AST_SOCKADDR_BUFLEN (45 + 2 + 1 + 5 + 1)
+
/*!
* Values for address families that we support. This is reproduced from socket.h
* because we do not want users to include that file. Only netsock2.c should
diff --git a/res/res_pjsip/pjsip_distributor.c b/res/res_pjsip/pjsip_distributor.c
index f9e2997..9b3fcdc 100644
--- a/res/res_pjsip/pjsip_distributor.c
+++ b/res/res_pjsip/pjsip_distributor.c
@@ -638,16 +638,21 @@
char from_buf[PJSIP_MAX_URL_SIZE];
char callid_buf[PJSIP_MAX_URL_SIZE];
char method_buf[PJSIP_MAX_URL_SIZE];
+ char src_addr_buf[AST_SOCKADDR_BUFLEN];
pjsip_uri_print(PJSIP_URI_IN_FROMTO_HDR, rdata->msg_info.from->uri, from_buf, PJSIP_MAX_URL_SIZE);
ast_copy_pj_str(callid_buf, &rdata->msg_info.cid->id, PJSIP_MAX_URL_SIZE);
ast_copy_pj_str(method_buf, &rdata->msg_info.msg->line.req.method.name, PJSIP_MAX_URL_SIZE);
if (count) {
- ast_log(LOG_NOTICE, "Request '%s' from '%s' failed for '%s:%d' (callid: %s) - %s"
+ ast_log(LOG_NOTICE, "Request '%s' from '%s' failed for '%s' (callid: %s) - %s"
" after %u tries in %.3f ms\n",
- method_buf, from_buf, rdata->pkt_info.src_name, rdata->pkt_info.src_port, callid_buf, msg, count, period / 1000.0);
+ method_buf, from_buf,
+ pj_sockaddr_print(&rdata->pkt_info.src_addr, src_addr_buf, sizeof(src_addr_buf), 3),
+ callid_buf, msg, count, period / 1000.0);
} else {
- ast_log(LOG_NOTICE, "Request '%s' from '%s' failed for '%s:%d' (callid: %s) - %s\n",
- method_buf, from_buf, rdata->pkt_info.src_name, rdata->pkt_info.src_port, callid_buf, msg);
+ ast_log(LOG_NOTICE, "Request '%s' from '%s' failed for '%s' (callid: %s) - %s\n",
+ method_buf, from_buf,
+ pj_sockaddr_print(&rdata->pkt_info.src_addr, src_addr_buf, sizeof(src_addr_buf), 3),
+ callid_buf, msg);
}
}
diff --git a/res/res_pjsip_logger.c b/res/res_pjsip_logger.c
index 2e5c76c..fe23392 100644
--- a/res/res_pjsip_logger.c
+++ b/res/res_pjsip_logger.c
@@ -101,22 +101,25 @@
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;
}
@@ -125,12 +128,11 @@
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;
}
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index ed637cd..ff40e55 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -2101,6 +2101,7 @@
pjsip_timer_setting timer;
pjsip_rdata_sdp_info *sdp_info;
pjmedia_sdp_session *local = NULL;
+ char buffer[AST_SOCKADDR_BUFLEN];
/* From this point on, any calls to pjsip_inv_terminate have the last argument as PJ_TRUE
* so that we will be notified so we can destroy the session properly
@@ -2128,8 +2129,11 @@
}
goto end;
case SIP_GET_DEST_EXTEN_PARTIAL:
- ast_debug(1, "Call from '%s' (%s:%s:%d) to extension '%s' - partial match\n", ast_sorcery_object_get_id(invite->session->endpoint),
- invite->rdata->tp_info.transport->type_name, invite->rdata->pkt_info.src_name, invite->rdata->pkt_info.src_port, invite->session->exten);
+ ast_debug(1, "Call from '%s' (%s:%s) to extension '%s' - partial match\n",
+ ast_sorcery_object_get_id(invite->session->endpoint),
+ invite->rdata->tp_info.transport->type_name,
+ pj_sockaddr_print(&invite->rdata->pkt_info.src_addr, buffer, sizeof(buffer), 3),
+ invite->session->exten);
if (pjsip_inv_initial_answer(invite->session->inv_session, invite->rdata, 484, NULL, NULL, &tdata) == PJ_SUCCESS) {
ast_sip_session_send_response(invite->session, tdata);
@@ -2139,9 +2143,12 @@
goto end;
case SIP_GET_DEST_EXTEN_NOT_FOUND:
default:
- ast_log(LOG_NOTICE, "Call from '%s' (%s:%s:%d) to extension '%s' rejected because extension not found in context '%s'.\n",
- ast_sorcery_object_get_id(invite->session->endpoint), invite->rdata->tp_info.transport->type_name, invite->rdata->pkt_info.src_name,
- invite->rdata->pkt_info.src_port, invite->session->exten, invite->session->endpoint->context);
+ ast_log(LOG_NOTICE, "Call from '%s' (%s:%s) to extension '%s' rejected because extension not found in context '%s'.\n",
+ ast_sorcery_object_get_id(invite->session->endpoint),
+ invite->rdata->tp_info.transport->type_name,
+ pj_sockaddr_print(&invite->rdata->pkt_info.src_addr, buffer, sizeof(buffer), 3),
+ invite->session->exten,
+ invite->session->endpoint->context);
if (pjsip_inv_initial_answer(invite->session->inv_session, invite->rdata, 404, NULL, NULL, &tdata) == PJ_SUCCESS) {
ast_sip_session_send_response(invite->session, tdata);
--
To view, visit https://gerrit.asterisk.org/10058
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-MessageType: newchange
Gerrit-Change-Id: I5cfe997ced7883862a12b9c7d8551d76ae02fcf8
Gerrit-Change-Number: 10058
Gerrit-PatchSet: 1
Gerrit-Owner: Sean Bright <sean.bright at gmail.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180907/f5b31806/attachment.html>
More information about the asterisk-code-review
mailing list