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 2019/09/25 13:43:01 UTC
[trafficserver] 01/05: adding TSHttpTxnRedoCacheLookup
This is an automated email from the ASF dual-hosted git repository.
amc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 313ba1d306104e1c277e98cbd46072ada9f817ba
Author: Daniel Morilha (netlify) <da...@netlify.com>
AuthorDate: Mon Nov 5 12:49:51 2018 -0800
adding TSHttpTxnRedoCacheLookup
---
include/ts/experimental.h | 1 +
proxy/http/HttpSM.cc | 10 ++++++++++
proxy/http/HttpSM.h | 2 ++
src/traffic_server/InkAPI.cc | 46 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 59 insertions(+)
diff --git a/include/ts/experimental.h b/include/ts/experimental.h
index fa8e7ea..a1bab6f 100644
--- a/include/ts/experimental.h
+++ b/include/ts/experimental.h
@@ -198,6 +198,7 @@ tsapi TSReturnCode TSHttpTxnCacheLookupCountGet(TSHttpTxn txnp, int *lookup_coun
tsapi TSReturnCode TSHttpTxnServerRespIgnore(TSHttpTxn txnp);
tsapi TSReturnCode TSHttpTxnShutDown(TSHttpTxn txnp, TSEvent event);
tsapi TSReturnCode TSHttpTxnCloseAfterResponse(TSHttpTxn txnp, int should_close);
+tsapi void TSHttpTxnRedoCacheLookup(TSHttpTxn txnp, const char *, const int, const char *, const char *);
/****************************************************************************
* ??
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 793b82f..e9398c7 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -1511,6 +1511,11 @@ plugins required to work with sni_routing.
case HTTP_API_DEFERED_SERVER_ERROR:
api_next = API_RETURN_DEFERED_SERVER_ERROR;
break;
+ case HTTP_API_REWIND_STATE_MACHINE:
+ DebugSM("http", "REWIND");
+ callout_state = HTTP_API_NO_CALLOUT;
+ set_next_state();
+ return 0;
default:
ink_release_assert(0);
}
@@ -8027,6 +8032,11 @@ HttpSM::find_proto_string(HTTPVersion version) const
return {};
}
+void
+HttpSM::rewind_state_machine() {
+ callout_state = HTTP_API_REWIND_STATE_MACHINE;
+}
+
// YTS Team, yamsat Plugin
// Function to copy the partial Post data while tunnelling
void
diff --git a/proxy/http/HttpSM.h b/proxy/http/HttpSM.h
index 748d307..931c725 100644
--- a/proxy/http/HttpSM.h
+++ b/proxy/http/HttpSM.h
@@ -155,6 +155,7 @@ enum HttpApiState_t {
HTTP_API_IN_CALLOUT,
HTTP_API_DEFERED_CLOSE,
HTTP_API_DEFERED_SERVER_ERROR,
+ HTTP_API_REWIND_STATE_MACHINE,
};
enum HttpPluginTunnel_t {
@@ -615,6 +616,7 @@ public:
void set_server_netvc_inactivity_timeout(NetVConnection *netvc);
void set_server_netvc_active_timeout(NetVConnection *netvc);
void set_server_netvc_connect_timeout(NetVConnection *netvc);
+ void rewind_state_machine();
private:
PostDataBuffers _postbuf;
diff --git a/src/traffic_server/InkAPI.cc b/src/traffic_server/InkAPI.cc
index b61fdc0..88389cd 100644
--- a/src/traffic_server/InkAPI.cc
+++ b/src/traffic_server/InkAPI.cc
@@ -9789,6 +9789,52 @@ TSRegisterProtocolTag(const char *tag)
return nullptr;
}
+void
+TSHttpTxnRedoCacheLookup(TSHttpTxn txnp, const char * host, const int port,
+ const char * path, const char * query)
+{
+ sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
+ HttpSM *sm = (HttpSM *)txnp;
+ HttpTransact::State * s = &(sm->t_state);
+ sdk_assert(s->next_action == HttpTransact::SM_ACTION_CACHE_LOOKUP);
+ s->transact_return_point = nullptr;
+
+ sm->rewind_state_machine();
+
+ TSMBuffer buffer = nullptr;
+ TSMLoc location = nullptr, location2 = nullptr;
+
+ TSHttpTxnClientReqGet(txnp, &buffer, &location);
+ TSHttpHdrUrlGet(buffer, location, &location2);
+
+ //host
+ if (nullptr != host) {
+ const int length = strlen(host);
+ TSUrlHostSet(buffer, location2, host, length);
+ }
+
+ //port
+ if (0 < port) {
+ TSUrlPortSet(buffer, location2, port);
+ }
+
+ //path
+ if (nullptr != path) {
+ const int length = strlen(path);
+ TSUrlPathSet(buffer, location2, path, length);
+ }
+
+ //query
+ if (nullptr != query) {
+ const int length = strlen(query);
+ TSUrlHttpQuerySet(buffer, location2, query, length);
+ }
+
+ TSHandleMLocRelease(buffer, location, location2);
+ TSHandleMLocRelease(buffer, TS_NULL_MLOC, location);
+}
+
+
namespace
{
// Function that contains the common logic for TSRemapFrom/ToUrlGet().