diff options
Diffstat (limited to 'libccnx-transport-rta/ccnx/transport/common/ccnx_ConnectionConfig.h')
-rw-r--r-- | libccnx-transport-rta/ccnx/transport/common/ccnx_ConnectionConfig.h | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/libccnx-transport-rta/ccnx/transport/common/ccnx_ConnectionConfig.h b/libccnx-transport-rta/ccnx/transport/common/ccnx_ConnectionConfig.h new file mode 100644 index 00000000..37fbcf8c --- /dev/null +++ b/libccnx-transport-rta/ccnx/transport/common/ccnx_ConnectionConfig.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2017 Cisco and/or its affiliates. + * Licensed 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 ccnx_ConnectionConfig. + * @brief Tranport Stack Connection configuration information. + * + * These are subsystems instantiated within components + * They define per-connection behavior, not stack structure. + * + */ +#ifndef TransportRTA_connectionConfig_h +#define TransportRTA_connectionConfig_h + + +struct ccnx_connection_config; +typedef struct ccnx_connection_config CCNxConnectionConfig; + +/** + * Create a `CCNxConnectionConfig` instance. + * + * The instance must be populated with configuration information before it can be used. + * + * + * @return NULL An error occurred. + * @return non-NULL A valid `CCNxConnectionConfig` instance. + * + * Example: + * @code + * { + * CCNxConnectionConfig *config = ccnxConnectionConfig_Create(); + * + * ccnxConnectionConfig_Destroy(&config); + * @endcode + */ +CCNxConnectionConfig *ccnxConnectionConfig_Create(void); + +/** + * Destroy previously created `CCNxConnectionConfig` instance. + * + * @param [in] configPtr A pointer to a pointer to a valid `CCNxConnectionConfig` instance that will be set to zero upon return. + * + * Example: + * @code + * { + * CCNxConnectionConfig *config = ccnxConnectionConfig_Create(); + * + * ccnxConnectionConfig_Destroy(&config); + * @endcode + */ +void ccnxConnectionConfig_Destroy(CCNxConnectionConfig **configPtr); + +#ifdef CCNxTransport_DISABLE_VALIDATION +# define ccnxConnectionConfig_OptionalAssertValid(_instance_) +#else +# define ccnxConnectionConfig_OptionalAssertValid(_instance_) ccnxConnectionConfig_AssertValid(_instance_) +#endif + +/** + * Determine if an instance of `CCNxTransportConfig` is valid. + * + * Valid means the internal state of the type is consistent with its required current or future behaviour. + * This may include the validation of internal instances of types. + * + * @param [in] config A pointer to a `CCNxTransportConfig` instance. + * + * Example: + * @code + * { + * CCNxConnectionConfig *config = ccnxConnectionConfig_Create(); + * ccnxConnectionConfig_IsValid(config); + * ccnxConnectionConfig_Destroy(&config); + * } + * @endcode + */ +bool ccnxConnectionConfig_IsValid(const CCNxConnectionConfig *config); + +/** + * Assert that an instance of `CCNxTransportConfig` is valid. + * + * Valid means the internal state of the type is consistent with its required current or future behaviour. + * This may include the validation of internal instances of types. + * + * @param [in] config A pointer to a `CCNxTransportConfig` instance. + * + * Example: + * @code + * { + * CCNxConnectionConfig *config = ccnxConnectionConfig_Create(); + * ccnxConnectionConfig_AssertValid(config); + * ccnxConnectionConfig_Destroy(&config); + * } + * @endcode + */ +void ccnxConnectionConfig_AssertValid(const CCNxConnectionConfig *config); + +/** + * Determine if two `CCNxConnectionConfig` instances are equal. + * + * The following equivalence relations on non-null `CCNxConnectionConfig` instances are maintained: * + * * It is reflexive: for any non-null reference value x, `ccnxConnectionConfig_Equals(x, x)` must return true. + * + * * It is symmetric: for any non-null reference values x and y, `ccnxConnectionConfig_Equals(x, y)` must return true if and only if + * `ccnxConnectionConfig_Equals(y x)` returns true. + * + * * It is transitive: for any non-null reference values x, y, and z, if + * `ccnxConnectionConfig_Equals(x, y)` returns true and + * `ccnxConnectionConfig_Equals(y, z)` returns true, + * then `ccnxConnectionConfig_Equals(x, z)` must return true. + * + * * It is consistent: for any non-null reference values x and y, multiple invocations of `ccnxConnectionConfig_Equals(x, y)` + * consistently return true or consistently return false. + * + * * For any non-null reference value x, `ccnxConnectionConfig_Equals(x, NULL)` must return false. + * + * @param [in] x A pointer to a valid CCNxConnectionConfig instance. + * @param [in] y A pointer to a valid CCNxConnectionConfig instance. + * + * @return true The instances x and y are equal. + * + * Example: + * @code + * { + * CCNxConnectionConfig *a = ccnxConnectionConfig_Create(); + * CCNxConnectionConfig *b = ccnxConnectionConfig_Create(); + * + * if (ccnxConnectionConfig_Equals(a, b)) { + * printf("Instances are equal.\n"); + * } + * + * ccnxConnectionConfig_Release(&a); + * ccnxConnectionConfig_Release(&b); + * } + * @endcode + * @see ccnxConnectionConfig_HashCode + */ +bool ccnxConnectionConfig_Equals(const CCNxConnectionConfig *x, const CCNxConnectionConfig *y); + + +/** + * Get the underlying JSON representation of a `CCNxConnectionConfig` instance. + * + * @param [in] config A pointer to a valid `CCNxConnectionConfig` instance. + * + * @return non-NULL A pointer to a valid PARCJSON instance. + * + * Example: + * @code + * { + * <#example#> + * } + * @endcode + */ +PARCJSON *ccnxConnectionConfig_GetJson(const CCNxConnectionConfig *cssonfig); + +/** + * Add a component's configuration to the connection's configuration. Each component snippit will + * result in an addition like this: + * + * { "key" : { param1 : value1, param2 : value2, ... } } + */ +CCNxConnectionConfig *ccnxConnectionConfig_Add(CCNxConnectionConfig *connectionConfig, const char *key, PARCJSONValue *componentJson); + +/** + * Make a copy of the given CCNxConnectionConfig. The original and copy + * must both be destroyed. + */ +CCNxConnectionConfig *ccnxConnectionConfig_Copy(const CCNxConnectionConfig *original); + +/** + * Print a human readable representation of the given instance. + * + * @param [in] indentation The level of indentation to use to pretty-print the output. + * @param [in] instance A pointer to the instance to display. + */ +void ccnxConnectionConfig_Display(const CCNxConnectionConfig *instance, int indentation); + +#endif |