X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Fapi%2Fcacommon.h;h=360ceb16036057f8ee844d5b73598cef7b059a1f;hb=1b3989f5777db18d830407badd8e0332c1b1e33e;hp=e4d616389e87ce3ca7b1a8a01eb050ce746a99d9;hpb=16016cc04daed1d3443318afd8c628327a341e39;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/api/cacommon.h b/resource/csdk/connectivity/api/cacommon.h index e4d6163..360ceb1 100644 --- a/resource/csdk/connectivity/api/cacommon.h +++ b/resource/csdk/connectivity/api/cacommon.h @@ -1,4 +1,4 @@ -/****************************************************************** +/* **************************************************************** * * Copyright 2014 Samsung Electronics All Rights Reserved. * @@ -23,11 +23,13 @@ * @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 #include +#include + #ifdef __cplusplus extern "C" @@ -35,31 +37,55 @@ 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 @@ -68,213 +94,193 @@ extern "C" #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; /** @@ -284,20 +290,17 @@ typedef struct */ 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; /** @@ -307,10 +310,9 @@ typedef struct */ 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; /** @@ -320,14 +322,37 @@ typedef struct */ 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_ +