=== modified file 'src/AccessLogEntry.h' --- src/AccessLogEntry.h 2009-12-22 01:12:53 +0000 +++ src/AccessLogEntry.h 2010-01-12 18:54:44 +0000 @@ -47,7 +47,11 @@ { public: - AccessLogEntry() : url(NULL) , reply(NULL), request(NULL) {} + AccessLogEntry() : url(NULL) , reply(NULL), request(NULL), +#if USE_ADAPTATION + virgin_request(NULL) +#endif + {} const char *url; @@ -134,6 +138,10 @@ public: Headers() : request(NULL), +#if USE_ADAPTATION + virgin_request(NULL), +#endif + #if ICAP_CLIENT icap(NULL), #endif @@ -141,6 +149,11 @@ char *request; +#if USE_ADAPTATION + char *virgin_request; +#endif + + #if ICAP_CLIENT char * icap; ///< last matching ICAP response header. #endif @@ -160,6 +173,10 @@ HierarchyLogEntry hier; HttpReply *reply; HttpRequest *request; +#if USE_ADAPTATION + HttpRequest *virgin_request; +#endif + #if ICAP_CLIENT /** \brief This subclass holds log info for ICAP part of request === modified file 'src/cf.data.pre' --- src/cf.data.pre 2010-01-02 04:32:46 +0000 +++ src/cf.data.pre 2010-01-12 18:55:43 +0000 @@ -2547,7 +2547,7 @@ when multiple ICAP transactions per HTTP transaction are supported. - If adaptation is enabled the following two codes become available: + If adaptation is enabled the following codes become available: adapt::sum_trs Summed adaptation transaction response times recorded as a comma-separated list in @@ -2567,6 +2567,10 @@ together. Instead, all transaction response times are recorded individually. + http::>hv The original (non adapted) HTTP request header. + Optional header name argument on the format + header[:[separator]element] + You can prefix adapt::*_trs format codes with adaptation service name in curly braces to record response time(s) specific to that service. For example: %{my_service}adapt::sum_trs === modified file 'src/client_side.cc' --- src/client_side.cc 2010-01-01 21:26:45 +0000 +++ src/client_side.cc 2010-01-12 18:54:44 +0000 @@ -463,6 +463,16 @@ request->header.packInto(&p); aLogEntry->headers.request = xstrdup(mb.buf); +#if USE_ADAPTATION + if (aLogEntry->virgin_request) { + packerClean(&p); + mb.reset(); + packerToMemInit(&p, &mb); + aLogEntry->virgin_request->header.packInto(&p); + aLogEntry->headers.virgin_request = xstrdup(mb.buf); + } +#endif + #if ICAP_CLIENT packerClean(&p); mb.reset(); === modified file 'src/client_side_request.cc' --- src/client_side_request.cc 2009-12-11 23:37:30 +0000 +++ src/client_side_request.cc 2010-01-12 18:54:44 +0000 @@ -1264,6 +1264,9 @@ #if USE_ADAPTATION if (!calloutContext->adaptation_acl_check_done) { calloutContext->adaptation_acl_check_done = true; + /*Save the original request for logging purposes*/ + calloutContext->http->al.virgin_request = HTTPMSGLOCK(request); + if (Adaptation::AccessCheck::Start( Adaptation::methodReqmod, Adaptation::pointPreCache, request, NULL, adaptationAclCheckDoneWrapper, calloutContext)) === modified file 'src/log/access_log.cc' --- src/log/access_log.cc 2009-12-22 01:12:53 +0000 +++ src/log/access_log.cc 2010-01-12 18:55:13 +0000 @@ -359,6 +359,12 @@ LFT_REQUEST_HEADER_ELEM, LFT_REQUEST_ALL_HEADERS, +#if USE_ADAPTATION + LFT_VIRGIN_REQUEST_HEADER, + LFT_VIRGIN_REQUEST_HEADER_ELEM, + LFT_VIRGIN_REQUEST_ALL_HEADERS, +#endif + LFT_REPLY_HEADER, LFT_REPLY_HEADER_ELEM, LFT_REPLY_ALL_HEADERS, @@ -512,6 +518,8 @@ {"hv", LFT_VIRGIN_REQUEST_HEADER}, + {">hv", LFT_VIRGIN_REQUEST_ALL_HEADERS}, {">h", LFT_REQUEST_HEADER}, {">h", LFT_REQUEST_ALL_HEADERS}, {"virgin_request) + sb = al->virgin_request->header.getByName(fmt->data.header.header); + + out = sb.termedBuf(); + + quote = 1; + + break; +#endif + case LFT_REPLY_HEADER: if (al->reply) sb = al->reply->header.getByName(fmt->data.header.header); @@ -954,6 +975,18 @@ break; +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER_ELEM: + if (al->virgin_request) + sb = al->virgin_request->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator); + + out = sb.termedBuf(); + + quote = 1; + + break; +#endif + case LFT_REPLY_HEADER_ELEM: if (al->reply) sb = al->reply->header.getByNameListMember(fmt->data.header.header, fmt->data.header.element, fmt->data.header.separator); @@ -971,6 +1004,15 @@ break; +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_ALL_HEADERS: + out = al->headers.virgin_request; + + quote = 1; + + break; +#endif + case LFT_REPLY_ALL_HEADERS: out = al->headers.reply; @@ -1393,6 +1435,10 @@ case LFT_ICAP_REP_HEADER: #endif +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER: +#endif + case LFT_REQUEST_HEADER: case LFT_REPLY_HEADER: @@ -1415,6 +1461,13 @@ case LFT_REQUEST_HEADER: lt->type = LFT_REQUEST_HEADER_ELEM; break; + +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER: + lt->type = LFT_VIRGIN_REQUEST_HEADER_ELEM; + break; +#endif + case LFT_REPLY_HEADER: lt->type = LFT_REPLY_HEADER_ELEM; break; @@ -1440,6 +1493,13 @@ case LFT_REQUEST_HEADER: lt->type = LFT_REQUEST_ALL_HEADERS; break; + +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER: + lt->type = LFT_VIRGIN_REQUEST_ALL_HEADERS; + break; +#endif + case LFT_REPLY_HEADER: lt->type = LFT_REPLY_ALL_HEADERS; break; @@ -1553,7 +1613,9 @@ case LFT_ICAP_REP_HEADER_ELEM: #endif case LFT_REQUEST_HEADER_ELEM: - +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER_ELEM: +#endif case LFT_REPLY_HEADER_ELEM: if (t->data.header.separator != ',') @@ -1567,6 +1629,11 @@ case LFT_REQUEST_HEADER_ELEM: type = LFT_REQUEST_HEADER_ELEM; break; +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_HEADER_ELEM: + type = LFT_VIRGIN_REQUEST_HEADER_ELEM; + break; +#endif case LFT_REPLY_HEADER_ELEM: type = LFT_REPLY_HEADER_ELEM; break; @@ -1588,7 +1655,9 @@ break; case LFT_REQUEST_ALL_HEADERS: - +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_ALL_HEADERS: +#endif case LFT_REPLY_ALL_HEADERS: #if ICAP_CLIENT @@ -1601,6 +1670,11 @@ case LFT_REQUEST_ALL_HEADERS: type = LFT_REQUEST_HEADER; break; +#if USE_ADAPTATION + case LFT_VIRGIN_REQUEST_ALL_HEADERS: + type = LFT_VIRGIN_REQUEST_HEADER; + break; +#endif case LFT_REPLY_ALL_HEADERS: type = LFT_REPLY_HEADER; break; @@ -2377,6 +2451,11 @@ safe_free(aLogEntry->headers.reply); safe_free(aLogEntry->cache.authuser); +#if USE_ADAPTATION + safe_free(aLogEntry->headers.virgin_request); + HTTPMSGUNLOCK(aLogEntry->virgin_request); +#endif + HTTPMSGUNLOCK(aLogEntry->reply); HTTPMSGUNLOCK(aLogEntry->request); #if ICAP_CLIENT