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/16 18:48:28 UTC
svn commit: r1035710 - in /trafficserver/traffic/trunk/proxy: InkAPI.cc
InkAPITest.cc api/ts/ts.h.in http2/HttpDebugNames.cc http2/HttpSM.cc
http2/HttpTransact.cc http2/HttpTransact.h
Author: ericb
Date: Tue Nov 16 17:48:27 2010
New Revision: 1035710
URL: http://svn.apache.org/viewvc?rev=1035710&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/InkAPITest.cc
trafficserver/traffic/trunk/proxy/api/ts/ts.h.in
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=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPI.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPI.cc Tue Nov 16 17:48:27 2010
@@ -7714,4 +7714,17 @@ 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;
+ sm->t_state.api_skip_all_remapping = (flag != 0);
+ return INK_SUCCESS;
+}
+
#endif //INK_NO_API
Modified: trafficserver/traffic/trunk/proxy/InkAPITest.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/InkAPITest.cc?rev=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/InkAPITest.cc (original)
+++ trafficserver/traffic/trunk/proxy/InkAPITest.cc Tue Nov 16 17:48:27 2010
@@ -6559,7 +6559,8 @@ typedef enum
ORIG_INK_HTTP_SSN_START_HOOK,
ORIG_INK_HTTP_SSN_CLOSE_HOOK,
ORIG_INK_HTTP_CACHE_LOOKUP_COMPLETE_HOOK,
- ORIG_INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK,
+ ORIG_INK_HTTP_PRE_REMAP_HOOK,
+ ORIG_INK_HTTP_POST_REMAP_HOOK,
ORIG_INK_HTTP_LAST_HOOK
} ORIG_INKHttpHookID;
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=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/api/ts/ts.h.in (original)
+++ trafficserver/traffic/trunk/proxy/api/ts/ts.h.in Tue Nov 16 17:48:27 2010
@@ -233,10 +233,13 @@ 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;
-
+
+ #define INK_HTTP_READ_REQUEST_PRE_REMAP_HOOK INK_HTTP_PRE_REMAP_HOOK //backwards compat
+
typedef enum
{
INK_CACHE_PLUGIN_HOOK,
@@ -330,7 +333,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 */
@@ -338,7 +342,9 @@ extern "C"
INK_EVENT_INTERNAL_60201 = 60201,
INK_EVENT_INTERNAL_60202 = 60202
} INKEvent;
-
+
+ #define INK_EVENT_HTTP_READ_REQUEST_PRE_REMAP INK_EVENT_HTTP_PRE_REMAP //backwards compat
+
typedef enum
{ INK_SRVSTATE_STATE_UNDEFINED = 0,
INK_SRVSTATE_ACTIVE_TIMEOUT,
@@ -2762,7 +2768,15 @@ 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
}
#endif /* __cplusplus */
Modified: trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc?rev=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpDebugNames.cc Tue Nov 16 17:48:27 2010
@@ -391,10 +391,12 @@ 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");
+ case HttpTransact::HTTP_POST_REMAP_SKIP:
+ return ("HTTP_POST_REMAP_SKIP");
}
@@ -482,8 +484,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=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpSM.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpSM.cc Tue Nov 16 17:48:27 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,8 +6536,9 @@ 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_READ_REQUEST_HDR:
+ case HttpTransact::HTTP_API_PRE_REMAP:
+ case HttpTransact::HTTP_API_POST_REMAP:
case HttpTransact::HTTP_API_OS_DNS:
case HttpTransact::HTTP_API_SEND_REQUEST_HDR:
case HttpTransact::HTTP_API_READ_CACHE_HDR:
@@ -6545,7 +6550,13 @@ HttpSM::set_next_state()
do_api_callout();
break;
}
-
+
+ case HttpTransact::HTTP_POST_REMAP_SKIP:
+ {
+ call_transact_and_set_next_state(NULL);
+ break;
+ }
+
case HttpTransact::HTTP_REMAP_REQUEST:
{
if (!remapProcessor.using_separate_thread()) {
@@ -6558,15 +6569,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=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpTransact.cc Tue Nov 16 17:48:27 2010
@@ -770,9 +770,15 @@ HttpTransact::perform_accept_encoding_fi
void
HttpTransact::StartRemapRequest(State * s)
{
+
+ if (s->api_skip_all_remapping) {
+ Debug ("http_trans", "API request to skip remapping");
+ TRANSACT_RETURN(HTTP_POST_REMAP_SKIP, 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);
}
@@ -844,7 +856,8 @@ HttpTransact::EndRemapRequest(State * s)
int method = incoming_request->method_get_wksidx();
int host_len;
const char *host = incoming_request->host_get(&host_len);
-
+ Debug("http_trans","EndRemapRequest host is %.*s", host_len,host);
+
////////////////////////////////////////////////////////////////
// if we got back a URL to redirect to, vector the user there //
////////////////////////////////////////////////////////////////
@@ -966,13 +979,21 @@ done:
obj_describe(s->hdr_info.client_request.m_http, 1);
}
- if (!s->reverse_proxy) {
+ /*
+ if s->reverse_proxy == false, we can assume remapping failed in some way
+ -however-
+ If an API setup a tunnel to fake the origin or proxy's response we will
+ continue to handle the request (as this was likely the plugin author's intent)
+
+ otherwise, 502/404 the request right now. /eric
+ */
+ if (!s->reverse_proxy && s->state_machine->plugin_tunnel_type == HTTP_NO_PLUGIN_TUNNEL) {
Debug("http_trans", "END HttpTransact::EndRemapRequest");
HTTP_INCREMENT_TRANS_STAT(http_invalid_client_requests_stat);
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 +1113,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());
@@ -1299,7 +1320,7 @@ HttpTransact::HandleApiErrorJump(State *
s->hdr_info.client_response.fields_clear();
s->source = SOURCE_INTERNAL;
}
-
+
/**
The API indicated an error. Lets use a >=400 error from the state (if one's set) or fallback to a
generic HTTP/1.X 500 INKApi Error
Modified: trafficserver/traffic/trunk/proxy/http2/HttpTransact.h
URL: http://svn.apache.org/viewvc/trafficserver/traffic/trunk/proxy/http2/HttpTransact.h?rev=1035710&r1=1035709&r2=1035710&view=diff
==============================================================================
--- trafficserver/traffic/trunk/proxy/http2/HttpTransact.h (original)
+++ trafficserver/traffic/trunk/proxy/http2/HttpTransact.h Tue Nov 16 17:48:27 2010
@@ -585,10 +585,13 @@ 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_POST_REMAP_SKIP,
+
HTTP_API_OS_DNS,
HTTP_API_SEND_REQUEST_HDR,
HTTP_API_READ_CACHE_HDR,
@@ -1054,7 +1057,8 @@ public:
bool already_downgraded;
URL pristine_url; // pristine url is the url before remap
-
+
+ bool api_skip_all_remapping;
// Methods
void
@@ -1146,7 +1150,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(),
+ api_skip_all_remapping(false)
{
int i;
char *via_ptr = via_string;
@@ -1259,6 +1264,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);