-/******************************************************************
+/* ****************************************************************
*
* Copyright 2014 Samsung Electronics All Rights Reserved.
*
* @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>
+#include <stdbool.h>
+
#ifdef __cplusplus
extern "C"
#endif
/**
- @brief IP address Length
+ * @brief IP address Length
*/
#define CA_IPADDR_SIZE 16
/**
- @brief Mac address length for BT port
+ * @brief Mac address length for BT port
*/
#define CA_MACADDR_SIZE 18
/**
- @brief Max header options data length
+ * @brief Max header options data length
*/
#define CA_MAX_HEADER_OPTION_DATA_LENGTH 16
/**
- @brief Max URI length
+* @brief Max token length
+*/
+#define CA_MAX_TOKEN_LEN (8)
+
+/**
+ * @brief Max URI length
*/
-#define CA_MAX_URI_LENGTH 128
+#ifdef ARDUINO
+#define CA_MAX_URI_LENGTH 128 /* maximum size of URI for embedded platforms*/
+#else
+#define CA_MAX_URI_LENGTH 512 /* maximum size of URI for other platforms*/
+#endif
/**
-@brief option types - the highest option number 63
-*/
+ * @brief Max PDU length supported
+ */
+#ifdef ARDUINO
+#define COAP_MAX_PDU_SIZE 320 /* maximum size of a CoAP PDU for embedded platforms*/
+#else
+#define COAP_MAX_PDU_SIZE 1400 /* maximum size of a CoAP PDU for big platforms*/
+#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
#define CA_OPTION_ETAG 4
#define CA_OPTION_IF_NONE_MATCH 5
+#define CA_OPTION_OBSERVE 6
#define CA_OPTION_LOCATION_PATH 8
#define CA_OPTION_URI_PATH 11
#define CA_OPTION_CONTENT_FORMAT 12
#define CA_OPTION_URI_QUERY 15
#define CA_OPTION_ACCEPT 17
#define CA_OPTION_LOCATION_QUERY 20
-#define CA_OPTION_OBSERVE 6
/**
- @brief Payload information from resource model
+ * @brief Payload information from resource model
*/
typedef char *CAPayload_t;
/**
- @brief URI for the OIC base.CA considers relative URI as the URI.
+ * @brief URI for the OIC base.CA considers relative URI as the URI.
*/
typedef char *CAURI_t;
/**
- @brief Token information for mapping the request and responses by resource model
+ * @brief Token information for mapping the request and responses by resource model
*/
typedef char *CAToken_t;
-/**
- @brief Boolean value used for specifying the success or failure
- */
+// 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_FALSE = 0,
- CA_TRUE
-} CABool_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;
-/**
- @brief Different connectivities that are handled in Connectivity Abstraction
- */
typedef enum
{
- CA_ETHERNET = (1 << 0),
- CA_WIFI = (1 << 1),
- CA_EDR = (1 << 2),
- CA_LE = (1 << 3)
-} CAConnectivityType_t;
+ 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;
/**
- @brief Information about the network status.CA_INTERFACE_UP means connectivity is available
+ * @enum CANetworkStatus_t
+ * @brief Information about the network status.
*/
typedef enum
{
- CA_INTERFACE_UP,
- CA_INTERFACE_DOWN
+ CA_INTERFACE_DOWN, /**< Connection is not available */
+ 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
- {
- /** @brief BT mac address **/
- char btMacAddress[CA_MACADDR_SIZE];
- } BT;
-
- /**
- @brief LE MAC Information
- */
- struct
- {
- /** @brief BLE mac address **/
- char leMacAddress[CA_MACADDR_SIZE];
- } LE;
-
- /**
- @brief IP Information for wifi and ethernet ports
- */
- struct
- {
- /** Ip address of the interface**/
- char ipAddress[CA_IPADDR_SIZE];
- /** port information**/
- uint32_t port;
- } IP;
-} CAAddress_t;
+ uint16_t id_length;
+ unsigned char id[CA_MAX_ENDPOINT_IDENTITY_LEN];
+} CARemoteId_t;
/**
- @brief Message Type for Base source code
+ * @enum CAMessageType_t
+ * @brief Message Type for Base source code
*/
typedef enum
{
- CA_MSG_CONFIRM = 0, /* confirmable message (requires ACK/RST) */
- CA_MSG_NONCONFIRM, /* non-confirmable message (one-shot message) */
- CA_MSG_ACKNOWLEDGE, /* used to acknowledge confirmable messages */
- CA_MSG_RESET /* indicates error in received messages */
+ CA_MSG_CONFIRM = 0, /**< confirmable message (requires ACK/RST) */
+ CA_MSG_NONCONFIRM, /**< non-confirmable message (one-shot message) */
+ CA_MSG_ACKNOWLEDGE, /**< used to acknowledge confirmable messages */
+ CA_MSG_RESET /**< used to indicates not-interested or error (lack of context)in
+ received messages */
} CAMessageType_t;
/**
- @brief Allowed method to be used by resource model
+ * @enum CAMethod_t
+ * @brief Allowed method to be used by resource model
*/
typedef enum
{
- CA_GET = 1,
- CA_POST,
- CA_PUT,
- CA_DELETE
+ CA_GET = 1, /**< GET Method */
+ CA_POST, /**< POST Method */
+ CA_PUT, /**< PUT Method */
+ CA_DELETE /**< DELETE Method */
} CAMethod_t;
/**
- @brief Remote endpoint information for connectivities
+ * @brief Endpoint information for connectivities
+ * Must be identical to OCDevAddr.
*/
typedef struct
{
- /** Resource URI information **/
- CAURI_t resourceUri;
- /** Remote Endpoint address **/
- CAAddress_t addressInfo;
- /** Connectivity of the endpoint**/
- CAConnectivityType_t connectivityType;
- /** Secure connection**/
- CABool_t isSecured;
-} CARemoteEndpoint_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;
/**
- @brief Group endpoint information for connectivities
- */
-typedef struct
-{
- /** Resource URI information **/
- CAURI_t resourceUri;
- /** Connectivity of the endpoint**/
- CAConnectivityType_t connectivityType;
-} CAGroupEndpoint_t;
-
-/**
- @brief Local Connectivity information
- */
-typedef struct
-{
- /** address of the interface **/
- CAAddress_t addressInfo;
- /** Connectivity type that localconnectivity avaialble **/
- CAConnectivityType_t type;
- /** Secure connection**/
- CABool_t isSecured;
-} CALocalConnectivity_t;
-
-/**
- @brief Enums for CA return values
+ * @enum CAResult_t
+ * @brief Enums for CA return values
*/
typedef enum
{
- /* Success status code - START HERE */
- CA_STATUS_OK = 0,
- CA_STATUS_INVALID_PARAM,
- CA_ADAPTER_NOT_ENABLED,
- CA_SERVER_STARTED_ALREADY,
- CA_SERVER_NOT_STARTED,
- CA_DESTINATION_NOT_REACHABLE,
- CA_SOCKET_OPERATION_FAILED,
- CA_SEND_FAILED,
- CA_RECEVIE_FAILED,
- CA_MEMORY_ALLOC_FAILED,
- CA_REQUEST_TIMEOUT,
- CA_DESTINATION_DISCONNECTED,
- CA_STATUS_FAILED,
- CA_NOT_SUPPORTED
+ // Result code - START HERE
+ CA_STATUS_OK = 0, /**< Success */
+ CA_STATUS_INVALID_PARAM, /**< Invalid Parameter */
+ CA_ADAPTER_NOT_ENABLED, /**< Adapter is not enabled */
+ CA_SERVER_STARTED_ALREADY, /**< Server is started already */
+ CA_SERVER_NOT_STARTED, /**< Server is not started*/
+ CA_DESTINATION_NOT_REACHABLE, /**< Destination is not reachable */
+ CA_SOCKET_OPERATION_FAILED, /**< Socket operation failed */
+ CA_SEND_FAILED, /**< Send request 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;
/**
- @brief Enums for CA Response values
+ * @enum CAResponseResult_t
+ * @brief Enums for CA Response values
*/
typedef enum
{
- /* Success status code - START HERE */
- CA_SUCCESS = 200,
- CA_CREATED = 201,
- CA_DELETED = 202,
- CA_BAD_REQ = 400,
- CA_BAD_OPT = 402,
- CA_NOT_FOUND = 404,
- CA_RETRANSMIT_TIMEOUT = 500
+ /* Response status code - START HERE */
+ CA_EMPTY = 0, /**< Empty */
+ CA_SUCCESS = 200, /**< Success */
+ 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 */
/* Response status code - END HERE */
} CAResponseResult_t;
/**
- @brief Transport Protocol IDs for additional options
+ * @enum CATransportProtocolID_t
+ * @brief Transport Protocol IDs for additional options
*/
typedef enum
{
- CA_INVALID_ID = (1 << 0),
- CA_COAP_ID = (1 << 1)
+ CA_INVALID_ID = (1 << 0), /**< Invalid ID */
+ CA_COAP_ID = (1 << 1) /**< COAP ID */
} CATransportProtocolID_t;
/**
+ * @enum CAAdapterState_t
+ * @brief Adapter State to indicate the network changed notifications.
+ */
+typedef enum
+{
+ CA_ADAPTER_DISABLED, /**< Adapter is Disabled */
+ CA_ADAPTER_ENABLED /**< Adapter is Enabled */
+} CAAdapterState_t;
+
+/**
* @brief Header options structure to be filled
*
* This structure is used to hold header information.
*/
typedef struct
{
- /** The protocol ID this option applies to**/
- CATransportProtocolID_t protocolID;
- /** The header option ID which will be added to communication packets**/
- uint16_t optionID;
- /** its length **/
- uint16_t optionLength;
- /** optional data values**/
- uint8_t optionData[CA_MAX_HEADER_OPTION_DATA_LENGTH];
+ CATransportProtocolID_t protocolID; /**< Protocol ID of the Option */
+ uint16_t optionID; /**< The header option ID which will be
+ added to communication packets */
+ uint16_t optionLength; /**< Option Length **/
+ char optionData[CA_MAX_HEADER_OPTION_DATA_LENGTH]; /**< Optional data values**/
} CAHeaderOption_t;
/**
*/
typedef struct
{
- /**Qos for the request **/
- CAMessageType_t type;
- /** Message id.
- * if message id is zero, it will generated by CA inside.
- * otherwise, you can use it.**/
- uint16_t messageId;
- /** Token for CA**/
- CAToken_t token;
- /** Header Options for the request **/
- CAHeaderOption_t *options;
- /** Number of Header options**/
- uint8_t numOptions;
- /** payload of the request **/
- CAPayload_t payload;
+
+ CAMessageType_t type; /**< Qos for the request */
+ uint16_t messageId; /**< Message id.
+ * if message id is zero, it will generated by CA inside.
+ * otherwise, you can use it */
+ CAToken_t token; /**< Token for CA */
+ uint8_t tokenLength; /**< token length*/
+ 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;
/**
*/
typedef struct
{
- /** Name of the Method Allowed **/
- CAMethod_t method;
- /** Information of the request. **/
- CAInfo_t info;
+ CAMethod_t method; /**< Name of the Method Allowed */
+ CAInfo_t info; /**< Information of the request. */
+ bool isMulticast; /**< is multicast request */
} CARequestInfo_t;
/**
*/
typedef struct
{
- /**Result for response by resource model**/
- CAResponseResult_t result;
- /**Information of the response.**/
- CAInfo_t info;
+ CAResponseResult_t result; /**< Result for response by resource model */
+ 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_
+