X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=resource%2Fcsdk%2Fconnectivity%2Finc%2Fcatcpinterface.h;h=201dd260825de438c203f2223123783688b58651;hb=3c093548382bb2542c87a67e6e5fa32552c29cb3;hp=38efb008d82975142dd223d92901d7e75f5e8b4f;hpb=0e7762704ad69d816015184a55177d17c701188b;p=platform%2Fupstream%2Fiotivity.git diff --git a/resource/csdk/connectivity/inc/catcpinterface.h b/resource/csdk/connectivity/inc/catcpinterface.h index 38efb00..201dd26 100644 --- a/resource/csdk/connectivity/inc/catcpinterface.h +++ b/resource/csdk/connectivity/inc/catcpinterface.h @@ -44,11 +44,12 @@ extern "C" * @param[in] endpoint network endpoint description. * @param[in] data Data received from remote OIC device. * @param[in] dataLength Length of data in bytes. + * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h). * @pre Callback must be registered using CAIPSetPacketReceiveCallback(). */ -typedef void (*CATCPPacketReceivedCallback)(const CASecureEndpoint_t *endpoint, - const void *data, - uint32_t dataLength); +typedef CAResult_t (*CATCPPacketReceivedCallback)(const CASecureEndpoint_t *endpoint, + const void *data, + size_t dataLength); /** * Callback to notify error in the TCP adapter. @@ -60,17 +61,18 @@ typedef void (*CATCPPacketReceivedCallback)(const CASecureEndpoint_t *endpoint, * @pre Callback must be registered using CAIPSetPacketReceiveCallback(). */ typedef void (*CATCPErrorHandleCallback)(const CAEndpoint_t *endpoint, const void *data, - uint32_t dataLength, CAResult_t result); + size_t dataLength, CAResult_t result); /** * Callback to notify connection information in the TCP adapter. * - * @param[in] addr connected device address. - * @param[in] port connected port info. - * @param[in] isConnected Whether keepalive message needs to be sent. + * @param[in] endpoint network endpoint description. + * @param[in] isConnected Whether keepalive message needs to be sent. + * @param[in] isClient Host Mode of Operation. * @see Callback must be registered using CATCPSetKeepAliveCallback(). */ -typedef void (*CATCPKeepAliveHandleCallback)(const char *addr, uint16_t port, bool isConnected); +typedef void (*CATCPConnectionHandleCallback)(const CAEndpoint_t *endpoint, bool isConnected, + bool isClient); /** * set error callback to notify error in TCP adapter. @@ -80,13 +82,41 @@ typedef void (*CATCPKeepAliveHandleCallback)(const char *addr, uint16_t port, bo */ void CATCPSetErrorHandler(CATCPErrorHandleCallback errorHandleCallback); +#ifdef SINGLE_THREAD + +CAResult_t CATCPStartServer(); + +/** + * Pull the Received Data. + */ +void CATCPPullData(); + +/** + * Get TCP Header Details. + * @param[in] recvBuffer index of array list. + * @param[out] transport TCP Server address. + * @param[out] headerlen TCP Server port. + */ +void CAGetTCPHeaderDetails(unsigned char *recvBuffer, coap_transport_t *transport, + size_t *headerlen); + +/** + * Get total length from CoAP over TCP header. + * + * @param[in] recvBuffer received header data. + * @param[in] size length of buffer. + * @return total data length + */ +size_t CAGetTotalLengthFromPacketHeader(const unsigned char *recvBuffer, size_t size); + +#else /** * set keepalive callback to notify connection information in TCP adapter. * * @param[in] keepaliveHandler Callback function to notify the connection information. * in the TCP adapter. */ -void CATCPSetKeepAliveCallback(CATCPKeepAliveHandleCallback keepaliveHandler); +void CATCPSetKeepAliveCallback(CAKeepAliveConnectionCallback keepaliveHandler); /** * Start TCP server. @@ -99,6 +129,8 @@ void CATCPSetKeepAliveCallback(CATCPKeepAliveHandleCallback keepaliveHandler); */ CAResult_t CATCPStartServer(const ca_thread_pool_t threadPool); +#endif + /** * Stop TCP server. */ @@ -112,15 +144,21 @@ void CATCPStopServer(); void CATCPSetPacketReceiveCallback(CATCPPacketReceivedCallback callback); /** + * Set this callback for receiving the changed connection information from peer devices. + * + * @param[in] connHandler Callback to be notified when connection state changes. + */ +void CATCPSetConnectionChangedCallback(CATCPConnectionHandleCallback connHandler); + +/** * API to send unicast TCP data. * * @param[in] endpoint complete network address to send to. * @param[in] data Data to be send. * @param[in] dataLength Length of data in bytes. - * @param[in] isMulticast Whether data needs to be sent to multicast ip. + * @return Sent data length or -1 on error. */ -void CATCPSendData(CAEndpoint_t *endpoint, const void *data, uint32_t dataLength, - bool isMulticast); +ssize_t CATCPSendData(CAEndpoint_t *endpoint, const void *data, size_t dataLength); /** * Get a list of CAInterface_t items. @@ -133,18 +171,17 @@ u_arraylist_t *CATCPGetInterfaceInformation(int desiredIndex); * Connect to TCP Server. * * @param[in] endpoint remote endpoint information. - * @return TCP Session Information structure. + * @return Created socket file descriptor. */ -CATCPSessionInfo_t *CAConnectTCPSession(const CAEndpoint_t *endpoint); +CASocketFd_t CAConnectTCPSession(const CAEndpoint_t *endpoint); /** * Disconnect from TCP Server. * - * @param[in] svritem TCP session information. * @param[in] index current session index in list. * @return ::CA_STATUS_OK or Appropriate error code. */ -CAResult_t CADisconnectTCPSession(CATCPSessionInfo_t *svritem, size_t index); +CAResult_t CADisconnectTCPSession(size_t index); /** * Disconnect all connection from TCP Server. @@ -178,8 +215,80 @@ size_t CAGetTotalLengthFromHeader(const unsigned char *recvBuffer); */ CATCPSessionInfo_t *CAGetSessionInfoFromFD(int fd, size_t *index); +/** + * Get socket file descriptor from remote device information. + * + * @param[in] endpoint Remote Endpoint information (such as ipaddress, + * port, reference uri and transport type) to + * which the unicast data has to be sent. + * @return Created socket file descriptor. + */ +CASocketFd_t CAGetSocketFDFromEndpoint(const CAEndpoint_t *endpoint); + +/** + * Find the session with endpoint info and remove it from list. + * + * @param[in] endpoint Remote Endpoint information (such as ipaddress, + * port, reference uri and transport type) to + * which the unicast data has to be sent. + * @return ::CA_STATUS_OK or Appropriate error code. + */ +CAResult_t CASearchAndDeleteTCPSession(const CAEndpoint_t *endpoint); + +/** + * Get total payload length from CoAP over TCP header. + * + * @param[in] data Data to be send. + * @param[in] dlen Total data length. + * @return Payload length + */ +size_t CACheckPayloadLengthFromHeader(const void *data, size_t dlen); + +/** + * Construct CoAP header and payload from buffer + * + * @param[in] svritem - used socket, buffer, current received message length and protocol + * @param[in/out] data - data buffer, this value is updated as data is copied to svritem + * @param[in/out] dataLength - length of data, this value decreased as data is copied to svritem + * @return - CA_STATUS_OK or appropriate error code + */ +CAResult_t CAConstructCoAP(CATCPSessionInfo_t *svritem, unsigned char **data, + size_t *dataLength); + +/** + * Clean socket state data + * + * @param[in/out] svritem - socket state data + */ +void CACleanData(CATCPSessionInfo_t *svritem); + +/** + * Create a mutex object. + * + * @return ::CA_STATUS_OK or Appropriate error code. + */ +CAResult_t CATCPCreateMutex(); + +/** + * Close a mutex object. + */ +void CATCPDestroyMutex(); + +/** + * Initialize a condition variable. + * + * @return ::CA_STATUS_OK or Appropriate error code. + */ +CAResult_t CATCPCreateCond(); + +/** + * Destroy condition variable state. + */ +void CATCPDestroyCond(); + #ifdef __cplusplus } #endif #endif /* CA_TCP_INTERFACE_H_ */ +