From: Amos Jeffries Date: Sat, 20 Aug 2011 08:21:11 +0000 (+1200) Subject: Bug 3288: regression in %clientConnection; + al.tcpClient = clientConnection = aConn->clientConnection; dlinkAdd(this, &active, &ClientActiveRequests); #if USE_ADAPTATION request_satisfaction_mode = false; diff --git a/src/format/Format.cc b/src/format/Format.cc index 8e611520cb..7cb04620d5 100644 --- a/src/format/Format.cc +++ b/src/format/Format.cc @@ -361,31 +361,30 @@ Format::Format::assemble(MemBuf &mb, AccessLogEntry *al, int logSequenceNumber) /* case LFT_SERVER_PORT: */ case LFT_LOCAL_IP: - if (al->request) { - out = al->request->my_addr.NtoA(tmp,sizeof(tmp)); + if (al->tcpClient != NULL) { + out = al->tcpClient->local.NtoA(tmp,sizeof(tmp)); } - break; case LFT_LOCAL_PORT: - if (al->request) { - outint = al->request->my_addr.GetPort(); + if (al->tcpClient != NULL) { + outint = al->tcpClient->local.GetPort(); doint = 1; } - 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)); + if (al->hier.tcpServer != NULL) { + out = al->hier.tcpServer->local.NtoA(tmp,sizeof(tmp)); } break; case LFT_PEER_LOCAL_PORT: - if ((outint = al->hier.peer_local_addr.GetPort())) { + if (al->hier.tcpServer != NULL) { + outint = al->hier.tcpServer->local.GetPort(); doint = 1; } diff --git a/src/forward.cc b/src/forward.cc index 87bf1fd834..d258848878 100644 --- a/src/forward.cc +++ b/src/forward.cc @@ -728,11 +728,6 @@ FwdState::connectDone(const Comm::ConnectionPointer &conn, comm_err_t status, in serverConn = conn; -#if REDUNDANT_NOW - if (Config.onoff.log_ip_on_direct && serverConnection()->peerType == HIER_DIRECT) - updateHierarchyInfo(); -#endif - debugs(17, 3, HERE << serverConnection() << ": '" << entry->url() << "'" ); comm_add_close_handler(serverConnection()->fd, fwdServerClosedWrapper, this); @@ -1195,24 +1190,9 @@ void FwdState::updateHierarchyInfo() { assert(request); - assert(serverDestinations.size() > 0); - char nextHop[256]; - - if (serverConnection()->getPeer()) { - // went to peer, log peer host name - snprintf(nextHop,256,"%s", serverConnection()->getPeer()->name); - } else { - // went DIRECT, must honor log_ip_on_direct - if (!Config.onoff.log_ip_on_direct) - snprintf(nextHop,256,"%s",request->GetHost()); // domain name - else - serverConnection()->remote.NtoA(nextHop, 256); - } - - assert(nextHop[0]); - hierarchyNote(&request->hier, serverConnection()->peerType, nextHop); + request->hier.note(serverConnection(), request->GetHost()); } diff --git a/src/log/access_log.cc b/src/log/access_log.cc index a1160e1fb5..35cfbe955c 100644 --- a/src/log/access_log.cc +++ b/src/log/access_log.cc @@ -252,7 +252,7 @@ HierarchyLogEntry::HierarchyLogEntry() : peer_reply_status(HTTP_STATUS_NONE), peer_response_time(-1), total_response_time(-1), - peer_local_addr(), + tcpServer(NULL), bodyBytesRead(-1) { memset(host, '\0', SQUIDHOSTNAMELEN); @@ -272,13 +272,26 @@ HierarchyLogEntry::HierarchyLogEntry() : } void -hierarchyNote(HierarchyLogEntry * hl, - hier_code code, - const char *cache_peer) +HierarchyLogEntry::note(const Comm::ConnectionPointer &server, const char *requestedHost) { - assert(hl != NULL); - hl->code = code; - xstrncpy(hl->host, cache_peer, SQUIDHOSTNAMELEN); + tcpServer = server; + if (tcpServer == NULL) { + code = HIER_NONE; + xstrncpy(host, requestedHost, sizeof(host)); + } else { + code = tcpServer->peerType; + + if (tcpServer->getPeer()) { + // went to peer, log peer host name + xstrncpy(host, tcpServer->getPeer()->name, sizeof(host)); + } else { + // went DIRECT, must honor log_ip_on_direct + if (!Config.onoff.log_ip_on_direct) + xstrncpy(host, requestedHost, sizeof(host)); + else + tcpServer->remote.NtoA(host, 256); + } + } } static void diff --git a/src/tunnel.cc b/src/tunnel.cc index 6e9018a5a2..0114c78466 100644 --- a/src/tunnel.cc +++ b/src/tunnel.cc @@ -571,14 +571,7 @@ tunnelConnectDone(const Comm::ConnectionPointer &conn, comm_err_t status, int xe tunnelState->server.setDelayId(DelayId()); #endif - if (conn != NULL && conn->getPeer()) - hierarchyNote(&tunnelState->request->hier, conn->peerType, conn->getPeer()->name); - else if (Config.onoff.log_ip_on_direct) { - conn->remote.NtoA(fd_table[conn->fd].ipaddr,sizeof(fd_table[conn->fd].ipaddr)); - hierarchyNote(&tunnelState->request->hier, conn->peerType, fd_table[conn->fd].ipaddr); - } else - hierarchyNote(&tunnelState->request->hier, conn->peerType, tunnelState->getHost()); - + tunnelState->request->hier.note(conn, tunnelState->getHost()); tunnelState->server.conn = conn; tunnelState->request->peer_host = conn->getPeer() ? conn->getPeer()->host : NULL;