Implement libecap::RequestLine::uri() to return full Request-URI instead of URL path. Niether is perfect because the actual request may have full URI or a path, but Squid does not really keep that information. This change makes our eCAP implementation consistent with our ICAP implementation. Note that ICAP (RFC 3507) examples show URL paths rather than full URIs being sent to ICAP servers. === modified file 'src/adaptation/ecap/MessageRep.cc' --- src/adaptation/ecap/MessageRep.cc 2011-02-18 23:58:13 +0000 +++ src/adaptation/ecap/MessageRep.cc 2011-02-23 15:20:18 +0000 @@ -194,42 +194,44 @@ Adaptation::Ecap::RequestLineRep::RequestLineRep(HttpRequest &aMessage): FirstLineRep(aMessage), theMessage(aMessage) { } void Adaptation::Ecap::RequestLineRep::uri(const Area &aUri) { // TODO: if method is not set, urlPath will assume it is not connect; // Can we change urlParse API to remove the method parameter? // TODO: optimize: urlPath should take constant URL buffer char *buf = xstrdup(aUri.toString().c_str()); const bool ok = urlParse(theMessage.method, buf, &theMessage); xfree(buf); Must(ok); } Adaptation::Ecap::RequestLineRep::Area Adaptation::Ecap::RequestLineRep::uri() const { - return Area::FromTempBuffer(theMessage.urlpath.rawBuf(), - theMessage.urlpath.size()); + const char *fullUrl = urlCanonical(&theMessage); + Must(fullUrl); + // optimize: avoid copying by having an Area::Detail that locks theMessage + return Area::FromTempBuffer(fullUrl, strlen(fullUrl)); } void Adaptation::Ecap::RequestLineRep::method(const Name &aMethod) { if (aMethod.assignedHostId()) { const int id = aMethod.hostId(); Must(METHOD_NONE < id && id < METHOD_ENUM_END); Must(id != METHOD_OTHER); theMessage.method = HttpRequestMethod(static_cast<_method_t>(id)); } else { const std::string &image = aMethod.image(); theMessage.method = HttpRequestMethod(image.data(), image.data() + image.size()); } } Adaptation::Ecap::RequestLineRep::Name Adaptation::Ecap::RequestLineRep::method() const {