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);