From 4c388ca3782476aec3da2e553f4c6d4e482106df Mon Sep 17 00:00:00 2001 From: Scott Cantor Date: Mon, 5 Apr 2010 18:23:33 +0000 Subject: [PATCH] Adjust caching support so Last-Modified-Date and ETag can both be used. --- xmltooling/util/CurlURLInputStream.cpp | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/xmltooling/util/CurlURLInputStream.cpp b/xmltooling/util/CurlURLInputStream.cpp index 92ac8b1..6824ded 100644 --- a/xmltooling/util/CurlURLInputStream.cpp +++ b/xmltooling/util/CurlURLInputStream.cpp @@ -89,6 +89,7 @@ namespace { break; } // append until whitespace + cacheTag->erase(); while (remaining > 0) { if (!isspace(*hdr)) { (*cacheTag) += *hdr++; @@ -97,6 +98,34 @@ namespace { } break; } + + if (!cacheTag->empty()) + *cacheTag = "If-None-Match: " + *cacheTag; + } + else if (cacheTag->empty() && strncmp(hdr, "Last-Modified:", 14) == 0) { + hdr += 14; + size_t remaining = nmemb - 14; + // skip leading spaces + while (remaining > 0) { + if (*hdr == ' ') { + ++hdr; + --remaining; + continue; + } + break; + } + // append until whitespace + while (remaining > 0) { + if (!isspace(*hdr)) { + (*cacheTag) += *hdr++; + --remaining; + continue; + } + break; + } + + if (!cacheTag->empty()) + *cacheTag = "If-Modified-Since: " + *cacheTag; } return nmemb; @@ -248,9 +277,7 @@ void CurlURLInputStream::init(const DOMElement* e) if (fCacheTag) { // Outgoing tag. if (!fCacheTag->empty()) { - string hdr("If-None-Match: "); - hdr += *fCacheTag; - fHeaders = curl_slist_append(fHeaders, hdr.c_str()); + fHeaders = curl_slist_append(fHeaders, fCacheTag->c_str()); curl_easy_setopt(fEasy, CURLOPT_HTTPHEADER, fHeaders); } // Incoming tag. -- 2.1.4