blob: 1d76ed5d8ff38dffa45256e1bc1f3cb304296f6b [file] [log] [blame]
/**
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 GlobalPlugin.h
* @brief Contains the interface used in creating Global plugins.
*/
#pragma once
#include "tscpp/api/Plugin.h"
namespace atscppapi
{
struct GlobalPluginState;
/**
* @brief The interface used when creating a GlobalPlugin.
*
* A GlobalPlugin is a Plugin that will fire for a given hook on all Transactions.
* In other words, a GlobalPlugin is not tied to a specific plugin, a Transaction
* specific plugin would be a TransactionPlugin.
*
* Depending on the
* type of hook you choose to build you will implement one or more callback methods.
* Here is a simple example of a GlobalPlugin:
*
* \code
* class GlobalHookPlugin : public GlobalPlugin {
* public:
* GlobalHookPlugin() {
* registerHook(HOOK_READ_REQUEST_HEADERS_PRE_REMAP);
* }
* virtual void handleReadRequestHeadersPreRemap(Transaction &transaction) {
* std::cout << "Hello from handleReadRequesHeadersPreRemap!" << std::endl;
* transaction.resume();
* }
* };
* \endcode
* @see Plugin
*/
class GlobalPlugin : public Plugin
{
public:
/**
* registerHook is the mechanism used to attach a global hook.
*
* \note Whenever you register a hook you must have the appropriate callback defined in your GlobalPlugin
* see HookType and Plugin for the correspond HookTypes and callback methods. If you fail to implement the
* callback, a default implementation will be used that will only resume the Transaction.
*
* @param HookType the type of hook you wish to register
* @see HookType
* @see Plugin
*/
void registerHook(Plugin::HookType);
~GlobalPlugin() override;
protected:
/**
* Constructor.
*
* @param ignore_internal_transactions When true, all hooks registered by this plugin are ignored
* for internal transactions (internal transactions are created
* when other plugins create requests). Defaults to false.
*/
GlobalPlugin(bool ignore_internal_transactions = false);
private:
GlobalPluginState *state_; /**< Internal state tied to a GlobalPlugin */
};
} // namespace atscppapi