******************************************************************/
/**
- * @file
- *
- * This file contains the common data structures between Resource, CA and
- * adapters.
+ * @file cacommon.h
+ * @brief This file contains the common data structures between Resource , CA and adapters
*/
-#ifndef __CA_COMMON_H_
-#define __CA_COMMON_H_
+#ifndef CA_COMMON_H_
+#define CA_COMMON_H_
#include <stdint.h>
#include <stdlib.h>
#endif
/**
+ *@brief Maximum length of the remoteEndpoint identity
+ */
+#define CA_MAX_ENDPOINT_IDENTITY_LEN (32)
+
+/**
* @brief option types - the highest option number 63
*/
#define CA_OPTION_IF_MATCH 1
*/
typedef char *CAToken_t;
-/**
- * @enum CAConnectivityType_t
- * @brief Different connectivities that are handled in Connectivity Abstraction
- */
+// The following flags are the same as the equivalent OIC values in
+// octypes.h, allowing direct copying with slight fixup.
+// The CA layer should used the OC types when build allows that.
+#define MAX_ADDR_STR_SIZE_CA (40)
+
typedef enum
{
- CA_ETHERNET = (1 << 0), /**< Ethernet Connection */
- CA_WIFI = (1 << 1), /**< WIFI Connection */
- CA_EDR = (1 << 2), /**< EDR Connection */
- CA_LE = (1 << 3) /**< LE Connection */
-} CAConnectivityType_t;
+ CA_DEFAULT_ADAPTER = 0,
+
+ // value zero indicates discovery
+ CA_ADAPTER_IP = (1 << 0), // IPv4 and IPv6, including 6LoWPAN
+ CA_ADAPTER_GATT_BTLE = (1 << 1), // GATT over Bluetooth LE
+ CA_ADAPTER_RFCOMM_BTEDR = (1 << 2), // RFCOMM over Bluetooth EDR
+} CATransportAdapter_t;
+
+typedef enum
+{
+ CA_DEFAULT_FLAGS = 0,
+
+ // Insecure transport is the default (subject to change)
+ CA_SECURE = (1 << 4), // secure the transport path
+ // IPv4 & IPv6 autoselection is the default
+ CA_IPV6 = (1 << 5), // IP adapter only
+ CA_IPV4 = (1 << 6), // IP adapter only
+ // Link-Local multicast is the default multicast scope for IPv6.
+ // These correspond in both value and position to the IPv6 address bits.
+ CA_SCOPE_INTERFACE = 0x1, // IPv6 Interface-Local scope
+ CA_SCOPE_LINK = 0x2, // IPv6 Link-Local scope (default)
+ CA_SCOPE_REALM = 0x3, // IPv6 Realm-Local scope
+ CA_SCOPE_ADMIN = 0x4, // IPv6 Admin-Local scope
+ CA_SCOPE_SITE = 0x5, // IPv6 Site-Local scope
+ CA_SCOPE_ORG = 0x8, // IPv6 Organization-Local scope
+ CA_SCOPE_GLOBAL = 0xE, // IPv6 Global scope
+} CATransportFlags_t;
/**
* @enum CANetworkStatus_t
CA_INTERFACE_UP /**< Connection is Available */
} CANetworkStatus_t;
-/**
- * @brief Address of the local or remote endpoint
+/*
+ * @brief remoteEndpoint identity
*/
-typedef union
+typedef struct
{
- /**
- * @brief BT Mac Information
- */
- struct
- {
- char btMacAddress[CA_MACADDR_SIZE]; /**< BT mac address **/
- } BT;
-
- /**
- * @brief LE MAC Information
- */
- struct
- {
- char leMacAddress[CA_MACADDR_SIZE]; /**< BLE mac address **/
- } LE;
-
- /**
- * @brief IP Information for wifi and ethernet ports
- */
- struct
- {
- char ipAddress[CA_IPADDR_SIZE]; /**< Ip address of the interface**/
- uint16_t port; /**< port information**/
- } IP;
-} CAAddress_t;
+ uint16_t id_length;
+ unsigned char id[CA_MAX_ENDPOINT_IDENTITY_LEN];
+} CARemoteId_t;
/**
* @enum CAMessageType_t
} CAMethod_t;
/**
- * @brief Remote endpoint information for connectivities
+ * @brief Endpoint information for connectivities
+ * Must be identical to OCDevAddr.
*/
typedef struct
{
-
- CAURI_t resourceUri; /**< Resource URI information **/
- CAAddress_t addressInfo; /**< Remote Endpoint address **/
- CAConnectivityType_t connectivityType; /**< Connectivity of the endpoint**/
- bool isSecured; /**< Secure connection**/
-} CARemoteEndpoint_t;
-
-
-/**
- * @brief Group endpoint information for connectivities
- */
-typedef struct
-{
- CAURI_t resourceUri; /**< Resource URI information **/
- CAConnectivityType_t connectivityType; /**< Connectivity of the endpoint**/
-} CAGroupEndpoint_t;
-
-/**
- @brief Local Connectivity information
- */
-typedef struct
-{
- CAAddress_t addressInfo; /**< Address of the interface **/
- CAConnectivityType_t type; /**< Connectivity of local device **/
- bool isSecured; /**< Secure connection**/
-} CALocalConnectivity_t;
+ CATransportAdapter_t adapter; // adapter type
+ CATransportFlags_t flags; // transport modifiers
+ char addr[MAX_ADDR_STR_SIZE_CA]; // address for all
+ uint32_t interface; // usually zero for default interface
+ uint16_t port; // for IP
+ CARemoteId_t identity; // endpoint identity
+} CAEndpoint_t;
/**
* @enum CAResult_t
*/
typedef enum
{
- /* Success status code - START HERE */
+ // Result code - START HERE
CA_STATUS_OK = 0, /**< Success */
CA_STATUS_INVALID_PARAM, /**< Invalid Parameter */
CA_ADAPTER_NOT_ENABLED, /**< Adapter is not enabled */
CA_DESTINATION_NOT_REACHABLE, /**< Destination is not reachable */
CA_SOCKET_OPERATION_FAILED, /**< Socket operation failed */
CA_SEND_FAILED, /**< Send request failed */
- CA_RECEVIE_FAILED, /**< Receive failed */
+ CA_RECEIVE_FAILED, /**< Receive failed */
CA_MEMORY_ALLOC_FAILED, /**< Memory allocation failed */
CA_REQUEST_TIMEOUT, /**< Request is Timeout */
CA_DESTINATION_DISCONNECTED, /**< Destination is disconnected */
CA_NOT_SUPPORTED, /**< Not supported */
+ CA_STATUS_NOT_INITIALIZED, /**< CA layer is not initialized */
CA_STATUS_FAILED =255 /**< Failure */
/* Result code - END HERE */
} CAResult_t;
CA_CREATED = 201, /**< Created */
CA_DELETED = 202, /**< Deleted */
CA_BAD_REQ = 400, /**< Bad Request */
+ CA_UNAUTHORIZED_REQ = 401, /**< Unauthorized Request */
CA_BAD_OPT = 402, /**< Bad Option */
+ CA_FORBIDDEN_REQ = 403, /**< Forbidden Request */
CA_NOT_FOUND = 404, /**< Not found */
CA_INTERNAL_SERVER_ERROR = 500, /**< Internal Server Error */
CA_RETRANSMIT_TIMEOUT = 504 /**< Retransmit timeout */
uint16_t optionID; /**< The header option ID which will be
added to communication packets */
uint16_t optionLength; /**< Option Length **/
- uint8_t optionData[CA_MAX_HEADER_OPTION_DATA_LENGTH]; /**< Optional data values**/
+ char optionData[CA_MAX_HEADER_OPTION_DATA_LENGTH]; /**< Optional data values**/
} CAHeaderOption_t;
/**
CAHeaderOption_t *options; /** Header Options for the request */
uint8_t numOptions; /**< Number of Header options */
CAPayload_t payload; /**< payload of the request */
+ CAURI_t resourceUri; /**< Resource URI information **/
} CAInfo_t;
/**
{
CAMethod_t method; /**< Name of the Method Allowed */
CAInfo_t info; /**< Information of the request. */
+ bool isMulticast; /**< is multicast request */
} CARequestInfo_t;
/**
CAInfo_t info; /**< Information of the response */
} CAResponseInfo_t;
+/**
+ * @brief Error information from CA
+ * contains error code and message information
+ *
+ * This structure holds error information
+ */
+typedef struct
+{
+ CAResult_t result; /**< CA API request result */
+ CAInfo_t info; /**< message information such as token and payload data
+ helpful to identify the error */
+} CAErrorInfo_t;
+
+/**
+ * @brief Hold global variables for CA layer (also used by RI layer)
+ */
+typedef struct
+{
+ CATransportFlags_t serverFlags;
+ CATransportFlags_t clientFlags;
+} CAGlobals_t;
+
+extern CAGlobals_t caglobals;
+
#ifdef __cplusplus
} /* extern "C" */
#endif
-#endif //#ifndef __CA_COMMON_H_
+#endif //#ifndef CA_COMMON_H_