You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by er...@apache.org on 2010/11/12 23:59:29 UTC

svn commit: r1034592 - in /trafficserver/traffic/trunk/proxy: InkAPI.cc api/ts/ts.h http2/HttpDebugNames.cc http2/HttpSM.cc http2/HttpTransact.cc http2/HttpTransact.h

Author: ericb
Date: Fri Nov 12 22:59:28 2010
New Revision: 1034592

URL: http://svn.apache.org/viewvc?rev=1034592&view=rev
Log:
* Rearrange the API hooks per TS-529
* Added new API function for optionally skipping the various remap states within the HttpSM TS-530

  Review: Leif H.

Modified:
    trafficserver/traffic/trunk/proxy/InkAPI.cc
    trafficserver/traffic/trunk/proxy/api/ts/ts.h
    trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc
    trafficserver/traffic/trunk/proxy/http2/HttpSM.cc
    trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc
    trafficserver/traffic/trunk/proxy/http2/HttpTransact.h

Modified: trafficserver/traffic/trunk/proxy/InkAPI.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/InkAPI.cc?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPI.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPI.cc Fri Nov 12 22:59:28 2010
@@ -7714,4 +7714,22 @@ INKRecordDump(INKRecordType rec_type, IN
   RecDumpRecords((RecT)rec_type, (RecDumpEntryCb)callback, edata);
 }
 
+/* ability to skip the remap phase of the State Machine 
+   this only really makes sense in INK_HTTP_READ_REQUEST_HDR_HOOK
+*/
+INKReturnCode INKSkipRemappingSet(INKHttpTxn txnp, int flag)
+{
+  if (sdk_sanity_check_txn(txnp) != INK_SUCCESS) {
+    return INK_ERROR;
+  }
+  HttpSM *sm = (HttpSM*) txnp;
+  if (flag) {
+    sm->t_state.skip_all_remapping = true;
+  }
+  else {
+    sm->t_state.skip_all_remapping = false;
+  }
+  return INK_SUCCESS;
+}
+
 #endif //INK_NO_API

Modified: trafficserver/traffic/trunk/proxy/api/ts/ts.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/api/ts/ts.h?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/api/ts/ts.h (original)
+++ trafficserver/traffic/trunk/proxy/api/ts/ts.h Fri Nov 12 22:59:28 2010
@@ -219,7 +219,8 @@ extern "C"
     INK_HTTP_SSN_START_HOOK,
     INK_HTTP_SSN_CLOSE_HOOK,
     INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK,
-    INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK,
+    INK_HTTP_PRE_REMAP_HOOK,
+    INK_HTTP_POST_REMAP_HOOK,
     INK_HTTP_LAST_HOOK
   } INKHttpHookID;
 
@@ -316,7 +317,8 @@ extern "C"
     INK_EVENT_HTTP_SSN_START = 60013,
     INK_EVENT_HTTP_SSN_CLOSE = 60014,
     INK_EVENT_HTTP_CACHE_LOOKUP_COMPLETE = 60015,
-    INK_EVENT_HTTP_READ_REQUEST_PRE_REMAP = 60016,
+    INK_EVENT_HTTP_PRE_REMAP = 60016,
+    INK_EVENT_HTTP_POST_REMAP = 60017,
     INK_EVENT_MGMT_UPDATE = 60100,
 
     /* EVENTS 60200 - 60202 for internal use */
@@ -2749,6 +2751,12 @@ extern "C"
   inkapi void INKVConnInactivityTimeoutCancel(INKVConn connp);
   inkapi void INKVConnActiveTimeoutSet(INKVConn connp, TSHRTime timeout);
   inkapi void INKVConnActiveTimeoutCancel(INKVConn connp);
+  
+  /* 
+    ability to skip the remap phase of the State Machine 
+    this only really makes sense in INK_HTTP_READ_REQUEST_HDR_HOOK
+  */
+  inkapi INKReturnCode INKSkipRemappingSet(INKHttpTxn txnp, int flag);
 
 #ifdef __cplusplus
 }

Modified: trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc Fri Nov 12 22:59:28 2010
@@ -391,10 +391,10 @@ HttpDebugNames::get_action_name(HttpTran
     return ("HTTP_API_SM_SHUTDOWN");
   case HttpTransact::HTTP_REMAP_REQUEST:
     return ("HTTP_REMAP_REQUEST");
-  case HttpTransact::HTTP_API_READ_REQUEST_PRE_REMAP:
-    return ("HTTP_API_READ_REQUEST_PRE_REMAP");
-  case HttpTransact::HTTP_END_REMAP_REQUEST:
-    return ("HTTP_END_REMAP_REQUEST");
+  case HttpTransact::HTTP_API_PRE_REMAP:
+    return ("HTTP_API_PRE_REMAP");
+  case HttpTransact::HTTP_API_POST_REMAP:
+    return ("HTTP_API_POST_REMAP");
 
   }
 
@@ -482,8 +482,10 @@ HttpDebugNames::get_api_hook_name(INKHtt
     return "INK_HTTP_SSN_START_HOOK";
   case INK_HTTP_SSN_CLOSE_HOOK:
     return "INK_HTTP_SSN_CLOSE_HOOK";
-  case INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK:
-    return "INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK";
+  case INK_HTTP_PRE_REMAP_HOOK:
+    return "INK_HTTP_PRE_REMAP_HOOK";
+  case INK_HTTP_POST_REMAP_HOOK:
+    return "INK_HTTP_POST_REMAP_HOOK";
   case INK_HTTP_LAST_HOOK:
     return "INK_HTTP_LAST_HOOK";
   }

Modified: trafficserver/traffic/trunk/proxy/http2/HttpSM.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpSM.cc?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpSM.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpSM.cc Fri Nov 12 22:59:28 2010
@@ -1573,7 +1573,8 @@ HttpSM::handle_api_return()
       setup_client_read_request_header();
     }
     return;
-  case HttpTransact::HTTP_API_READ_REQUEST_PRE_REMAP:
+  case HttpTransact::HTTP_API_PRE_REMAP:
+  case HttpTransact::HTTP_API_POST_REMAP:
   case HttpTransact::HTTP_API_READ_REQUEST_HDR:
   case HttpTransact::HTTP_API_OS_DNS:
   case HttpTransact::HTTP_API_READ_CACHE_HDR:
@@ -4416,8 +4417,11 @@ HttpSM::do_api_callout_internal()
   case HttpTransact::HTTP_API_SM_START:
     cur_hook_id = INK_HTTP_TXN_START_HOOK;
     break;
-  case HttpTransact::HTTP_API_READ_REQUEST_PRE_REMAP:
-    cur_hook_id = INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK;
+  case HttpTransact::HTTP_API_PRE_REMAP:
+    cur_hook_id = INK_HTTP_PRE_REMAP_HOOK;
+    break;
+  case HttpTransact::HTTP_API_POST_REMAP:
+    cur_hook_id = INK_HTTP_POST_REMAP_HOOK;
     break;
   case HttpTransact::HTTP_API_READ_REQUEST_HDR:
     cur_hook_id = INK_HTTP_READ_REQUEST_HDR_HOOK;
@@ -6532,7 +6536,8 @@ HttpSM::set_next_state()
   // Use the returned "next action" code to set the next state handler //
   ///////////////////////////////////////////////////////////////////////
   switch (t_state.next_action) {
-  case HttpTransact::HTTP_API_READ_REQUEST_PRE_REMAP:
+  case HttpTransact::HTTP_API_PRE_REMAP:
+  case HttpTransact::HTTP_API_POST_REMAP:
   case HttpTransact::HTTP_API_READ_REQUEST_HDR:
   case HttpTransact::HTTP_API_OS_DNS:
   case HttpTransact::HTTP_API_SEND_REQUEST_HDR:
@@ -6558,15 +6563,8 @@ HttpSM::set_next_state()
         do_remap_request(false);        /* dont run inline (iow on another thread) */
       }
       break;
-    }
-
-  case HttpTransact::HTTP_END_REMAP_REQUEST:
-    {
-      /* nop for now */
-      call_transact_and_set_next_state(NULL);
-      break;
-    }
-
+    }  
+  
   case HttpTransact::DNS_LOOKUP:
     {
       if (url_remap_mode == 2 && t_state.first_dns_lookup) {

Modified: trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc Fri Nov 12 22:59:28 2010
@@ -770,9 +770,15 @@ HttpTransact::perform_accept_encoding_fi
 void
 HttpTransact::StartRemapRequest(State * s)
 {
+  
+  if (s->skip_all_remapping) {
+    Debug ("http_trans", "API request to skip remapping");
+    TRANSACT_RETURN(HTTP_API_POST_REMAP, HttpTransact::HandleRequest);
+  }
+  
   Debug("http_trans", "START HttpTransact::StartRemapRequest");
 
-        /**
+  /**
 	 * Check for URL remappings before checking request
 	 * validity or initializing state variables since
 	 * the remappings can insert or change the destination
@@ -831,6 +837,12 @@ HttpTransact::StartRemapRequest(State * 
   }
 
   Debug("http_trans", "END HttpTransact::StartRemapRequest");
+  TRANSACT_RETURN(HTTP_API_PRE_REMAP, HttpTransact::PerformRemap);
+}
+
+void HttpTransact::PerformRemap(State *s)
+{
+  Debug("http_trans","Inside PerformRemap");
   TRANSACT_RETURN(HTTP_REMAP_REQUEST, HttpTransact::EndRemapRequest);
 }
 
@@ -972,7 +984,7 @@ done:
     TRANSACT_RETURN(PROXY_SEND_ERROR_CACHE_NOOP, NULL);
   } else {
     Debug("http_trans", "END HttpTransact::EndRemapRequest");
-    TRANSACT_RETURN(HTTP_API_READ_REQUEST_HDR, HttpTransact::HandleRequest);
+    TRANSACT_RETURN(HTTP_API_POST_REMAP, HttpTransact::HandleRequest);
   }
 
   ink_debug_assert(!"not reached");
@@ -1092,13 +1104,13 @@ HttpTransact::ModifyRequest(State * s)
 
   Debug("http_trans", "END HttpTransact::ModifyRequest");
 
-  TRANSACT_RETURN(HTTP_API_READ_REQUEST_PRE_REMAP, HttpTransact::StartRemapRequest);
+  TRANSACT_RETURN(HTTP_API_READ_REQUEST_HDR, HttpTransact::StartRemapRequest);
 }
 
 void
 HttpTransact::HandleRequest(State * s)
 {
-  Debug("http_trans", "START HttpTransact/HandleRequest");
+  Debug("http_trans", "START HttpTransact::HandleRequest");
 
   HTTP_DEBUG_ASSERT(!s->hdr_info.server_request.valid());
 

Modified: trafficserver/traffic/trunk/proxy/http2/HttpTransact.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpTransact.h?rev=1034592&r1=1034591&r2=1034592&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpTransact.h (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpTransact.h Fri Nov 12 22:59:28 2010
@@ -585,10 +585,12 @@ public:
     CONTINUE,
 
     HTTP_API_SM_START,
-    HTTP_API_READ_REQUEST_PRE_REMAP,
-    HTTP_REMAP_REQUEST,
-    HTTP_END_REMAP_REQUEST,
+    
     HTTP_API_READ_REQUEST_HDR,
+    HTTP_API_PRE_REMAP,
+    HTTP_REMAP_REQUEST,
+    HTTP_API_POST_REMAP,
+    
     HTTP_API_OS_DNS,
     HTTP_API_SEND_REQUEST_HDR,
     HTTP_API_READ_CACHE_HDR,
@@ -1054,7 +1056,8 @@ public:
 
     bool already_downgraded;
     URL pristine_url;  // pristine url is the url before remap
-
+    
+    bool skip_all_remapping;
 
     // Methods
     void
@@ -1146,7 +1149,8 @@ public:
         congestion_congested_or_failed(0),
         congestion_connection_opened(0),
         reverse_proxy(false), url_remap_success(false), remap_redirect(NULL), filter_mask(0), already_downgraded(false),
-        pristine_url()
+        pristine_url(),
+        skip_all_remapping(false)
     {
       int i;
       char *via_ptr = via_string;
@@ -1259,6 +1263,7 @@ public:
   static void StartRemapRequest(State * s);
   static void RemapRequest(State * s);
   static void EndRemapRequest(State * s);
+  static void PerformRemap(State * s);
   static void ModifyRequest(State * s);
   static void HandleRequest(State * s);
   static bool handleIfRedirect(State * s);