blob: 2245ee5b9dbf2e269410b80731f903962957f6e0 [file] [log] [blame]
/** @file
Some mgmt definitions for relatively general use.
@section license License
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.
*/
#pragma once
/*
* Type definitions.
*/
#include <functional>
#include <string_view>
#include "tscore/ink_defs.h"
#include "tscpp/util/MemSpan.h"
#include "tscpp/util/TextView.h"
typedef int64_t MgmtIntCounter;
typedef int64_t MgmtInt;
typedef int8_t MgmtByte;
typedef float MgmtFloat;
typedef char *MgmtString;
enum MgmtType {
MGMT_INVALID = -1,
MGMT_INT = 0,
MGMT_FLOAT = 1,
MGMT_STRING = 2,
MGMT_COUNTER = 3,
MGMT_TYPE_MAX = 4,
};
/// Management callback signature.
/// The memory span is the message payload for the callback.
/// This can be a lambda, which should be used if additional context information is needed.
using MgmtCallback = std::function<void(ts::MemSpan<void>)>;
//-------------------------------------------------------------------------
// API conversion functions.
//-------------------------------------------------------------------------
/** Conversion functions to and from an arbitrary type and Management types.
*
* A type that wants to support conversion in the TS API should create a static instance of this
* class and fill in the appropriate members. The TS API set/get functions can then check for a
* @c nullptr to see if the conversion is supported and if so, call a function to do that. The
* @c void* argument is a raw pointer to the typed object. For instance, if this is for transaction
* overrides the pointer will be to the member in the transaction override configuration structure.
* Support for the management types is built in, this is only needed for types that aren't defined
* in this header.
*/
struct MgmtConverter {
/** Load a native type into a @c MgmtInt
*
* This is passed a @c void* which is a pointer to the member in the configuration instance.
* This function must return a @c MgmtInt converted from that value.
*/
MgmtInt (*load_int)(const void *) = nullptr;
/** Store a @c MgmtInt into a native type.
*
* This function is passed a @c void* which is a pointer to the member in the configuration
* instance and a @c MgmtInt. The member should be updated to correspond to the @c MgmtInt value.
*/
void (*store_int)(void *, MgmtInt) = nullptr;
/** Load a @c MgmtFloat from a native type.
*
* This is passed a @c void* which is a pointer to the member in the configuration instance.
* This function must return a @c MgmtFloat converted from that value.
*/
MgmtFloat (*load_float)(const void *) = nullptr;
/** Store a @c MgmtFloat into a native type.
*
* This function is passed a @c void* which is a pointer to the member in the configuration
* instance and a @c MgmtFloat. The member should be updated to correspond to the @c MgmtFloat value.
*/
void (*store_float)(void *, MgmtFloat) = nullptr;
/** Load a native type into view.
*
* This is passed a @c void* which is a pointer to the member in the configuration instance.
* This function must return a @c string_view which contains the text for the member.
*/
std::string_view (*load_string)(const void *) = nullptr;
/** Store a view in a native type.
*
* This is passed a @c void* which is a pointer to the member in the configuration instance.
* This function must return a @c string_view which contains the text for the member.
*/
void (*store_string)(void *, std::string_view) = nullptr;
// Convenience constructors because generally only one pair is valid.
MgmtConverter(MgmtInt (*load)(const void *), void (*store)(void *, MgmtInt));
MgmtConverter(MgmtFloat (*load)(const void *), void (*store)(void *, MgmtFloat));
MgmtConverter(std::string_view (*load)(const void *), void (*store)(void *, std::string_view));
MgmtConverter(MgmtInt (*_load_int)(const void *), void (*_store_int)(void *, MgmtInt), MgmtFloat (*_load_float)(const void *),
void (*_store_float)(void *, MgmtFloat), std::string_view (*_load_string)(const void *),
void (*_store_string)(void *, std::string_view));
};
inline MgmtConverter::MgmtConverter(MgmtInt (*load)(const void *), void (*store)(void *, MgmtInt))
: load_int(load), store_int(store)
{
}
inline MgmtConverter::MgmtConverter(MgmtFloat (*load)(const void *), void (*store)(void *, MgmtFloat))
: load_float(load), store_float(store)
{
}
inline MgmtConverter::MgmtConverter(std::string_view (*load)(const void *), void (*store)(void *, std::string_view))
: load_string(load), store_string(store)
{
}
inline MgmtConverter::MgmtConverter(MgmtInt (*_load_int)(const void *), void (*_store_int)(void *, MgmtInt),
MgmtFloat (*_load_float)(const void *), void (*_store_float)(void *, MgmtFloat),
std::string_view (*_load_string)(const void *), void (*_store_string)(void *, std::string_view))
: load_int(_load_int),
store_int(_store_int),
load_float(_load_float),
store_float(_store_float),
load_string(_load_string),
store_string(_store_string)
{
}
constexpr ts::TextView LM_CONNECTION_SERVER{"processerver.sock"};