=== modified file 'src/AccessLogEntry.h' --- src/AccessLogEntry.h 2009-12-22 01:12:53 +0000 +++ src/AccessLogEntry.h 2010-01-24 18:45:24 +0000 @@ -47,7 +47,11 @@ { public: - AccessLogEntry() : url(NULL) , reply(NULL), request(NULL) {} + AccessLogEntry() : url(NULL) , reply(NULL), request(NULL), +#if USE_ADAPTATION + adapted_request(NULL) +#endif + {} const char *url; @@ -134,6 +138,10 @@ public: Headers() : request(NULL), +#if USE_ADAPTATION + adapted_request(NULL), +#endif + #if ICAP_CLIENT icap(NULL), #endif @@ -141,6 +149,11 @@ char *request; +#if USE_ADAPTATION + char *adapted_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 *adapted_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-21 12:48:36 +0000 +++ src/cf.data.pre 2010-01-24 21:53:21 +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::>ha The adapted HTTP request headers. + 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-13 01:13:17 +0000 +++ src/client_side.cc 2010-01-24 21:47:08 +0000 @@ -461,7 +461,23 @@ mb.init(); packerToMemInit(&p, &mb); request->header.packInto(&p); +#if USE_ADAPTATION + //if Adaptation this is the adapted request + aLogEntry->headers.adapted_request = xstrdup(mb.buf); +#else aLogEntry->headers.request = xstrdup(mb.buf); +#endif + +#if USE_ADAPTATION + // if Adaptation then the virgin request is saved to aLogEntry->request + if (aLogEntry->request) { + packerClean(&p); + mb.reset(); + packerToMemInit(&p, &mb); + aLogEntry->request->header.packInto(&p); + aLogEntry->headers.request = xstrdup(mb.buf); + } +#endif #if ICAP_CLIENT packerClean(&p); @@ -559,7 +575,11 @@ if (!Config.accessList.log || checklist->fastCheck()) { if (request) +#if USE_ADAPTATION + al.adapted_request = HTTPMSGLOCK(request); +#else al.request = HTTPMSGLOCK(request); +#endif accessLogLog(&al, checklist); updateCounters(); === modified file 'src/client_side_request.cc' --- src/client_side_request.cc 2010-01-22 01:13:11 +0000 +++ src/client_side_request.cc 2010-01-24 18:37:20 +0000 @@ -1266,6 +1266,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.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-24 18:44:39 +0000 @@ -359,6 +359,12 @@ LFT_REQUEST_HEADER_ELEM, LFT_REQUEST_ALL_HEADERS, +#if USE_ADAPTATION + LFT_ADAPTED_REQUEST_HEADER, + LFT_ADAPTED_REQUEST_HEADER_ELEM, + LFT_ADAPTED_REQUEST_ALL_HEADERS, +#endif + LFT_REPLY_HEADER, LFT_REPLY_HEADER_ELEM, LFT_REPLY_ALL_HEADERS, @@ -512,6 +518,10 @@ {"ha", LFT_ADAPTED_REQUEST_HEADER}, + {">ha", LFT_ADAPTED_REQUEST_ALL_HEADERS}, +#endif {">h", LFT_REQUEST_HEADER}, {">h", LFT_REQUEST_ALL_HEADERS}, {"request) + sb = al->adapted_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 +977,18 @@ break; +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER_ELEM: + if (al->adapted_request) + sb = al->adapted_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 +1006,15 @@ break; +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_ALL_HEADERS: + out = al->headers.adapted_request; + + quote = 1; + + break; +#endif + case LFT_REPLY_ALL_HEADERS: out = al->headers.reply; @@ -1393,6 +1437,10 @@ case LFT_ICAP_REP_HEADER: #endif +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER: +#endif + case LFT_REQUEST_HEADER: case LFT_REPLY_HEADER: @@ -1415,6 +1463,13 @@ case LFT_REQUEST_HEADER: lt->type = LFT_REQUEST_HEADER_ELEM; break; + +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER: + lt->type = LFT_ADAPTED_REQUEST_HEADER_ELEM; + break; +#endif + case LFT_REPLY_HEADER: lt->type = LFT_REPLY_HEADER_ELEM; break; @@ -1440,6 +1495,13 @@ case LFT_REQUEST_HEADER: lt->type = LFT_REQUEST_ALL_HEADERS; break; + +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER: + lt->type = LFT_ADAPTED_REQUEST_ALL_HEADERS; + break; +#endif + case LFT_REPLY_HEADER: lt->type = LFT_REPLY_ALL_HEADERS; break; @@ -1553,7 +1615,9 @@ case LFT_ICAP_REP_HEADER_ELEM: #endif case LFT_REQUEST_HEADER_ELEM: - +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER_ELEM: +#endif case LFT_REPLY_HEADER_ELEM: if (t->data.header.separator != ',') @@ -1567,6 +1631,11 @@ case LFT_REQUEST_HEADER_ELEM: type = LFT_REQUEST_HEADER_ELEM; break; +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_HEADER_ELEM: + type = LFT_ADAPTED_REQUEST_HEADER_ELEM; + break; +#endif case LFT_REPLY_HEADER_ELEM: type = LFT_REPLY_HEADER_ELEM; break; @@ -1588,7 +1657,9 @@ break; case LFT_REQUEST_ALL_HEADERS: - +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_ALL_HEADERS: +#endif case LFT_REPLY_ALL_HEADERS: #if ICAP_CLIENT @@ -1601,6 +1672,11 @@ case LFT_REQUEST_ALL_HEADERS: type = LFT_REQUEST_HEADER; break; +#if USE_ADAPTATION + case LFT_ADAPTED_REQUEST_ALL_HEADERS: + type = LFT_ADAPTED_REQUEST_HEADER; + break; +#endif case LFT_REPLY_ALL_HEADERS: type = LFT_REPLY_HEADER; break; @@ -2377,6 +2453,11 @@ safe_free(aLogEntry->headers.reply); safe_free(aLogEntry->cache.authuser); +#if USE_ADAPTATION + safe_free(aLogEntry->headers.adapted_request); + HTTPMSGUNLOCK(aLogEntry->adapted_request); +#endif + HTTPMSGUNLOCK(aLogEntry->reply); HTTPMSGUNLOCK(aLogEntry->request); #if ICAP_CLIENT