You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zy...@apache.org on 2013/10/31 17:42:55 UTC

git commit: TS-2008: Cache control with multiple suffixes.

Updated Branches:
  refs/heads/master d1006996b -> 84634608b


TS-2008: Cache control with multiple suffixes.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/84634608
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/84634608
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/84634608

Branch: refs/heads/master
Commit: 84634608b3c4cb87cc7b94ca81d57000c3191ef5
Parents: d100699
Author: bettydramit <b1...@gmail.com>
Authored: Fri Nov 1 00:41:06 2013 +0800
Committer: Zhao Yongming <mi...@gmail.com>
Committed: Fri Nov 1 00:42:15 2013 +0800

----------------------------------------------------------------------
 CHANGES              |  3 +++
 proxy/ControlBase.cc | 44 ++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 43 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/84634608/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 18a67f1..9295d01 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,9 @@
 Changes with Apache Traffic Server 4.1.0
 
 
+  *) [TS-2208] Cache control with multiple suffixes.
+    Author: bettydramit <b1...@gmail.com>
+
   *) [TS-2247] ua close time in milestone may not set.
    Author: Gang Li
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/84634608/proxy/ControlBase.cc
----------------------------------------------------------------------
diff --git a/proxy/ControlBase.cc b/proxy/ControlBase.cc
index 0a1953e..3335616 100644
--- a/proxy/ControlBase.cc
+++ b/proxy/ControlBase.cc
@@ -364,6 +364,38 @@ void TextMod::set(const char * value) {
   this->text.set(ats_strdup(value), strlen(value));
 }
 
+struct MultiTextMod : public ControlBase::Modifier {
+  Vec<ts::Buffer> text_vec;
+  MultiTextMod();
+  ~MultiTextMod();
+
+  // Copy the value to the MultiTextMod buffer.
+  void set(char * value);
+
+  // Calls name() which the subclass must provide.
+  virtual void print(FILE* f) const;
+};
+
+MultiTextMod::MultiTextMod() {}
+MultiTextMod::~MultiTextMod() {
+  text_vec.clear();
+}
+
+void MultiTextMod::print(FILE* f) const {
+  for_Vec(ts::Buffer, text_iter, this->text_vec)
+    fprintf(f, "%s=%*s ", this->name(),static_cast<int>(text_iter.size()),text_iter.data());
+}
+
+void MultiTextMod::set(char * value) {
+  Tokenizer rangeTok(",");
+  int num_tok = rangeTok.Initialize(value, SHARE_TOKS);
+  for(int i = 0; i < num_tok; i++){
+    ts::Buffer text(0);
+    text.set(ats_strdup(rangeTok[i]), strlen(rangeTok[i]));
+    this->text_vec.push_back(text);
+  }
+}
+
 // ----------
 struct MethodMod : public TextMod {
   static char const * const NAME;
@@ -429,7 +461,7 @@ PrefixMod::make(char * value, char const ** /* error ATS_UNUSED */) {
 }
 
 // ----------
-struct SuffixMod : public TextMod {
+struct SuffixMod : public MultiTextMod {
   static char const * const NAME;
 
   virtual Type type() const;
@@ -443,9 +475,13 @@ char const * SuffixMod::name() const { return NAME; }
 bool SuffixMod::check(HttpRequestData* req) const {
   int path_len;
   char const* path = req->hdr->url_get()->path_get(&path_len);
-  return path_len >= static_cast<int>(text.size())
-    && 0 == strncasecmp(path + path_len - text.size(), text.data(), text.size())
-    ;
+  if(1 == static_cast<int>(this->text_vec.count()) && 1 == static_cast<int>(this->text_vec[0].size()) && 0 == strcmp(this->text_vec[0].data(),"*"))
+    return true;
+  for_Vec(ts::Buffer, text_iter, this->text_vec){
+    if (path_len >= static_cast<int>(text_iter.size()) && 0 == strncasecmp(path + path_len - text_iter.size(), text_iter.data(), text_iter.size()))
+      return true;
+  }
+  return false;
 }
 SuffixMod*
 SuffixMod::make(char * value, char const ** /* error ATS_UNUSED */) {