You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by am...@apache.org on 2011/03/09 22:43:59 UTC

svn commit: r1080015 - in /trafficserver/traffic/trunk/proxy: CacheControl.cc CacheControl.h http/HttpTransact.cc

Author: amc
Date: Wed Mar  9 21:43:58 2011
New Revision: 1080015

URL: http://svn.apache.org/viewvc?rev=1080015&view=rev
Log:
TS-700

Modified:
    trafficserver/traffic/trunk/proxy/CacheControl.cc
    trafficserver/traffic/trunk/proxy/CacheControl.h
    trafficserver/traffic/trunk/proxy/http/HttpTransact.cc

Modified: trafficserver/traffic/trunk/proxy/CacheControl.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/CacheControl.cc?rev=1080015&r1=1080014&r2=1080015&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/CacheControl.cc (original)
+++ trafficserver/traffic/trunk/proxy/CacheControl.cc Wed Mar  9 21:43:58 2011
@@ -53,6 +53,8 @@
 #ifndef INK_NO_ACL
 static const char modulePrefix[] = "[CacheControl]";
 
+# define TWEAK_CACHE_RESPONSES_TO_COOKIES "cache-responses-to-cookies"
+
 static const char *CC_directive_str[CC_NUM_TYPES] = {
   "INVALID",
   "REVALIDATE_AFTER",
@@ -241,6 +243,10 @@ CacheControlRecord::Print()
     printf("\t\tDirective: INVALID\n");
     break;
   }
+  if (cache_responses_to_cookies >= 0)
+    printf("\t\t  - " TWEAK_CACHE_RESPONSES_TO_COOKIES ":%d\n",
+      cache_responses_to_cookies
+    );
   ControlBase::Print();
 }
 
@@ -266,6 +272,37 @@ CacheControlRecord::Init(matcher_line * 
 
   this->line_num = line_info->line_num;
 
+  // First pass for optional tweaks.
+  for (int i = 0; i < MATCHER_MAX_TOKENS && line_info->num_el ; ++i) {
+    bool used = false;
+    label = line_info->line[0][i];
+    val = line_info->line[1][i];
+    if (!label) continue;
+
+    if (strcasecmp(label, TWEAK_CACHE_RESPONSES_TO_COOKIES) == 0) {
+      char* ptr = 0;
+      int v = strtol(val, &ptr, 0);
+      if (!ptr || v < 0 || v > 4) {
+        errBuf = static_cast<char*>(xmalloc(errBufLen * sizeof(char)));
+        snprintf(errBuf, errBufLen,
+          "Value for " TWEAK_CACHE_RESPONSES_TO_COOKIES
+          " must be an integer in the range 0..4"
+        );
+        return errBuf;
+      } else {
+        cache_responses_to_cookies = v;
+      }
+      used = true;
+    }
+
+    // Clip pair if used.
+    if (used) {
+      line_info->line[0][i] = 0;
+      --(line_info->num_el);
+    }
+  }
+
+  // Now look for the directive.
   for (int i = 0; i < MATCHER_MAX_TOKENS; i++) {
     label = line_info->line[0][i];
     val = line_info->line[1][i];
@@ -438,8 +475,21 @@ CacheControlRecord::UpdateMatch(CacheCon
     break;
   }
 
+  if (cache_responses_to_cookies >= 0)
+    result->cache_responses_to_cookies = cache_responses_to_cookies;
+
   if (match == true) {
-    Debug("cache_control", "Matched with for %s at line %d", CC_directive_str[this->directive], this->line_num);
+    char crtc_debug[80];
+    if (result->cache_responses_to_cookies >= 0)
+      sprintf(crtc_debug, " [" TWEAK_CACHE_RESPONSES_TO_COOKIES "=%d]",
+        result->cache_responses_to_cookies
+      );
+    else
+      crtc_debug[0] = 0;
+      
+    Debug("cache_control", "Matched with for %s at line %d%s",
+      CC_directive_str[this->directive], this->line_num, crtc_debug
+    );
   }
 }
 #else

Modified: trafficserver/traffic/trunk/proxy/CacheControl.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/CacheControl.h?rev=1080015&r1=1080014&r2=1080015&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/CacheControl.h (original)
+++ trafficserver/traffic/trunk/proxy/CacheControl.h Wed Mar  9 21:43:58 2011
@@ -81,6 +81,7 @@ public:
   bool ignore_client_no_cache;
   bool ignore_server_no_cache;
   bool ignore_client_cc_max_age;
+  int cache_responses_to_cookies; ///< Override for caching cookied responses.
 //  bool cache_auth_content;
 
   // Data for internal use only
@@ -109,6 +110,7 @@ CacheControlResult::CacheControlResult()
     ignore_client_no_cache(false),
     ignore_server_no_cache(false),
     ignore_client_cc_max_age(true),
+    cache_responses_to_cookies(-1), // do not change value
     //cache_auth_content(false),
     reval_line(-1),
     never_line(-1),
@@ -125,6 +127,7 @@ public:
   CacheControlRecord();
   CacheControlType directive;
   int time_arg;
+  int cache_responses_to_cookies;
   char *Init(matcher_line * line_info);
   inkcoreapi void UpdateMatch(CacheControlResult * result, RD * rdata);
   void Print();
@@ -133,6 +136,7 @@ public:
 inline
 CacheControlRecord::CacheControlRecord()
   : ControlBase(), directive(CC_INVALID), time_arg(0)
+                  , cache_responses_to_cookies(-1)
 {}
 
 //

Modified: trafficserver/traffic/trunk/proxy/http/HttpTransact.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/HttpTransact.cc?rev=1080015&r1=1080014&r2=1080015&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/HttpTransact.cc (original)
+++ trafficserver/traffic/trunk/proxy/http/HttpTransact.cc Wed Mar  9 21:43:58 2011
@@ -190,6 +190,10 @@ update_cache_control_information_from_co
     s->cache_info.directives.does_client_permit_lookup = false;
     s->cache_info.directives.does_client_permit_storing = false;
   }
+
+  // Less than 0 means it wasn't overridden, so leave it alone.
+  if (s->cache_control.cache_responses_to_cookies >= 0)
+    s->txn_conf->cache_responses_to_cookies = s->cache_control.cache_responses_to_cookies;
 }
 
 inline bool