/* * 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_TransportConfig.h * @brief The Transport Configuration information. * * The API composes the stack and connection parameters using these functions. * The examples below are for the RTA Transport. * * * CCNxStackConfig *stackConfig = ccnxStackConfig_Create(); * ccnxStackConfig_AppendComponents(stackConfig, { RtaComponentNames[API_CONNECTOR], RtaComponentNames[FC_VEGAS], * RtaComponentNames[CODEC_CCNB], RtaComponentNames[FWD_CCND] } ); * * ccnxStackConfig_AppendApiConnector(stackConfig); * ccnxStackConfig_AppendVegasFlowController(stackConfig); * ccnxStackConfig_AppendCcndCodec(stackConfig); * ccnxStackConfig_AppendCcndForwarder(stackConfig); * * CCNxConnectionConfig *connConfig = ccnxConnectionConfig_Create(); * ccnxConnectionConfig_publicKeySignerPkcs12Store(connConfig, "/Users/mmosko/keystore.p12", "123abc"); * ccnxConnectionConfig_InMemoryVerifier(connConfig); * * * RtaCommand *cmdCreateStack = rtaCommand_CreateStack( (CommandCreateStack) { .stack_id = 7, .params = ccnxStackConfig_GetJson(stackConfig) } ); * rtaCommand_write(cmdCreateStack, command_fd); * ccnxStackConfig_Release(&stackConfig); * * RtaCommand *cmdOpen = rtaCommand_Open( (CommandOpen) { .stack_id = 7, .api_fd = 12, .transport_fd = 13, .params = connecitonConfig_GetJson(connConfig) } ); * rtaCommand_write(cmdCreateStack, command_fd); * ccnxConnectionConfig_Destroy(&connConfig); * * */ #ifndef Libccnx_transport_Configuration_h #define Libccnx_transport_Configuration_h #include #include #include struct transport_config; typedef struct transport_config CCNxTransportConfig; /** * Create a `CCNxTransportConfig` instance. * * The instance must be populated with configuration information before it can be used. * * @param [in] stackConfig A pointer to a valid `CCNxStackConfig` instance. * @param [in] connectionConfig A pointer to a valid `CCNxConnectionConfig` instance. * @return NULL An error occurred. * @return non-NULL A valid `CCNxTransportConfig` instance. * * Example: * @code * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * * ccnxTransportConfig_Destroy(&config); * @endcode */ CCNxTransportConfig *ccnxTransportConfig_Create(CCNxStackConfig *stackConfig, CCNxConnectionConfig *connectionConfig); #ifdef CCNxTransport_DISABLE_VALIDATION # define ccnxTransportConfig_OptionalAssertValid(_instance_) #else # define ccnxTransportConfig_OptionalAssertValid(_instance_) ccnxTransportConfig_AssertValid(_instance_) #endif /** * 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 * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * ccnxTransportConfig_AssertValid(config); * ccnxTransportConfig_Destroy(&config); * } * @endcode * @see ccnxTransportConfig_IsValid */ void ccnxTransportConfig_AssertValid(const CCNxTransportConfig *config); /** * Destroy previously created `CCNxTransportConfig` instance. * * @param [in] configPtr A pointer to a pointer to a valid `CCNxTransportConfig` instance that will be set to zero upon return. * * Example: * @code * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * * ccnxTransportConfig_Destroy(&config); * } * @endcode */ void ccnxTransportConfig_Destroy(CCNxTransportConfig **configPtr); /** * Get the `CCNxStackConfig` instance in the given `CCNxTransportConfig` * * @param [in] config A pointer to a valid `CCNxTransportConfig` instance. * * @return A pointer to the `CCNxStackConfig` instance in the given `CCNxTransportConfig` * * Example: * @code * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * * CCNxStackConfig *stack = ccnxTransportConfig_GetStackConfig(config); * * ccnxTransportConfig_Destroy(&config); * } * @endcode */ CCNxStackConfig *ccnxTransportConfig_GetStackConfig(const CCNxTransportConfig *config); /** * Get the `CCNxConnectionConfig` instance in the given `CCNxTransportConfig` * * @param [in] config A pointer to a valid `CCNxTransportConfig` instance. * * @return A pointer to the `CCNxConnectionConfig` instance in the given `CCNxTransportConfig` * * Example: * @code * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * * CCNxConnectionConfig *connection = ccnxTransportConfig_GetConnectionConfig(config); * * ccnxTransportConfig_Destroy(&config); * } * @endcode */ CCNxConnectionConfig *ccnxTransportConfig_GetConnectionConfig(const CCNxTransportConfig *config); /** * 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. * * @return true The instance is valid. * @return false The instance is not valid. * * Example: * @code * { * CCNxTransportConfig *config = ccnxTransportConfig_Create(stackConfig, connectionConfig); * ccnxTransportConfig_IsValid(config); * ccnxTransportConfig_Destroy(&config); * } * @endcode * @see ccnxTransportConfig_AssertValid */ bool ccnxTransportConfig_IsValid(const CCNxTransportConfig *config); /** * Determine if two `CCNxTransportConfig` instances are equal. * * The following equivalence relations on non-null `CCNxTransportConfig` instances are maintained: * * * It is reflexive: for any non-null reference value x, `ccnxTransportConfig_Equals(x, x)` must return true. * * * It is symmetric: for any non-null reference values x and y, `ccnxTransportConfig_Equals(x, y)` must return true if and only if * `ccnxTransportConfig_Equals(y x)` returns true. * * * It is transitive: for any non-null reference values x, y, and z, if * `ccnxTransportConfig_Equals(x, y)` returns true and * `ccnxTransportConfig_Equals(y, z)` returns true, * then `ccnxTransportConfig_Equals(x, z)` must return true. * * * It is consistent: for any non-null reference values x and y, multiple invocations of `ccnxTransportConfig_Equals(x, y)` * consistently return true or consistently return false. * * * For any non-null reference value x, `ccnxTransportConfig_Equals(x, NULL)` must return false. * * @param [in] x A pointer to a valid CCNxTransportConfig instance. * @param [in] y A pointer to a valid CCNxTransportConfig instance. * * @return true The instances x and y are equal. * * Example: * @code * { * CCNxTransportConfig *a = ccnxTransportConfig_Create(); * CCNxTransportConfig *b = ccnxTransportConfig_Create(); * * if (ccnxTransportConfig_Equals(a, b)) { * printf("Instances are equal.\n"); * } * * ccnxTransportConfig_Release(&a); * ccnxTransportConfig_Release(&b); * } * @endcode * @see ccnxTransportConfig_HashCode */ bool ccnxTransportConfig_Equals(const CCNxTransportConfig *x, const CCNxTransportConfig *y); /** * Make a copy of the given TransportConfig. The original and copy * must both be destroyed. */ CCNxTransportConfig *ccnxTransportConfig_Copy(const CCNxTransportConfig *original); #endif // Libccnx_transport_Configuration_h