#ifndef SQUID_HTTPHIERARCHYLOGENTRY_H
#define SQUID_HTTPHIERARCHYLOGENTRY_H
+#include "ip/IpAddress.h"
#include "rfc2181.h"
#include "PingData.h"
int64_t peer_response_time; ///< last peer response delay
timeval first_conn_start; ///< first connection use among all peers
int64_t total_response_time; ///< cumulative for all peers
+ IpAddress peer_local_addr; ///< local IP:port of the last server-side connection
};
extern void hierarchyNote(HierarchyLogEntry *, hier_code, const char *);
LFT_LOCAL_IP,
LFT_LOCAL_PORT,
/*LFT_LOCAL_NAME, */
+ LFT_PEER_LOCAL_IP,
+ LFT_PEER_LOCAL_IP_OLD_27,
+ LFT_PEER_LOCAL_PORT,
LFT_TIME_SECONDS_SINCE_EPOCH,
LFT_TIME_SUBSECOND,
{"la", LFT_LOCAL_IP},
{"lp", LFT_LOCAL_PORT},
- /*{ "lA", LFT_LOCAL_NAME }, */
+ /*{ "lA", LFT_LOCAL_NAME }, */+
+ {"<la", LFT_PEER_LOCAL_IP},
+ {"oa", LFT_PEER_LOCAL_IP_OLD_27},
+ {"<lp", LFT_PEER_LOCAL_PORT},
+ /* {"ot", LFT_PEER_OUTGOING_TOS}, */
{"ts", LFT_TIME_SECONDS_SINCE_EPOCH},
{"tu", LFT_TIME_SUBSECOND},
break;
+ // the fmt->type can not be LFT_PEER_LOCAL_IP_OLD_27
+ // but compiler complains if ommited
+ case LFT_PEER_LOCAL_IP_OLD_27:
+ case LFT_PEER_LOCAL_IP:
+ if (!al->hier.peer_local_addr.IsAnyAddr()) {
+ out = al->hier.peer_local_addr.NtoA(tmp,sizeof(tmp));
+ }
+ break;
+
+ case LFT_PEER_LOCAL_PORT:
+ if ((outint = al->hier.peer_local_addr.GetPort())) {
+ doint = 1;
+ }
+
+ break;
+
case LFT_TIME_SECONDS_SINCE_EPOCH:
// some platforms store time in 32-bit, some 64-bit...
outoff = static_cast<int64_t>(current_time.tv_sec);
debugs(46, 0, "WARNING: the \"Hs\" formating code is deprecated use the \">Hs\" instead");
lt->type = LFT_HTTP_SENT_STATUS_CODE;
break;
+
+ case LFT_PEER_LOCAL_IP_OLD_27:
+ debugs(46, 0, "WARNING: The \"oa\" formatting code is deprecated. Use the \"<la\" instead.");
+ lt->type = LFT_PEER_LOCAL_IP;
+ break;
+
default:
break;
}
n_ichoices(0),
peer_reply_status(HTTP_STATUS_NONE),
peer_response_time(-1),
- total_response_time(-1)
+ total_response_time(-1),
+ peer_local_addr()
{
memset(host, '\0', SQUIDHOSTNAMELEN);
memset(cd_host, '\0', SQUIDHOSTNAMELEN);
comm_add_close_handler(fd, fwdServerClosedWrapper, this);
+ if (comm_local_port(fd))
+ request->hier.peer_local_addr = fd_table[fd].local_addr;
+
dispatch();
return;
if (!fs->_peer)
origin_tries++;
+ if (comm_local_port(fd))
+ request->hier.peer_local_addr = fd_table[fd].local_addr;
+
/*
* stats.conn_open is used to account for the number of
* connections that we have open to the peer, so we can limit