| /** |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| /** |
| * @file Plugin.h |
| * |
| * @brief Contains the base interface used in creating Global and Transaction plugins. |
| * \note This interface can never be implemented directly, it should be implemented |
| * through extending GlobalPlugin, TransactionPlugin, or TransformationPlugin. |
| */ |
| |
| // The C++ Plugin API is deprecated in ATS 10, and will be removed in ATS 11. |
| |
| #pragma once |
| |
| #include "tscpp/api/Request.h" |
| #include "tscpp/api/Transaction.h" |
| #include "tscpp/api/noncopyable.h" |
| |
| namespace atscppapi |
| { |
| /** |
| * @brief The base interface used when creating a Plugin. |
| * |
| * \note This interface can never be implemented directly, it should be implemented |
| * through extending GlobalPlugin, TransactionPlugin, or TransformationPlugin. |
| * |
| * @see TransactionPlugin |
| * @see GlobalPlugin |
| * @see TransformationPlugin |
| */ |
| class Plugin : noncopyable |
| { |
| public: |
| /** |
| * A enumeration of the available types of Hooks. These are used with GlobalPlugin::registerHook() |
| * and TransactionPlugin::registerHook(). |
| */ |
| enum HookType { |
| HOOK_READ_REQUEST_HEADERS_PRE_REMAP = 0, /**< This hook will be fired before remap has occurred. */ |
| HOOK_READ_REQUEST_HEADERS_POST_REMAP, /**< This hook will be fired directly after remap has occurred. */ |
| HOOK_SEND_REQUEST_HEADERS, /**< This hook will be fired right before request headers are sent to the origin */ |
| HOOK_READ_RESPONSE_HEADERS, /**< This hook will be fired right after response headers have been read from the origin */ |
| HOOK_SEND_RESPONSE_HEADERS, /**< This hook will be fired right before the response headers are sent to the client */ |
| HOOK_OS_DNS, /**< This hook will be fired right after the OS DNS lookup */ |
| HOOK_READ_REQUEST_HEADERS, /**< This hook will be fired after the request is read. */ |
| HOOK_READ_CACHE_HEADERS, /**< This hook will be fired after the CACHE hdrs. */ |
| HOOK_CACHE_LOOKUP_COMPLETE, /**< This hook will be fired after cache lookup complete. */ |
| HOOK_TXN_CLOSE, /**< This hook will be fired after send response headers, only for TransactionPlugins::registerHook()!. */ |
| HOOK_SELECT_ALT /**< This hook will be fired after select alt. */ |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_READ_REQUEST_HEADERS_PRE_REMAP |
| */ |
| virtual void |
| handleReadRequestHeadersPreRemap(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_READ_REQUEST_HEADERS_POST_REMAP |
| */ |
| virtual void |
| handleReadRequestHeadersPostRemap(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_SEND_REQUEST_HEADERS |
| */ |
| virtual void |
| handleSendRequestHeaders(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_READ_RESPONSE_HEADERS |
| */ |
| virtual void |
| handleReadResponseHeaders(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_SEND_RESPONSE_HEADERS |
| */ |
| virtual void |
| handleSendResponseHeaders(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_OS_DNS |
| */ |
| virtual void |
| handleOsDns(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_READ_REQUEST_HEADERS |
| */ |
| virtual void |
| handleReadRequestHeaders(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_READ_CACHE_HEADERS |
| */ |
| virtual void |
| handleReadCacheHeaders(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_CACHE_LOOKUP_COMPLETE |
| */ |
| virtual void |
| handleReadCacheLookupComplete(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_TXN_CLOSE |
| */ |
| virtual void |
| handleTxnClose(Transaction &transaction) |
| { |
| transaction.resume(); |
| }; |
| |
| /** |
| * This method must be implemented when you hook HOOK_SELECT_ALT |
| */ |
| virtual void handleSelectAlt(const Request & /* clientReq ATS_UNUSED */, const Request & /* cachedReq ATS_UNUSED */, |
| const Response & /* cachedResp ATS_UNUSED */) {}; |
| |
| virtual ~Plugin(){}; |
| |
| protected: |
| /** |
| * \note This interface can never be implemented directly, it should be implemented |
| * through extending GlobalPlugin, TransactionPlugin, or TransformationPlugin. |
| * |
| * @private |
| */ |
| Plugin(){}; |
| }; |
| |
| /**< Human readable strings for each HookType, you can access them as HOOK_TYPE_STRINGS[HOOK_OS_DNS] for example. */ |
| extern const std::string HOOK_TYPE_STRINGS[]; |
| |
| bool RegisterGlobalPlugin(const char *name, const char *vendor, const char *email); |
| inline bool |
| RegisterGlobalPlugin(std::string const &name, std::string const &vendor, std::string const &email) |
| { |
| return RegisterGlobalPlugin(name.c_str(), vendor.c_str(), email.c_str()); |
| } |
| |
| } // namespace atscppapi |