Repository: trafficserver Updated Branches: refs/heads/master 447ad332f -> e5fed4006
TS-4010: Add cached request/response to the CPP API transaction object Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/e5fed400 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/e5fed400 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/e5fed400 Branch: refs/heads/master Commit: e5fed400699855ecb27e0e17cd0f2380daddcb70 Parents: 447ad33 Author: Boaz Reicher <bo...@yahoo-inc.com> Authored: Wed Nov 11 21:17:30 2015 -0800 Committer: Brian Geffon <bri...@apache.org> Committed: Wed Nov 11 21:17:30 2015 -0800 ---------------------------------------------------------------------- lib/atscppapi/src/Transaction.cc | 51 +++++++++++++++++++- .../src/include/atscppapi/Transaction.h | 31 ++++++++++++ lib/atscppapi/src/include/utils_internal.h | 12 +++++ lib/atscppapi/src/utils_internal.cc | 5 ++ 4 files changed, 98 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5fed400/lib/atscppapi/src/Transaction.cc ---------------------------------------------------------------------- diff --git a/lib/atscppapi/src/Transaction.cc b/lib/atscppapi/src/Transaction.cc index 7361cbd..30b2806 100644 --- a/lib/atscppapi/src/Transaction.cc +++ b/lib/atscppapi/src/Transaction.cc @@ -52,13 +52,20 @@ struct atscppapi::TransactionState : noncopyable { TSMBuffer client_response_hdr_buf_; TSMLoc client_response_hdr_loc_; Response client_response_; + TSMBuffer cached_response_hdr_buf_; + TSMLoc cached_response_hdr_loc_; + Response cached_response_; + TSMBuffer cached_request_hdr_buf_; + TSMLoc cached_request_hdr_loc_; + Request cached_request_; map<string, shared_ptr<Transaction::ContextValue> > context_values_; TransactionState(TSHttpTxn txn, TSMBuffer client_request_hdr_buf, TSMLoc client_request_hdr_loc) : txn_(txn), client_request_hdr_buf_(client_request_hdr_buf), client_request_hdr_loc_(client_request_hdr_loc), client_request_(txn, client_request_hdr_buf, client_request_hdr_loc), server_request_hdr_buf_(NULL), server_request_hdr_loc_(NULL), server_response_hdr_buf_(NULL), server_response_hdr_loc_(NULL), client_response_hdr_buf_(NULL), - client_response_hdr_loc_(NULL){}; + client_response_hdr_loc_(NULL), cached_response_hdr_buf_(NULL), cached_response_hdr_loc_(NULL), cached_request_hdr_buf_(NULL), + cached_request_hdr_loc_(NULL){}; }; Transaction::Transaction(void *raw_txn) @@ -93,6 +100,14 @@ Transaction::~Transaction() LOG_DEBUG("Releasing client response"); TSHandleMLocRelease(state_->client_response_hdr_buf_, NULL_PARENT_LOC, state_->client_response_hdr_loc_); } + if (state_->cached_request_hdr_buf_ && state_->cached_request_hdr_loc_) { + LOG_DEBUG("Releasing cached request"); + TSHandleMLocRelease(state_->cached_request_hdr_buf_, NULL_PARENT_LOC, state_->cached_request_hdr_loc_); + } + if (state_->cached_response_hdr_buf_ && state_->cached_response_hdr_loc_) { + LOG_DEBUG("Releasing cached response"); + TSHandleMLocRelease(state_->cached_response_hdr_buf_, NULL_PARENT_LOC, state_->cached_response_hdr_loc_); + } delete state_; } @@ -238,6 +253,18 @@ Transaction::getClientResponse() return state_->client_response_; } +Request & +Transaction::getCachedRequest() +{ + return state_->cached_request_; +} + +Response & +Transaction::getCachedResponse() +{ + return state_->cached_response_; +} + string Transaction::getEffectiveUrl() { @@ -450,3 +477,25 @@ Transaction::initClientResponse() state_->client_response_.init(state_->client_response_hdr_buf_, state_->client_response_hdr_loc_); } } + +void +Transaction::initCachedRequest() +{ + static initializeHandles initializeCachedRequestHandles(TSHttpTxnCachedReqGet); + if (initializeCachedRequestHandles(state_->txn_, state_->cached_request_hdr_buf_, state_->cached_request_hdr_loc_, + "cached request")) { + LOG_DEBUG("Initializing cached request"); + state_->cached_request_.init(state_->cached_request_hdr_buf_, state_->cached_request_hdr_loc_); + } +} + +void +Transaction::initCachedResponse() +{ + static initializeHandles initializeCachedResponseHandles(TSHttpTxnCachedRespGet); + if (initializeCachedResponseHandles(state_->txn_, state_->cached_response_hdr_buf_, state_->cached_response_hdr_loc_, + "cached response")) { + LOG_DEBUG("Initializing cached response"); + state_->cached_response_.init(state_->cached_response_hdr_buf_, state_->cached_response_hdr_loc_); + } +} http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5fed400/lib/atscppapi/src/include/atscppapi/Transaction.h ---------------------------------------------------------------------- diff --git a/lib/atscppapi/src/include/atscppapi/Transaction.h b/lib/atscppapi/src/include/atscppapi/Transaction.h index dcd9cf4..805807b 100644 --- a/lib/atscppapi/src/include/atscppapi/Transaction.h +++ b/lib/atscppapi/src/include/atscppapi/Transaction.h @@ -225,6 +225,21 @@ public: Response &getClientResponse(); /** + * Returns a Request object which is the cached request + * + * @return Request object + */ + Request &getCachedRequest(); + + /** + * Returns a Response object which is the cached response + * + * @return Response object + */ + Response &getCachedResponse(); + + + /** * Returns the Effective URL for this transaction taking into account host. */ std::string getEffectiveUrl(); @@ -363,6 +378,22 @@ private: void initClientResponse(); /** + * Used to initialize the Request object for the cache. + * + * @private + */ + + void initCachedRequest(); + + /** + * Used to initialize the Response object for the cache. + * + * @private + */ + + void initCachedResponse(); + + /** * Returns a list of TransactionPlugin pointers bound to the current Transaction * * @private http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5fed400/lib/atscppapi/src/include/utils_internal.h ---------------------------------------------------------------------- diff --git a/lib/atscppapi/src/include/utils_internal.h b/lib/atscppapi/src/include/utils_internal.h index c08636e..e9dc504 100644 --- a/lib/atscppapi/src/include/utils_internal.h +++ b/lib/atscppapi/src/include/utils_internal.h @@ -89,6 +89,18 @@ namespace utils transaction.initClientResponse(); } + static void + initTransactionCachedRequest(Transaction &transaction) + { + transaction.initCachedRequest(); + } + + static void + initTransactionCachedResponse(Transaction &transaction) + { + transaction.initCachedResponse(); + } + static const std::list<TransactionPlugin *> & getTransactionPlugins(const Transaction &transaction) { http://git-wip-us.apache.org/repos/asf/trafficserver/blob/e5fed400/lib/atscppapi/src/utils_internal.cc ---------------------------------------------------------------------- diff --git a/lib/atscppapi/src/utils_internal.cc b/lib/atscppapi/src/utils_internal.cc index a62e1b8..ff0012e 100644 --- a/lib/atscppapi/src/utils_internal.cc +++ b/lib/atscppapi/src/utils_internal.cc @@ -69,6 +69,10 @@ handleTransactionEvents(TSCont cont, TSEvent event, void *edata) case TS_EVENT_HTTP_SEND_RESPONSE_HDR: utils::internal::initTransactionClientResponse(transaction); break; + case TS_EVENT_HTTP_READ_CACHE_HDR: + utils::internal::initTransactionCachedRequest(transaction); + utils::internal::initTransactionCachedResponse(transaction); + break; case TS_EVENT_HTTP_TXN_CLOSE: { // opening scope to declare plugins variable below const std::list<TransactionPlugin *> &plugins = utils::internal::getTransactionPlugins(transaction); for (std::list<TransactionPlugin *>::const_iterator iter = plugins.begin(), end = plugins.end(); iter != end; ++iter) { @@ -99,6 +103,7 @@ setupTransactionManagement() TSHttpHookAdd(TS_HTTP_SEND_REQUEST_HDR_HOOK, cont); TSHttpHookAdd(TS_HTTP_READ_RESPONSE_HDR_HOOK, cont); TSHttpHookAdd(TS_HTTP_SEND_RESPONSE_HDR_HOOK, cont); + TSHttpHookAdd(TS_HTTP_READ_CACHE_HDR_HOOK, cont); TSHttpHookAdd(TS_HTTP_TXN_CLOSE_HOOK, cont); }