| /** @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"}; |