You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2014/05/30 23:05:11 UTC

[39/50] [abbrv] git commit: TS-2834 header_rewrite: internal transaction and client IP conditions

TS-2834 header_rewrite: internal transaction and client IP conditions


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

Branch: refs/heads/5.0.x
Commit: 05f64b6ebcf35b1916ff6663fac57e4d5b3049fa
Parents: 52682da
Author: Manjesh Nilange <ma...@yahoo.com>
Authored: Thu May 22 15:01:55 2014 -0700
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Thu May 29 14:29:54 2014 -0600

----------------------------------------------------------------------
 plugins/header_rewrite/conditions.cc | 49 ++++++++++++++++++++++++++++++-
 plugins/header_rewrite/conditions.h  | 19 ++++++++++++
 plugins/header_rewrite/factory.cc    |  4 +++
 3 files changed, 71 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/05f64b6e/plugins/header_rewrite/conditions.cc
----------------------------------------------------------------------
diff --git a/plugins/header_rewrite/conditions.cc b/plugins/header_rewrite/conditions.cc
index 9010152..721a781 100644
--- a/plugins/header_rewrite/conditions.cc
+++ b/plugins/header_rewrite/conditions.cc
@@ -21,13 +21,13 @@
 //
 #include <sys/time.h>
 #include <unistd.h>
+#include <arpa/inet.h>
 
 #include "ts/ts.h"
 
 #include "conditions.h"
 #include "lulu.h"
 
-
 // ConditionStatus
 void
 ConditionStatus::initialize(Parser& p)
@@ -445,3 +445,50 @@ bool ConditionCookie::eval(const Resources& res)
   TSDebug(PLUGIN_NAME, "Evaluating COOKIE(%s): %s: rval: %d", _qualifier.c_str(), s.c_str(), rval);
   return rval;
 }
+
+bool ConditionInternalTransaction::eval(const Resources& res)
+{
+  return TSHttpIsInternalRequest(res.txnp) == TS_SUCCESS;
+}
+
+void ConditionClientIp::initialize(Parser &p)
+{
+  Condition::initialize(p);
+
+  Matchers<std::string>* match = new Matchers<std::string>(_cond_op);
+  match->set(p.get_arg());
+
+  _matcher = match;
+}
+
+bool ConditionClientIp::eval(const Resources &res)
+{
+  std::string s;
+  append_value(s, res);
+  bool rval = static_cast<const Matchers<std::string>*>(_matcher)->test(s);
+  return rval;
+}
+
+void ConditionClientIp::append_value(std::string &s, const Resources &res)
+{
+  const sockaddr *sockaddress = TSHttpTxnClientAddrGet(res.txnp);
+  if (sockaddress == NULL) {
+    return;
+  }
+
+  char buf[INET6_ADDRSTRLEN] = { 0 };
+
+  if (sockaddress->sa_family == AF_INET)
+  {
+    inet_ntop(AF_INET, &(((struct sockaddr_in *) sockaddress)->sin_addr), buf, INET_ADDRSTRLEN);
+  }
+  else if (sockaddress->sa_family == AF_INET6)
+  {
+    inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) sockaddress)->sin6_addr), buf, INET6_ADDRSTRLEN);
+  }
+  else
+  {
+    return;
+  }
+  s.append(buf);
+}

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/05f64b6e/plugins/header_rewrite/conditions.h
----------------------------------------------------------------------
diff --git a/plugins/header_rewrite/conditions.h b/plugins/header_rewrite/conditions.h
index deb3142..55e0106 100644
--- a/plugins/header_rewrite/conditions.h
+++ b/plugins/header_rewrite/conditions.h
@@ -330,4 +330,23 @@ private:
   TSMutex _mutex;
 };
 
+class ConditionInternalTransaction : public Condition
+{
+public:
+  void append_value(std::string &/* s ATS_UNUSED */, const Resources &/* res ATS_UNUSED */) { }
+
+protected:
+  bool eval(const Resources &res);
+};
+
+class ConditionClientIp : public Condition
+{
+public:
+  void initialize(Parser& p);
+  void append_value(std::string &s, const Resources &res);
+
+protected:
+  bool eval(const Resources &res);
+};
+
 #endif // __CONDITIONS_H

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/05f64b6e/plugins/header_rewrite/factory.cc
----------------------------------------------------------------------
diff --git a/plugins/header_rewrite/factory.cc b/plugins/header_rewrite/factory.cc
index 66087fc..c1b8a2e 100644
--- a/plugins/header_rewrite/factory.cc
+++ b/plugins/header_rewrite/factory.cc
@@ -107,6 +107,10 @@ condition_factory(const std::string& cond)
     c = new ConditionUrl(true);
   } else if (c_name == "DBM") {
     c = new ConditionDBM();
+  } else if (c_name == "INTERNAL-TRANSACTION") {
+    c = new ConditionInternalTransaction();
+  } else if (c_name == "%<chi>") {
+    c = new ConditionClientIp();
   } else {
     TSError("%s: unknown condition: %s", PLUGIN_NAME, c_name.c_str());
     return NULL;