X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=resource%2Fcsdk%2Fconnectivity%2Fapi%2Fcacommon.h;h=fc47ed1be999851a54e416e628c29df24f8d3a16;hb=refs%2Ftags%2Fsubmit%2Ftizen_4.0%2F20171010.021147;hp=e975e6054d3caaf00cd84805841563e2968f5760;hpb=cc68c51711ac0211b3c29da57ef6f794dd2f6120;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/api/cacommon.h b/resource/csdk/connectivity/api/cacommon.h old mode 100644 new mode 100755 index e975e60..fc47ed1 --- a/resource/csdk/connectivity/api/cacommon.h +++ b/resource/csdk/connectivity/api/cacommon.h @@ -26,10 +26,30 @@ #ifndef CA_COMMON_H_ #define CA_COMMON_H_ +#include "iotivity_config.h" + +#ifndef WITH_ARDUINO +#ifdef TCP_ADAPTER +#define HAVE_SYS_POLL_H +#endif +#endif + #include #include #include +#ifdef __TIZENRT__ +#include +#else +#ifdef HAVE_SYS_POLL_H +#include +#endif +#endif + +#ifdef HAVE_WINSOCK2_H +#include +#include +#endif #ifdef __cplusplus extern "C" @@ -37,7 +57,16 @@ extern "C" #endif /** - * IP address Length + * TAG of Analyzer log. + */ +#define ANALYZER_TAG "OIC_CA_ANALYZER_071801" +#define BLE_CLIENT_TAG "OIC_CA_LE_CLIENT_0718" +#define BLE_SERVER_MCD_TAG "OIC_CA_LE_SER_MC_0718" +#define IP_SERVER_TAG "OIC_CA_IP_SERVER_0718" +#define TCP_SERVER_TAG "OIC_CA_TCP_SERVER_0718" + +/** + * IP address Length. */ #define CA_IPADDR_SIZE 16 @@ -47,22 +76,26 @@ extern "C" #define CA_RAJABBERID_SIZE 256 /** - * Mac address length for BT port + * Mac address length for BT port. */ #define CA_MACADDR_SIZE 18 /** - * Max header options data length + * Max header options data length. */ +#if defined(ARDUINO) || defined(__TIZENRT__) #define CA_MAX_HEADER_OPTION_DATA_LENGTH 20 +#else +#define CA_MAX_HEADER_OPTION_DATA_LENGTH 1024 +#endif /** -* Max token length +* Max token length. */ #define CA_MAX_TOKEN_LEN (8) /** - * Max URI length + * Max URI length. */ #ifdef ARDUINO #define CA_MAX_URI_LENGTH 128 /* maximum size of URI for embedded platforms*/ @@ -71,7 +104,7 @@ extern "C" #endif /** - * Max PDU length supported + * Max PDU length supported. */ #ifdef ARDUINO #define COAP_MAX_PDU_SIZE 320 /* maximum size of a CoAP PDU for embedded platforms*/ @@ -84,12 +117,17 @@ extern "C" #endif /** - *Maximum length of the remoteEndpoint identity + *Maximum length of the remoteEndpoint identity. + */ +#define CA_MAX_ENDPOINT_IDENTITY_LEN CA_MAX_IDENTITY_SIZE + +/** + * Max identity size. */ -#define CA_MAX_ENDPOINT_IDENTITY_LEN (32) +#define CA_MAX_IDENTITY_SIZE (37) /** - * option types - the highest option number 63 + * option types - the highest option number 63. */ #define CA_OPTION_IF_MATCH 1 #define CA_OPTION_ETAG 4 @@ -105,7 +143,7 @@ extern "C" #define CA_OPTION_LOCATION_QUERY 20 /** - * Payload information from resource model + * Payload information from resource model. */ typedef uint8_t *CAPayload_t; @@ -115,17 +153,38 @@ typedef uint8_t *CAPayload_t; typedef char *CAURI_t; /** - * Token information for mapping the request and responses by resource model + * Token information for mapping the request and responses by resource model. */ typedef char *CAToken_t; -// 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. +/* + * Socket types and error definitions. + */ +#ifdef HAVE_WINSOCK2_H +# define OC_SOCKET_ERROR SOCKET_ERROR +# define OC_INVALID_SOCKET INVALID_SOCKET +typedef SOCKET CASocketFd_t; +#else // HAVE_WINSOCK2_H +# define OC_SOCKET_ERROR (-1) +# define OC_INVALID_SOCKET (-1) +typedef int CASocketFd_t; +#endif + +/* + * 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. + */ #ifdef RA_ADAPTER #define MAX_ADDR_STR_SIZE_CA (256) #else -#define MAX_ADDR_STR_SIZE_CA (40) +/* + * Max Address could be "coaps+tcp://[xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:yyy.yyy.yyy.yyy]:xxxxx" + * Which is 65, +1 for null terminator => 66 + * OCDevAddr (defined in OCTypes.h) must be the same + * as CAEndpoint_t (defined here) + */ +#define MAX_ADDR_STR_SIZE_CA (66) #endif typedef enum @@ -141,7 +200,9 @@ typedef enum CA_ADAPTER_REMOTE_ACCESS = (1 << 3), // Remote Access over XMPP. #endif - CA_ADAPTER_TCP = (1 << 4), // CoAP over TCP + CA_ADAPTER_TCP = (1 << 4), // CoAP over TCP + CA_ADAPTER_NFC = (1 << 5), // NFC Adapter + CA_ALL_ADAPTERS = 0xffffffff } CATransportAdapter_t; @@ -167,11 +228,21 @@ typedef enum CA_SCOPE_GLOBAL = 0xE, // IPv6 Global scope } CATransportFlags_t; +typedef enum +{ + CA_DEFAULT_BT_FLAGS = 0, + // flags for BLE transport + CA_LE_ADV_DISABLE = 0x1, // disable BLE advertisement. + CA_LE_ADV_ENABLE = 0x2, // enable BLE advertisement. + CA_LE_SERVER_DISABLE = (1 << 4), // disable gatt server. + // flags for EDR transport + CA_EDR_SERVER_DISABLE = (1 << 7) // disable rfcomm server. +} CATransportBTFlags_t; + #define CA_IPFAMILY_MASK (CA_IPV6|CA_IPV4) #define CA_SCOPE_MASK 0xf // mask scope bits above /** - * @enum CANetworkStatus_t * Information about the network status. */ typedef enum @@ -181,7 +252,7 @@ typedef enum } CANetworkStatus_t; /* - * remoteEndpoint identity + * remoteEndpoint identity. */ typedef struct { @@ -190,8 +261,7 @@ typedef struct } CARemoteId_t; /** - * @enum CAMessageType_t - * Message Type for Base source code + * Message Type for Base source code. */ typedef enum { @@ -203,8 +273,7 @@ typedef enum } CAMessageType_t; /** - * @enum CAMethod_t - * Allowed method to be used by resource model + * Allowed method to be used by resource model. */ typedef enum { @@ -215,7 +284,7 @@ typedef enum } CAMethod_t; /** - * block size + * block size. * it depends on defined size in libCoAP. */ typedef enum @@ -230,7 +299,7 @@ typedef enum } CABlockSize_t; /** - * Endpoint information for connectivities + * Endpoint information for connectivities. * Must be identical to OCDevAddr. */ typedef struct @@ -239,7 +308,8 @@ typedef struct CATransportFlags_t flags; // transport modifiers uint16_t port; // for IP char addr[MAX_ADDR_STR_SIZE_CA]; // address for all - uint32_t interface; // usually zero for default interface + uint32_t ifindex; // usually zero for default interface + char remoteId[CA_MAX_IDENTITY_SIZE]; // device ID of remote device #if defined (ROUTING_GATEWAY) || defined (ROUTING_EP) char routeData[MAX_ADDR_STR_SIZE_CA]; /**< GatewayId:ClientId of destination. **/ @@ -247,17 +317,18 @@ typedef struct } CAEndpoint_t; /** - * Endpoint information for secure messages + * Endpoint information for secure messages. */ typedef struct { CAEndpoint_t endpoint; /**< endpoint */ - CARemoteId_t identity; /**< endpoint identity */ + // TODO change name to deviceId + CARemoteId_t identity; /**< endpoint device uuid */ + CARemoteId_t userId; /**< endpoint user uuid */ } CASecureEndpoint_t; /** - * @enum CAResult_t - * Enums for CA return values + * Enums for CA return values. */ typedef enum { @@ -266,7 +337,7 @@ typedef enum 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_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 */ @@ -276,40 +347,65 @@ typedef enum CA_DESTINATION_DISCONNECTED, /**< Destination is disconnected */ CA_NOT_SUPPORTED, /**< Not supported */ CA_STATUS_NOT_INITIALIZED, /**< Not Initialized*/ + CA_DTLS_AUTHENTICATION_FAILURE, /**< Decryption error in DTLS */ CA_STATUS_FAILED =255 /**< Failure */ /* Result code - END HERE */ } CAResult_t; /** - * @enum CAResponseResult_t - * Enums for CA Response values + * Enums for CA Response values. */ typedef enum { /* Response status code - START HERE */ - CA_EMPTY = 0, /**< Empty */ - CA_CREATED = 201, /**< Created */ - CA_DELETED = 202, /**< Deleted */ - CA_VALID = 203, /**< Valid */ - CA_CHANGED = 204, /**< Changed */ - CA_CONTENT = 205, /**< Content */ - CA_CONTINUE = 231, /**< Continue */ - 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_NOT_ACCEPTABLE = 406, /**< Not Acceptable */ - CA_REQUEST_ENTITY_INCOMPLETE = 408, /**< Request Entity Incomplete */ - CA_REQUEST_ENTITY_TOO_LARGE = 413, /**< Request Entity Too Large */ - CA_INTERNAL_SERVER_ERROR = 500, /**< Internal Server Error */ - CA_RETRANSMIT_TIMEOUT = 504 /**< Retransmit timeout */ + CA_EMPTY = 0, /**< Empty */ + CA_CREATED = 201, /**< Created */ + CA_DELETED = 202, /**< Deleted */ + CA_VALID = 203, /**< Valid */ + CA_CHANGED = 204, /**< Changed */ + CA_CONTENT = 205, /**< Content */ + CA_CONTINUE = 231, /**< Continue */ + 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_METHOD_NOT_ALLOWED = 405, /**< Method Not Allowed */ + CA_NOT_ACCEPTABLE = 406, /**< Not Acceptable */ + CA_REQUEST_ENTITY_INCOMPLETE = 408, /**< Request Entity Incomplete */ + CA_REQUEST_ENTITY_TOO_LARGE = 413, /**< Request Entity Too Large */ + CA_INTERNAL_SERVER_ERROR = 500, /**< Internal Server Error */ + CA_NOT_IMPLEMENTED = 501, /**< Not Implenented */ + CA_BAD_GATEWAY = 502, /**< Bad Gateway */ + CA_SERVICE_UNAVAILABLE = 503, /**< Server Unavailable */ + CA_RETRANSMIT_TIMEOUT = 504, /**< Retransmit timeout */ + CA_PROXY_NOT_SUPPORTED = 505 /**< Proxy not enabled to service a request */ /* Response status code - END HERE */ } CAResponseResult_t; /** - * @enum CATransportProtocolID_t - * Transport Protocol IDs for additional options + * Data type whether the data is Request Message or Response Message. + * if there is some failure before send data on network. + * Type will be set as error type for error callback. + */ +typedef enum +{ + CA_REQUEST_DATA = 1, + CA_RESPONSE_DATA, + CA_ERROR_DATA, + CA_RESPONSE_FOR_RES, + CA_NETWORK_COMMAND +} CADataType_t; + +typedef enum +{ + CA_DISCONNECTED = 0, + CA_CONNECTED, + CA_REQ_DISCONNECT +} CAConnectEvent_t; + +/** + * Transport Protocol IDs for additional options. */ typedef enum { @@ -318,7 +414,6 @@ typedef enum } CATransportProtocolID_t; /** - * @enum CAAdapterState_t * Adapter State to indicate the network changed notifications. */ typedef enum @@ -345,7 +440,7 @@ typedef enum } CAPayloadFormat_t; /** - * Header options structure to be filled + * Header options structure to be filled. * * This structure is used to hold header information. */ @@ -359,13 +454,12 @@ typedef struct } CAHeaderOption_t; /** - * Base Information received + * Base Information received. * - * This structure is used to hold request & response base information + * This structure is used to hold request & response base information. */ typedef struct { - CAMessageType_t type; /**< Qos for the request */ #ifdef ROUTING_GATEWAY bool skipRetransmission; /**< Will not attempt retransmission even if type is CONFIRM. @@ -375,7 +469,7 @@ typedef struct * 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*/ + 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 */ @@ -384,12 +478,14 @@ typedef struct CAPayloadFormat_t acceptFormat; /**< accept format for the response payload */ CAURI_t resourceUri; /**< Resource URI information **/ CARemoteId_t identity; /**< endpoint identity */ + CADataType_t dataType; /**< data type */ + CAConnectEvent_t event; /**< network request message / event type */ } CAInfo_t; /** - * Request Information to be sent + * Request Information to be sent. * - * This structure is used to hold request information + * This structure is used to hold request information. */ typedef struct { @@ -399,9 +495,9 @@ typedef struct } CARequestInfo_t; /** - * Response information received + * Response information received. * - * This structure is used to hold response information + * This structure is used to hold response information. */ typedef struct { @@ -412,9 +508,9 @@ typedef struct /** * Error information from CA - * contains error code and message information + * contains error code and message information. * - * This structure holds error information + * This structure holds error information. */ typedef struct { @@ -424,12 +520,12 @@ typedef struct } CAErrorInfo_t; /** - * Hold global variables for CA layer (also used by RI layer) + * Hold global variables for CA layer. (also used by RI layer) */ typedef struct { - int fd; /**< socket fd */ - uint16_t port; /**< socket port */ + CASocketFd_t fd; /**< socket fd */ + uint16_t port; /**< socket port */ } CASocket_t; #define HISTORYSIZE (4) @@ -449,13 +545,37 @@ typedef struct } CAHistory_t; /** - * Hold interface index for keeping track of comings and goings + * Hold interface index for keeping track of comings and goings. */ typedef struct { int32_t ifIndex; /**< network interface index */ } CAIfItem_t; +/** + * Hold the port number assigned from application. + * It will be used when creating a socket. + */ +typedef struct +{ + struct udpports + { + uint16_t u6; /**< unicast IPv6 socket port */ + uint16_t u6s; /**< unicast IPv6 socket secure port */ + uint16_t u4; /**< unicast IPv4 socket port */ + uint16_t u4s; /**< unicast IPv4 socket secure port */ + } udp; +#ifdef TCP_ADAPTER + struct tcpports + { + uint16_t u4; /**< unicast IPv4 socket port */ + uint16_t u4s; /**< unicast IPv6 socket secure port */ + uint16_t u6; /**< unicast IPv6 socket port */ + uint16_t u6s; /**< unicast IPv6 socket secure port */ + } tcp; +#endif +} CAPorts_t; + typedef struct { CATransportFlags_t clientFlags; /**< flag for client */ @@ -463,26 +583,37 @@ typedef struct bool client; /**< client mode */ bool server; /**< server mode */ + CAPorts_t ports; + struct sockets { - void *threadpool; /**< threadpool between Initialize and Start */ - CASocket_t u6; /**< unicast IPv6 */ - CASocket_t u6s; /**< unicast IPv6 secure */ - CASocket_t u4; /**< unicast IPv4 */ - CASocket_t u4s; /**< unicast IPv4 secure */ - CASocket_t m6; /**< multicast IPv6 */ - CASocket_t m6s; /**< multicast IPv6 secure */ - CASocket_t m4; /**< multicast IPv4 */ - CASocket_t m4s; /**< multicast IPv4 secure */ - int netlinkFd; /**< netlink */ - int shutdownFds[2]; /**< shutdown pipe */ - int selectTimeout; /**< in seconds */ - int maxfd; /**< highest fd (for select) */ - bool started; /**< the IP adapter has started */ - bool terminate; /**< the IP adapter needs to stop */ - bool ipv6enabled; /**< IPv6 enabled by OCInit flags */ - bool ipv4enabled; /**< IPv4 enabled by OCInit flags */ - bool dualstack; /**< IPv6 and IPv4 enabled */ + void *threadpool; /**< threadpool between Initialize and Start */ + CASocket_t u6; /**< unicast IPv6 */ + CASocket_t u6s; /**< unicast IPv6 secure */ + CASocket_t u4; /**< unicast IPv4 */ + CASocket_t u4s; /**< unicast IPv4 secure */ + CASocket_t m6; /**< multicast IPv6 */ + CASocket_t m6s; /**< multicast IPv6 secure */ + CASocket_t m4; /**< multicast IPv4 */ + CASocket_t m4s; /**< multicast IPv4 secure */ + CASocketFd_t netlinkFd; /**< netlink */ +#if defined(_WIN32) + WSAEVENT shutdownEvent; /**< Event used to signal threads to stop */ +#else +#ifndef __TIZENRT__ + int shutdownFds[2]; /**< fds used to signal threads to stop */ +#endif +#endif + int selectTimeout; /**< in seconds */ + int maxfd; /**< highest fd (for select) */ + bool started; /**< the IP adapter has started */ + bool terminate; /**< the IP adapter needs to stop */ + bool ipv6enabled; /**< IPv6 enabled by OCInit flags */ + bool ipv4enabled; /**< IPv4 enabled by OCInit flags */ + bool dualstack; /**< IPv6 and IPv4 enabled */ +#if defined (_WIN32) + LPFN_WSARECVMSG wsaRecvMsg; /**< Win32 function pointer to WSARecvMsg() */ +#endif struct networkmonitors { @@ -495,9 +626,6 @@ typedef struct struct calayer { CAHistory_t requestHistory; /**< filter IP family in requests */ - CAHistory_t responseHistory; /**< filter IP family in responses */ - CATransportFlags_t previousRequestFlags;/**< address family filtering */ - uint16_t previousRequestMessageId; /**< address family filtering */ } ca; #ifdef TCP_ADAPTER @@ -507,19 +635,67 @@ typedef struct struct tcpsockets { void *threadpool; /**< threadpool between Initialize and Start */ + CASocket_t ipv4; /**< IPv4 accept socket */ + CASocket_t ipv4s; /**< IPv4 accept socket secure */ + CASocket_t ipv6; /**< IPv6 accept socket */ + CASocket_t ipv6s; /**< IPv6 accept socket secure */ void *svrlist; /**< unicast IPv4 TCP server information*/ int selectTimeout; /**< in seconds */ int listenBacklog; /**< backlog counts*/ +#ifndef __TIZENRT__ + int shutdownFds[2]; /**< shutdown pipe */ +#endif + int connectionFds[2]; /**< connection pipe */ int maxfd; /**< highest fd (for select) */ bool started; /**< the TCP adapter has started */ bool terminate; /**< the TCP adapter needs to stop */ bool ipv4tcpenabled; /**< IPv4 TCP enabled by OCInit flags */ + bool ipv6tcpenabled; /**< IPv6 TCP enabled by OCInit flags */ } tcp; #endif + CATransportBTFlags_t bleFlags; } CAGlobals_t; extern CAGlobals_t caglobals; +typedef enum +{ + CA_LOG_LEVEL_ALL = 1, // all logs. + CA_LOG_LEVEL_INFO, // debug level is disabled +} CAUtilLogLevel_t; + +/** + * Callback function type for request delivery. + * @param[out] object Endpoint object from which the request is received. + * It contains endpoint address based on the connectivity type. + * @param[out] requestInfo Info for resource model to understand about the request. + */ +typedef void (*CARequestCallback)(const CAEndpoint_t *object, + const CARequestInfo_t *requestInfo); + +/** + * Callback function type for response delivery. + * @param[out] object Endpoint object from which the response is received. + * @param[out] responseInfo Identifier which needs to be mapped with response. + */ +typedef void (*CAResponseCallback)(const CAEndpoint_t *object, + const CAResponseInfo_t *responseInfo); +/** + * Callback function type for error. + * @param[out] object remote device information. + * @param[out] errorInfo CA Error information. + */ +typedef void (*CAErrorCallback)(const CAEndpoint_t *object, + const CAErrorInfo_t *errorInfo); + +/** + * Callback function type for network status changes delivery from CA common logic. + * @param[out] info Endpoint object from which the network status is changed. + * It contains endpoint address based on the connectivity type. + * @param[out] status Current network status info. + */ +typedef void (*CANetworkMonitorCallback)(const CAEndpoint_t *info, CANetworkStatus_t status); + #ifdef __cplusplus } /* extern "C" */ #endif