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 2010/11/30 17:33:40 UTC

svn commit: r1040621 - in /trafficserver/traffic/trunk: ./ libinktomi++/ librecords/ proxy/ proxy/api/ts/ proxy/http2/ proxy/mgmt2/ proxy/mgmt2/api2/ proxy/mgmt2/cli/ proxy/mgmt2/cluster/ proxy/mgmt2/stats/ proxy/mgmt2/utils/ proxy/mgmt2/web2/ proxy/ts...

Author: amc
Date: Tue Nov 30 16:33:39 2010
New Revision: 1040621

URL: http://svn.apache.org/viewvc?rev=1040621&view=rev
Log:
Adding WCCP support.
Adding TsConfig library.

Added:
    trafficserver/traffic/trunk/proxy/api/ts/TsException.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/api/ts/TsException.h
    trafficserver/traffic/trunk/proxy/tsconfig/
      - copied from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/
    trafficserver/traffic/trunk/proxy/tsconfig/Errata.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/Errata.cc
    trafficserver/traffic/trunk/proxy/tsconfig/Errata.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/Errata.h
    trafficserver/traffic/trunk/proxy/tsconfig/IntrusivePtr.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/IntrusivePtr.h
    trafficserver/traffic/trunk/proxy/tsconfig/Makefile.am
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/Makefile.am
    trafficserver/traffic/trunk/proxy/tsconfig/NumericType.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/NumericType.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsBuffer.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsBuffer.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsBuilder.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsBuilder.cc
    trafficserver/traffic/trunk/proxy/tsconfig/TsBuilder.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsBuilder.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsConfig.flex
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsConfig.flex
    trafficserver/traffic/trunk/proxy/tsconfig/TsConfig.y
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsConfig.y
    trafficserver/traffic/trunk/proxy/tsconfig/TsConfigLexer.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsConfigLexer.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsConfigParseEvents.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsConfigParseEvents.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsConfigTypes.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsConfigTypes.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsErrataUtil.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsErrataUtil.cc
    trafficserver/traffic/trunk/proxy/tsconfig/TsErrataUtil.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsErrataUtil.h
    trafficserver/traffic/trunk/proxy/tsconfig/TsValue.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsValue.cc
    trafficserver/traffic/trunk/proxy/tsconfig/TsValue.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/tsconfig/TsValue.h
    trafficserver/traffic/trunk/proxy/wccp/
      - copied from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/
    trafficserver/traffic/trunk/proxy/wccp/Makefile.am
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/Makefile.am
    trafficserver/traffic/trunk/proxy/wccp/Wccp.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/Wccp.h
    trafficserver/traffic/trunk/proxy/wccp/WccpConfig.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpConfig.cc
    trafficserver/traffic/trunk/proxy/wccp/WccpEndPoint.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpEndPoint.cc
    trafficserver/traffic/trunk/proxy/wccp/WccpLocal.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpLocal.h
    trafficserver/traffic/trunk/proxy/wccp/WccpMeta.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpMeta.h
    trafficserver/traffic/trunk/proxy/wccp/WccpMsg.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpMsg.cc
    trafficserver/traffic/trunk/proxy/wccp/WccpStatic.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpStatic.cc
    trafficserver/traffic/trunk/proxy/wccp/WccpUtil.h
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/WccpUtil.h
    trafficserver/traffic/trunk/proxy/wccp/wccp-test-cache.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/wccp-test-cache.cc
    trafficserver/traffic/trunk/proxy/wccp/wccp-test-router.cc
      - copied unchanged from r1040544, trafficserver/traffic/branches/wccp/proxy/wccp/wccp-test-router.cc
Modified:
    trafficserver/traffic/trunk/   (props changed)
    trafficserver/traffic/trunk/configure.ac
    trafficserver/traffic/trunk/libinktomi++/ink_defs.h
    trafficserver/traffic/trunk/libinktomi++/ink_resource.h
    trafficserver/traffic/trunk/librecords/Makefile.am
    trafficserver/traffic/trunk/proxy/InkAPI.cc
    trafficserver/traffic/trunk/proxy/Makefile.am
    trafficserver/traffic/trunk/proxy/http2/HttpConfig.cc
    trafficserver/traffic/trunk/proxy/http2/HttpConfig.h
    trafficserver/traffic/trunk/proxy/http2/HttpSM.cc
    trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc
    trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.cc
    trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.h
    trafficserver/traffic/trunk/proxy/mgmt2/Main.cc
    trafficserver/traffic/trunk/proxy/mgmt2/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc
    trafficserver/traffic/trunk/proxy/mgmt2/api2/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/cli/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/cluster/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/stats/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/utils/Makefile.am
    trafficserver/traffic/trunk/proxy/mgmt2/web2/Makefile.am

Propchange: trafficserver/traffic/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Nov 30 16:33:39 2010
@@ -1,2 +1,3 @@
 /incubator/trafficserver/traffic/branches/dev:891823-915885
 /trafficserver/traffic/branches/ts-291:965529-991993
+/trafficserver/traffic/branches/wccp:1021790-1040544

Modified: trafficserver/traffic/trunk/configure.ac
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/configure.ac?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/configure.ac (original)
+++ trafficserver/traffic/trunk/configure.ac Tue Nov 30 16:33:39 2010
@@ -1244,6 +1244,8 @@ AC_CONFIG_FILES([proxy/mgmt2/tools/Makef
 AC_CONFIG_FILES([proxy/mgmt2/utils/Makefile])
 AC_CONFIG_FILES([proxy/mgmt2/web2/Makefile])
 AC_CONFIG_FILES([proxy/stats/Makefile])
+AC_CONFIG_FILES([proxy/tsconfig/Makefile])
+AC_CONFIG_FILES([proxy/wccp/Makefile])
 AC_CONFIG_FILES([example/Makefile])
 # example plugins
 AC_CONFIG_FILES([example/add-header/Makefile])

Modified: trafficserver/traffic/trunk/libinktomi++/ink_defs.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_defs.h?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_defs.h (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_defs.h Tue Nov 30 16:33:39 2010
@@ -85,4 +85,10 @@ extern int on;
 int ink_sys_name_release(char *name, int namelen, char *release, int releaselen);
 int ink_number_of_processors();
 
+/** Constants.
+ */
+namespace ts {
+  static const int NO_FD = -1; ///< No or invalid file descriptor.
+}
+
 #endif /*__ink_defs_h*/

Modified: trafficserver/traffic/trunk/libinktomi++/ink_resource.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/libinktomi%2B%2B/ink_resource.h?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/libinktomi++/ink_resource.h (original)
+++ trafficserver/traffic/trunk/libinktomi++/ink_resource.h Tue Nov 30 16:33:39 2010
@@ -120,6 +120,85 @@ void *_xfree_null(void *ptr);
 
 void xdump(void);
 
+#if defined(__cplusplus)
+/** Locally scoped holder for a chunk of memory allocated via these functions.
+    If this pointer is assigned the current memory (if any) is freed.
+    The memory is also freed when the object is destructed. This makes
+    handling temporary memory in a function more robust.
+
+    @internal A poor substitute for a real shared pointer copy on write
+    class but one step at a time. It's better than doing this by
+    hand every time.
+*/
+template <
+  typename T ///< Type of pointer.
+> class xptr {
+public:
+  typedef xptr self; ///< Self reference type.
+  /// Default constructor, zero initialized.
+  xptr() : m_ptr(0) { }
+  /// Construct from allocated memory.
+  /// @note @a ptr must refer to memory allocated @c xmalloc.
+  explicit xptr(T* ptr) : m_ptr(ptr) { }
+  /// Construct and initialized with memory for @a n instances of @a T.
+  explicit xptr(size_t n) : m_ptr(xmalloc(sizeof(T) * n)) { }
+  /// Destructor - free memory held by this instance.
+  ~xptr() { xfree(m_ptr); }
+  /// Assign memory.
+  /// @note @a ptr must be allocated via @c xmalloc.
+  self& operator = (T* ptr) {
+    xfree(m_ptr);
+    m_ptr = ptr;
+    return *this;
+  }
+  /// Auto convert to a raw pointer.
+  operator T* () { return m_ptr; }
+  /// Auto conver to raw pointer.
+  operator T const* () const { return m_ptr; }
+  /** Release memory from control of this instance.
+
+      @note Although direct assignment is forbidden due to the
+      non-obvious semantics, a pointer can be moved (@b not copied) from
+      one instance to another using this method.
+      @code
+      new_ptr = old_ptr.release();
+      @endcode
+      This is by design so any such transfer is always explicit.
+  */
+  T* release() {
+    T* zret = m_ptr;
+    m_ptr = 0;
+    return zret;
+  }
+private:
+  T* m_ptr; ///< Pointer to allocated memory.
+  /// Copy constructor - forbidden.
+  xptr(self const& that);
+  /// Self assignment - forbidden.
+  self& operator = (self const& that);
+};
+
+// Special operators for xptr<char>
+/** Combine two strings as file paths.
+    Trailing and leading separators for @a lhs and @a rhs respectively
+    are handled to yield exactly one separator.
+    @return A newly @x xmalloc string of the combined paths.
+*/
+inline char* path_join (xptr<char> const& lhs, xptr<char> const& rhs) {
+  size_t ln = strlen(lhs);
+  size_t rn = strlen(rhs);
+  char const* rptr = rhs; // May need to be modified.
+  if (ln && lhs[ln-1] == '/') --ln; // drop trailing separator.
+  if (rn && *rptr == '/') --rn, ++rptr; // drop leading separator.
+  char* x = static_cast<char*>(xmalloc(ln + rn + 2));
+  memcpy(x, lhs, ln);
+  x[ln] = '/';
+  memcpy(x + ln + 1,  rptr, rn);
+  x[ln+rn+1] = 0; // terminate string.
+  return x;
+}
+
+#endif // c++
 
 #endif /* TRACK_MEMORY */
 

Modified: trafficserver/traffic/trunk/librecords/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/librecords/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/librecords/Makefile.am (original)
+++ trafficserver/traffic/trunk/librecords/Makefile.am Tue Nov 30 16:33:39 2010
@@ -25,6 +25,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/web2 \
   -I$(top_srcdir)/proxy/mgmt2/api2/include \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/utils
 
 noinst_LIBRARIES = libreclocal.a librecprocess.a

Modified: trafficserver/traffic/trunk/proxy/InkAPI.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/InkAPI.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPI.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPI.cc Tue Nov 30 16:33:39 2010
@@ -351,6 +351,9 @@ HttpAPIHooks *http_global_hooks = NULL;
 ConfigUpdateCbTable *global_config_cbs = NULL;
 
 static char traffic_server_version[128] = "";
+static int ts_major_version = 0;
+static int ts_minor_version = 0;
+static int ts_patch_version = 0;
 
 static ClassAllocator<APIHook> apiHookAllocator("apiHookAllocator");
 static ClassAllocator<INKContInternal> INKContAllocator("INKContAllocator");
@@ -1737,6 +1740,11 @@ api_init()
 
     // Setup the version string for returning to plugins
     ink_strncpy(traffic_server_version, appVersionInfo.VersionStr, sizeof(traffic_server_version));
+    // Extract the elements.
+    if (sscanf(traffic_server_version, "%d.%d.%d", &ts_major_version, &ts_minor_version, &ts_patch_version) != 3) {
+      Warning("Unable to parse traffic server version string '%s'\n", traffic_server_version);
+    }
+
   }
 }
 
@@ -1818,6 +1826,9 @@ TSTrafficServerVersionGet(void)
 {
   return traffic_server_version;
 }
+int INKTrafficServerVersionGetMajor() { return ts_major_version; }
+int INKTrafficServerVersionGetMinor() { return ts_minor_version; }
+int INKTrafficServerVersionGetPatch() { return ts_patch_version; }
 
 const char *
 TSPluginDirGet(void)

Modified: trafficserver/traffic/trunk/proxy/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/Makefile.am Tue Nov 30 16:33:39 2010
@@ -22,7 +22,7 @@ noinst_LIBRARIES = libTrafficServerStand
 bin_PROGRAMS =
 noinst_PROGRAMS =
 else
-SUBDIRS = congest http2 hdrs logging mgmt2 config stats
+SUBDIRS = congest http2 hdrs logging tsconfig wccp mgmt2 config stats
 noinst_LIBRARIES =
 bin_PROGRAMS = \
   traffic_server \

Modified: trafficserver/traffic/trunk/proxy/http2/HttpConfig.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpConfig.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpConfig.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpConfig.cc Tue Nov 30 16:33:39 2010
@@ -1168,6 +1168,7 @@ HttpConfig::startup()
   HttpEstablishStaticConfigLongLong(c.uncacheable_requests_bypass_parent,
                                     "proxy.config.http.uncacheable_requests_bypass_parent");
   HttpEstablishStaticConfigLongLong(c.no_origin_server_dns, "proxy.config.http.no_origin_server_dns");
+  HttpEstablishStaticConfigLongLong(c.use_client_target_addr, "proxy.config.http.use_client_target_addr");
   HttpEstablishStaticConfigLongLong(c.maintain_pristine_host_hdr, "proxy.config.url_remap.pristine_host_hdr");
 
   HttpEstablishStaticConfigLongLong(c.snarf_username_from_authorization,
@@ -1504,6 +1505,7 @@ HttpConfig::reconfigure()
   params->no_dns_forward_to_parent = INT_TO_BOOL(m_master.no_dns_forward_to_parent);
   params->uncacheable_requests_bypass_parent = INT_TO_BOOL(m_master.uncacheable_requests_bypass_parent);
   params->no_origin_server_dns = INT_TO_BOOL(m_master.no_origin_server_dns);
+  params->use_client_target_addr = INT_TO_BOOL(m_master.use_client_target_addr);
   params->maintain_pristine_host_hdr = INT_TO_BOOL(m_master.maintain_pristine_host_hdr);
 
   params->snarf_username_from_authorization = INT_TO_BOOL(m_master.snarf_username_from_authorization);

Modified: trafficserver/traffic/trunk/proxy/http2/HttpConfig.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpConfig.h?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpConfig.h (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpConfig.h Tue Nov 30 16:33:39 2010
@@ -450,6 +450,7 @@ public:
   MgmtInt no_dns_forward_to_parent;
   MgmtInt uncacheable_requests_bypass_parent;
   MgmtInt no_origin_server_dns;
+  MgmtInt use_client_target_addr;
   MgmtInt maintain_pristine_host_hdr;
 
   MgmtInt snarf_username_from_authorization;
@@ -886,6 +887,7 @@ enable_url_expandomatic(0),
 no_dns_forward_to_parent(0),
 uncacheable_requests_bypass_parent(1),
 no_origin_server_dns(0),
+use_client_target_addr(0),
 maintain_pristine_host_hdr(0),
 //snarf_username_from_authorization(0),
 insert_request_via_string(0),

Modified: trafficserver/traffic/trunk/proxy/http2/HttpSM.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpSM.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpSM.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpSM.cc Tue Nov 30 16:33:39 2010
@@ -3789,11 +3789,10 @@ HttpSM::do_hostdb_lookup()
     }
     */
 
-  milestones.dns_lookup_begin = ink_get_hrtime();
-
   ink_assert(t_state.dns_info.lookup_name != NULL);
   ink_assert(pending_action == NULL);
 
+  milestones.dns_lookup_begin = ink_get_hrtime();
   bool use_srv_records = HttpConfig::m_master.srv_enabled;
 
   if (use_srv_records) {
@@ -6511,6 +6510,8 @@ HttpSM::set_next_state()
   
   case HttpTransact::DNS_LOOKUP:
     {
+      uint32 addr;
+
       if (url_remap_mode == 2 && t_state.first_dns_lookup) {
         Debug("cdn", "Skipping DNS Lookup");
         // skip the DNS lookup
@@ -6518,6 +6519,21 @@ HttpSM::set_next_state()
         t_state.first_dns_lookup = false;
         call_transact_and_set_next_state(HttpTransact::HandleFiltering);
         break;
+      } else  if (t_state.http_config_param->use_client_target_addr
+        && !t_state.url_remap_success
+        && t_state.client_info.is_transparent
+        && 0 != (addr = t_state.state_machine->ua_session->get_netvc()->get_local_ip())
+      ) {
+        /* If the connection is client side transparent and the URL
+           was not remapped, we can use the client destination IP
+           address instead of doing a DNS lookup. This is controlled
+           by the 'use_client_target_addr' configuration parameter.
+        */
+        Debug("dns", "[HttpTransact::HandleRequest] Skipping DNS lookup for client supplied target %u.%u.%u.%u.\n", PRINT_IP(addr));
+        t_state.host_db_info.ip() = addr;
+        t_state.dns_info.lookup_success = true;
+        call_transact_and_set_next_state(NULL);
+        break;
       }
 
       HTTP_SM_SET_DEFAULT_HANDLER(&HttpSM::state_hostdb_lookup);

Modified: trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc Tue Nov 30 16:33:39 2010
@@ -1192,11 +1192,13 @@ HttpTransact::HandleRequest(State * s)
   if (handle_trace_and_options_requests(s, &s->hdr_info.client_request)) {
     TRANSACT_RETURN(PROXY_INTERNAL_CACHE_NOOP, NULL);
   }
-  // for HTTPS requests, we must go directly to the
-  // origin server. Ignore the no_dns_just_forward_to_parent setting.
 
-  if (s->http_config_param->no_dns_forward_to_parent &&
-      s->scheme != URL_WKSIDX_HTTPS && strcmp(s->server_info.name, "127.0.0.1") != 0) {
+  if (s->http_config_param->no_dns_forward_to_parent
+    && s->scheme != URL_WKSIDX_HTTPS
+    && strcmp(s->server_info.name, "127.0.0.1") != 0
+  ) {
+    // for HTTPS requests, we must go directly to the
+    // origin server. Ignore the no_dns_just_forward_to_parent setting.
     // we need to see if the hostname is an
     //   ip address since the parent selection code result
     //   could change as a result of this ip address
@@ -5987,7 +5989,6 @@ HttpTransact::initialize_state_variables
       s->hdr_info.trust_response_cl = false;
     }
   }
-
   initialize_bypass_variables(s);
 
   if (incoming_response->presence(MIME_PRESENCE_TRANSFER_ENCODING)) {

Modified: trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.cc (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.cc Tue Nov 30 16:33:39 2010
@@ -80,6 +80,7 @@ LocalManager::mgmtShutdown(int status, b
   if (mainThread) {
     mgmt_log("[LocalManager::mgmtShutdown] Executing shutdown request.\n");
     processShutdown(mainThread);
+    // WCCP TBD: Send a shutdown message to routers.
 
     if (processRunning()) {
       waitpid(watched_process_pid, &status, 0);
@@ -343,6 +344,29 @@ BaseManager(), run_proxy(proxy_on), reco
     config_path = absolute_config_path;
   }
 
+  // Bind the WCCP address if present.
+  xptr<char> wccp_addr_str(REC_readString("proxy.config.wccp.addr", &found));
+  if (found && wccp_addr_str && *wccp_addr_str) {
+    wccp_cache.setAddr(inet_addr(wccp_addr_str));
+    mgmt_log("[LocalManager::LocalManager] WCCP identifying address set to %s.\n", static_cast<char*>(wccp_addr_str));
+  }
+
+  xptr<char> wccp_config_str(REC_readString("proxy.config.wccp.services", &found));
+  if (found && wccp_config_str && *wccp_config_str) {
+    bool located = true;
+    if (access(wccp_config_str, R_OK) == -1) {
+      wccp_config_str = Layout::relative_to(Layout::get()->sysconfdir, wccp_config_str);
+      if (access(wccp_config_str, R_OK) == -1 ) {
+        located = false;
+      }
+    }
+    if (located) {
+      wccp_cache.loadServicesFromFile(wccp_config_str);
+    } else { // not located
+      mgmt_log("[LocalManager::LocalManager] WCCP service configuration file '%s' was specified but could not be found in the file system.\n", static_cast<char*>(wccp_config_str));
+    }
+  }
+
   bin_path = REC_readString("proxy.config.bin_path", &found);
   process_server_timeout_secs = REC_readInteger("proxy.config.lm.pserver_timeout_secs", &found);
   process_server_timeout_msecs = REC_readInteger("proxy.config.lm.pserver_timeout_msecs", &found);
@@ -459,6 +483,10 @@ LocalManager::initMgmtProcessServer()
   int servlen, one = 1;
   struct sockaddr_un serv_addr;
 
+  if (wccp_cache.isConfigured()) {
+    if (0 > wccp_cache.open()) mgmt_log("Failed to open WCCP socket\n");
+  }
+
   snprintf(fpath, sizeof(fpath), "%s/%s", pserver_path, LM_CONNECTION_SERVER);
   unlink(fpath);
   if ((process_server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
@@ -504,17 +532,25 @@ LocalManager::pollMgmtProcessServer()
   struct timeval timeout;
   struct sockaddr_in clientAddr;
   fd_set fdlist;
+  int wccp_fd = wccp_cache.getSocket();
 
   while (1) {
+    // Only run WCCP housekeeping while we have a server process.
+    // Note: The WCCP socket is opened iff WCCP is configured.
+    bool wccp_active = wccp_fd != ts::NO_FD && watched_process_fd != ts::NO_FD;
 
     // poll only
     timeout.tv_sec = process_server_timeout_secs;
     timeout.tv_usec = process_server_timeout_msecs * 1000;
-
     FD_ZERO(&fdlist);
     FD_SET(process_server_sockfd, &fdlist);
-    if (watched_process_fd != -1) {
-      FD_SET(watched_process_fd, &fdlist);
+    if (watched_process_fd != -1) FD_SET(watched_process_fd, &fdlist);
+
+    if (wccp_active) {
+      wccp_cache.housekeeping();
+      time_t wccp_wait = wccp_cache.waitTime();
+      if (wccp_wait < process_server_timeout_secs) timeout.tv_sec = wccp_wait;
+      FD_SET(wccp_cache.getSocket(), &fdlist);
     }
 
     num = mgmt_select(FD_SETSIZE, &fdlist, NULL, NULL, &timeout);
@@ -524,6 +560,11 @@ LocalManager::pollMgmtProcessServer()
 
     } else if (num > 0) {       /* Have something */
 
+      if (wccp_fd != ts::NO_FD && FD_ISSET(wccp_fd, &fdlist)) {
+        wccp_cache.handleMessage();
+        --num;
+      }
+
       if (FD_ISSET(process_server_sockfd, &fdlist)) {   /* New connection */
         int clientLen = sizeof(clientAddr);
         int new_sockfd = mgmt_accept(process_server_sockfd,
@@ -554,7 +595,7 @@ LocalManager::pollMgmtProcessServer()
         --num;
       }
 
-      if (FD_ISSET(watched_process_fd, &fdlist)) {
+      if (ts::NO_FD != watched_process_fd && FD_ISSET(watched_process_fd, &fdlist)) {
         int res;
         MgmtMessageHdr mh_hdr;
         MgmtMessageHdr *mh_full;
@@ -1045,7 +1086,7 @@ LocalManager::startProxy()
   // Before we do anything lets check for the existence of
   // the traffic server binary along with it's execute permmissions
   if (access(absolute_proxy_binary, F_OK) < 0) {
-    // Error can't find trafic_server
+    // Error can't find traffic_server
     mgmt_elog(stderr, "[LocalManager::startProxy] Unable to find traffic server at %s\n", absolute_proxy_binary);
     return false;
   }

Modified: trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.h?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.h (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/LocalManager.h Tue Nov 30 16:33:39 2010
@@ -41,6 +41,7 @@
 #include "ClusterCom.h"
 #include "VMap.h"
 #include "WebPluginList.h"
+#include "../wccp/Wccp.h"
 
 #if !defined(WIN32)
 #define ink_get_hrtime ink_get_hrtime_internal
@@ -182,6 +183,7 @@ public:
 #endif
 
   WebPluginList plugin_list;
+  wccp::Cache wccp_cache;
 
 private:
 

Modified: trafficserver/traffic/trunk/proxy/mgmt2/Main.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/Main.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/Main.cc (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/Main.cc Tue Nov 30 16:33:39 2010
@@ -445,6 +445,29 @@ set_process_limits(int fds_throttle)
 
 }
 
+void
+Errata_Logger(ts::Errata const& err) {
+  size_t n;
+  static size_t const SIZE = 4096;
+  char buff[SIZE];
+  if (err.size()) {
+    ts::Errata::Code code = err.top().getCode();
+    n = err.write(buff, SIZE, 1, 0, 2, "> ");
+    // strip trailing newlines.
+    while (n && (buff[n-1] == '\n' || buff[n-1] == '\r'))
+      buff[--n] = 0;
+    // log it.
+    if (code > 1) mgmt_elog("[WCCP]%s", buff);
+    else if (code > 0) mgmt_log("[WCCP]%s", buff);
+    else Debug("WCCP", "%s", buff);
+  }
+}
+
+void
+Init_Errata_Logging() {
+  ts::Errata::registerSink(&Errata_Logger);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -683,6 +706,7 @@ main(int argc, char **argv)
 
   RecLocalInit();
   LibRecordsConfigInit();
+  Init_Errata_Logging();
   lmgmt = new LocalManager(mgmt_path, new LMRecords(mgmt_path, recs_conf, 0), proxy_on);
   RecLocalInitMessage();
   lmgmt->initAlarm();
@@ -1348,7 +1372,7 @@ fileUpdated(char *fname)
     @code
     prctl(PR_SET_KEEPCAPS, 1);
     @endcode
-    but that had no effect even though the call reported succes.
+    but that had no effect even though the call reported success.
     Only explicit capability manipulation was effective.
 
     It does not appear to be necessary to set the capabilities on the

Modified: trafficserver/traffic/trunk/proxy/mgmt2/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/Makefile.am Tue Nov 30 16:33:39 2010
@@ -36,6 +36,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/preparse \
   -I$(top_srcdir)/proxy/mgmt2/stats \
   -I$(top_srcdir)/proxy/mgmt2/utils \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/web2
 
 MGMT_DEFS = @MGMT_DEFS@
@@ -119,4 +120,4 @@ traffic_manager_LDADD = \
   @LIBEXPAT@ @LIBPCRE@ \
   @LIBSSL@ @LIBDB@ @LIBSQLITE3@ @LIBTCL@ @LIBICONV@ \
   @LIBM@ @LIBDL@ @LIBSOCKET@ @LIBNSL@ @LIBRESOLV@ \
-  @LIBTHREAD@ @LIBRT@ @LIBEXECINFO@ @LIBCAP@
+  @LIBTHREAD@ @LIBRT@ @LIBEXECINFO@ @LIBCAP@ ../wccp/libwccp.a ../tsconfig/libtsconfig.a

Modified: trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/RecordsConfig.cc Tue Nov 30 16:33:39 2010
@@ -629,6 +629,8 @@ RecordElement RecordsConfig[] = {
   ,
   {CONFIG, "proxy.config.http.no_origin_server_dns", "", INK_INT, "0", RU_REREAD, RR_NULL, RC_INT, "[0-1]", RA_NULL}
   ,
+  {CONFIG, "proxy.config.http.use_client_target_addr", "", INK_INT, "0", RU_REREAD, RR_NULL, RC_INT, "[0-1]", RA_NULL}
+  ,
   {CONFIG, "proxy.config.http.keep_alive_enabled", "", INK_INT, "1", RU_REREAD, RR_NULL, RC_NULL, NULL, RA_NULL}
   ,
   {CONFIG, "proxy.config.http.keep_alive_post_out", "", INK_INT, "0", RU_REREAD, RR_NULL, RC_NULL, NULL, RA_NULL}
@@ -2536,6 +2538,15 @@ RecordElement RecordsConfig[] = {
   ,
   {PROCESS, "proxy.process.icp.total_icp_request_time", "", INK_FLOAT, "0.00", RU_NULL, RR_NULL, RC_NULL, NULL, RA_NULL}
   ,
+  //############################################################################
+  //#
+  //# WCCP
+  //#
+  //############################################################################
+  {CONFIG, "proxy.config.wccp.addr", "Identifying IP address", INK_STRING, "", RU_RESTART_TM, RR_NULL, RC_STR, NULL, RA_NULL}
+  ,
+  {CONFIG, "proxy.config.wccp.services", "File with service configuration", INK_STRING, "", RU_RESTART_TM, RR_NULL, RC_STR, NULL, RA_NULL }
+  ,
   //##############################################################################
   //# Scheduled Update Configuration
   //##############################################################################

Modified: trafficserver/traffic/trunk/proxy/mgmt2/api2/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/api2/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/api2/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/api2/Makefile.am Tue Nov 30 16:33:39 2010
@@ -26,6 +26,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/utils \
   -I$(top_srcdir)/proxy/mgmt2/web2 \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/api2/include
 
 MGMT_DEFS = @MGMT_DEFS@

Modified: trafficserver/traffic/trunk/proxy/mgmt2/cli/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/cli/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/cli/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/cli/Makefile.am Tue Nov 30 16:33:39 2010
@@ -24,6 +24,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/api2/include \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/utils \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/web2
 
 MGMT_DEFS = @MGMT_DEFS@

Modified: trafficserver/traffic/trunk/proxy/mgmt2/cluster/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/cluster/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/cluster/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/cluster/Makefile.am Tue Nov 30 16:33:39 2010
@@ -22,6 +22,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2 \
   -I$(top_srcdir)/proxy/mgmt2/api2/include \
   -I$(top_srcdir)/proxy/mgmt2/utils \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/web2
 
 MGMT_DEFS = @MGMT_DEFS@

Modified: trafficserver/traffic/trunk/proxy/mgmt2/stats/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/stats/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/stats/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/stats/Makefile.am Tue Nov 30 16:33:39 2010
@@ -23,6 +23,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/utils \
   -I$(top_srcdir)/proxy/mgmt2/api2/include \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/web2 \
   -I$(top_srcdir)/proxy
 

Modified: trafficserver/traffic/trunk/proxy/mgmt2/utils/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/utils/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/utils/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/utils/Makefile.am Tue Nov 30 16:33:39 2010
@@ -25,6 +25,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/api2/include \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/web2 \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy
 
 MGMT_DEFS = @MGMT_DEFS@

Modified: trafficserver/traffic/trunk/proxy/mgmt2/web2/Makefile.am
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/mgmt2/web2/Makefile.am?rev=1040621&r1=1040620&r2=1040621&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/mgmt2/web2/Makefile.am (original)
+++ trafficserver/traffic/trunk/proxy/mgmt2/web2/Makefile.am Tue Nov 30 16:33:39 2010
@@ -26,6 +26,7 @@ AM_CPPFLAGS = \
   -I$(top_srcdir)/proxy/mgmt2/cli \
   -I$(top_srcdir)/proxy/mgmt2/cluster \
   -I$(top_srcdir)/proxy/mgmt2/utils \
+  -I$(top_srcdir)/proxy/tsconfig \
   -I$(top_srcdir)/proxy/mgmt2/tools \
   -I$(top_srcdir)/proxy/hdrs