// Copyright (C) 2017 Internet Systems Consortium, Inc. ("ISC")
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
/**
@page agentHooks The Hooks API for the Control Agent
@section agentHooksIntroduction Introduction
The Kea Control Agent features "Hooks" API that allows the user-written
code to be integrated with the Control Agent and handle some
of the control commands. The hooks library can be either used to provide
support for the new commands (not supported natively by the Control Agent)
or "override" implementation of the existing handlers. The hooks library
signals to the Control Agent that it has processed the given command by
setting "next step status" value to SKIP.
The hooks library can also be used to perform some additional tasks
related to reception of the control command instead of handling it, e.g.
logging or notifying some external service about reception of the
command.
@section agentHooksHookPoints Hooks in the Control Agent
@subsection agentHooksControlCommandReceive control_command_receive
- @b Arguments:
- name: @b command, type: isc::data::ConstElementPtr, direction: in/out
- name: @b response, type: isc::data::ConstElementPtr, direction: in/out
- @b Description: this callout is executed when Control Agent receives a
control command over the RESTful interface (HTTP).
The "command" argument is a pointer to the parsed JSON structure
including command name and command arguments. If the callout implements
the specified command, it handles the command and creates appropriate
response. The response should be returned in the "response" argument.
In most cases, the callout which handles the command will set the next
step action to SKIP, to prevent the server from trying to handle the
command on its own and overriding the response created by the callouts.
A notable exception is the 'list-commands' command for which the callouts
should not set the next step action to SKIP. The server has a special
code path for this command which combines the list of commands returned
by the callouts with the list of commands supported by the server. If
the callout sets the next step action to SKIP in this case, the server
will only return the list of commands supported by the hook library.
The callout can modify the command arguments to influence the command
processing by the Command Manager. For example, it may freely modify
the configuration received in 'config-set' before it is processed by
the server. The SKIP action is not set in this case.
- Next step status: if any callout sets the next step action to SKIP,
the server will assume that the command has been handled by the callouts
and will expect that the response is provided in the "response" argument.
The Control Agent will not handle the command in this case but simply
return the response returned by the callout to the caller.
*/