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 2012/01/27 23:54:45 UTC

svn commit: r1236915 - in /trafficserver/traffic/trunk: CHANGES proxy/InkAPI.cc proxy/PluginVC.cc proxy/PluginVC.h proxy/api/ts/ts.h.in proxy/http/HttpProxyServerMain.cc

Author: amc
Date: Fri Jan 27 22:54:44 2012
New Revision: 1236915

URL: http://svn.apache.org/viewvc?rev=1236915&view=rev
Log:
TS-1089: Added API for creating transparent connections (via PluginVC).

Modified:
    trafficserver/traffic/trunk/CHANGES
    trafficserver/traffic/trunk/proxy/InkAPI.cc
    trafficserver/traffic/trunk/proxy/PluginVC.cc
    trafficserver/traffic/trunk/proxy/PluginVC.h
    trafficserver/traffic/trunk/proxy/api/ts/ts.h.in
    trafficserver/traffic/trunk/proxy/http/HttpProxyServerMain.cc

Modified: trafficserver/traffic/trunk/CHANGES
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/CHANGES?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/CHANGES (original)
+++ trafficserver/traffic/trunk/CHANGES Fri Jan 27 22:54:44 2012
@@ -4,6 +4,8 @@ Changes with Apache Traffic Server 3.1.2
    parameter (int *bytes) from the prototype in <ts/ts.h>.
    Author: Alistair Stevenson
 
+  *) [TS-1089] Added TSHttpConnectTransparent.
+
   *) [TS-1088] Added TSHttpTxnOutgoingTransparencySet to API to
    control outbound transparency.
 

Modified: trafficserver/traffic/trunk/proxy/InkAPI.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/InkAPI.cc?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPI.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPI.cc Fri Jan 27 22:54:44 2012
@@ -5988,22 +5988,20 @@ TSHttpAltInfoQualitySet(TSHttpAltInfo in
 }
 
 extern HttpAccept *plugin_http_accept;
+extern HttpAccept *plugin_http_transparent_accept;
 
 TSVConn
 TSHttpConnect(sockaddr const* addr)
 {
   sdk_assert(addr);
 
-  in_addr_t ip = ink_inet_ip4_addr_cast(addr);
-  uint16_t port = ink_inet_get_port(addr);
-
-  sdk_assert(ip);
-  sdk_assert(port);
+  sdk_assert(ink_inet_is_ip(addr));
+  sdk_assert(ink_inet_port_cast(addr));
 
   if (plugin_http_accept) {
     PluginVCCore *new_pvc = PluginVCCore::alloc();
 
-    new_pvc->set_active_addr(ip, port);
+    new_pvc->set_active_addr(addr);
     new_pvc->set_accept_cont(plugin_http_accept);
 
     PluginVC *return_vc = new_pvc->connect();
@@ -6022,6 +6020,42 @@ TSHttpConnect(sockaddr const* addr)
   return NULL;
 }
 
+TSVConn
+TSHttpConnectTransparent(sockaddr const* client_addr, sockaddr const* server_addr)
+{
+  sdk_assert(ink_inet_is_ip(client_addr));
+  sdk_assert(ink_inet_is_ip(server_addr));
+  sdk_assert(!ink_inet_is_any(client_addr));
+  sdk_assert(ink_inet_port_cast(client_addr));
+  sdk_assert(!ink_inet_is_any(server_addr));
+  sdk_assert(ink_inet_port_cast(server_addr));
+
+  if (plugin_http_transparent_accept) {
+    PluginVCCore *new_pvc = PluginVCCore::alloc();
+
+    // set active address expects host ordering and the above casts do not
+    // swap when it is required
+    new_pvc->set_active_addr(client_addr);
+    new_pvc->set_passive_addr(server_addr);
+    new_pvc->set_transparent(true, true);
+    new_pvc->set_accept_cont(plugin_http_transparent_accept);
+
+    PluginVC *return_vc = new_pvc->connect();
+
+    if (return_vc != NULL) {
+      PluginVC* other_side = return_vc->get_other_side();
+
+      if(other_side != NULL) {
+        other_side->set_is_internal_request(true);
+      }
+    }
+
+    return reinterpret_cast<TSVConn>(return_vc);
+  }
+
+  return NULL;
+}
+
 /* Actions */
 void
 TSActionCancel(TSAction actionp)

Modified: trafficserver/traffic/trunk/proxy/PluginVC.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/PluginVC.cc?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/PluginVC.cc (original)
+++ trafficserver/traffic/trunk/proxy/PluginVC.cc Fri Jan 27 22:54:44 2012
@@ -1151,12 +1151,24 @@ PluginVCCore::set_passive_addr(in_addr_t
 }
 
 void
+PluginVCCore::set_passive_addr(sockaddr const* ip)
+{
+  passive_addr_struct.assign(ip);
+}
+
+void
 PluginVCCore::set_active_addr(in_addr_t ip, int port)
 {
   ink_inet_ip4_set(&active_addr_struct, htonl(ip), htons(port));
 }
 
 void
+PluginVCCore::set_active_addr(sockaddr const* ip)
+{
+  active_addr_struct.assign(ip);
+}
+
+void
 PluginVCCore::set_passive_data(void *data)
 {
   passive_data = data;
@@ -1168,6 +1180,14 @@ PluginVCCore::set_active_data(void *data
   active_data = data;
 }
 
+void
+PluginVCCore::set_transparent(bool passive_side, bool active_side)
+{
+  passive_vc.set_is_transparent(passive_side);
+  active_vc.set_is_transparent(active_side);
+}
+
+
 /*************************************************************
  *
  *   REGRESSION TEST STUFF

Modified: trafficserver/traffic/trunk/proxy/PluginVC.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/PluginVC.h?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/PluginVC.h (original)
+++ trafficserver/traffic/trunk/proxy/PluginVC.h Fri Jan 27 22:54:44 2012
@@ -179,18 +179,28 @@ public:
 
   /// Set the active address.
   void set_active_addr(
-    in_addr_t ip, ///< IPv4 address in host order.
-    int port ///< IP Port in host order.
-  );
+                       in_addr_t ip, ///< IPv4 address in host order.
+                       int port ///< IP Port in host order.
+                       );
+  /// Set the active address and port.
+  void set_active_addr(
+                       sockaddr const *ip ///< Address and port used.
+                       );
+  /// Set the passive address.
+  void set_passive_addr(
+                        in_addr_t ip, ///< IPv4 address in host order.
+                        int port ///< IP port in host order.
+                        );
   /// Set the passive address.
   void set_passive_addr(
-    in_addr_t ip, ///< IPv4 address in host order.
-    int port ///< IP port in host order.
-  );
+                        sockaddr const* ip ///< Address and port.
+                        );
 
   void set_active_data(void *data);
   void set_passive_data(void *data);
 
+  void set_transparent(bool passive_side, bool active_side);
+
 private:
 
   void destroy();

Modified: trafficserver/traffic/trunk/proxy/api/ts/ts.h.in
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/api/ts/ts.h.in?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/api/ts/ts.h.in (original)
+++ trafficserver/traffic/trunk/proxy/api/ts/ts.h.in Fri Jan 27 22:54:44 2012
@@ -2421,6 +2421,23 @@ extern "C"
 
    */
   tsapi TSVConn TSHttpConnect(struct sockaddr const* addr);
+  
+    /* --------------------------------------------------------------------------
+     Initiate Transparent Http Connection */
+  /**
+      Allows the plugin to initiate a transparent http connection. This operates
+      identically to TSHttpConnect except that it is treated as an intercepted
+      transparent connection by the session and transaction state machines.
+
+      @param client_addr the address that the resulting connection will be seen as
+      	coming from
+      @param server_addr the address that the resulting connection will be seen as
+      	attempting to connect to when intercepted
+      @param vc will be set to point to the new TSVConn on success.
+      
+   */
+  tsapi TSVConn TSHttpConnectTransparent(struct sockaddr const* client_addr, struct sockaddr const * server_addr);
+  
   tsapi void TSFetchUrl(const char* request,int request_len, struct sockaddr const* addr, TSCont contp, TSFetchWakeUpOptions callback_options,TSFetchEvent event);
   tsapi void TSFetchPages(TSFetchUrlParams_t* params);
 

Modified: trafficserver/traffic/trunk/proxy/http/HttpProxyServerMain.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http/HttpProxyServerMain.cc?rev=1236915&r1=1236914&r2=1236915&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http/HttpProxyServerMain.cc (original)
+++ trafficserver/traffic/trunk/proxy/http/HttpProxyServerMain.cc Fri Jan 27 22:54:44 2012
@@ -74,6 +74,7 @@ struct DumpStats: public Continuation
 };
 
 HttpAccept *plugin_http_accept = NULL;
+HttpAccept *plugin_http_transparent_accept = 0;
 
 /////////////////////////////////////////////////////////////////
 //
@@ -105,6 +106,13 @@ init_HttpProxyServer(void)
     plugin_http_accept = NEW(new HttpAccept);
     plugin_http_accept->mutex = new_ProxyMutex();
   }
+  // Same as plugin_http_accept except outbound transparent.
+  if (! plugin_http_transparent_accept) {
+    HttpAccept::Options ha_opt;
+    ha_opt.setOutboundTransparent(true);
+    plugin_http_transparent_accept = NEW(new HttpAccept(ha_opt));
+    plugin_http_transparent_accept->mutex = new_ProxyMutex();
+  }
 #endif
 }