Merge branch 'master' into windows-port
[platform/upstream/iotivity.git] / resource / csdk / connectivity / inc / catcpadapter.h
1 /* ****************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************/
20
21 /**
22  * @file
23  * This file contains the APIs for TCP Adapter.
24  */
25 #ifndef CA_TCP_ADAPTER_H_
26 #define CA_TCP_ADAPTER_H_
27
28 #include "cacommon.h"
29 #include "caadapterinterface.h"
30 #include "cathreadpool.h"
31 #include "cainterface.h"
32
33 #ifdef __cplusplus
34 extern "C"
35 {
36 #endif
37
38 /**
39  * TCP Session Information for IPv4 TCP transport
40  */
41 typedef struct
42 {
43     CASecureEndpoint_t sep;             /**< secure endpoint information */
44     int fd;                             /**< file descriptor info */
45     void *recvData;                     /**< received data from remote device*/
46     size_t recvDataLen;                 /**< received data length */
47     size_t totalDataLen;                /**< total data length */
48 } CATCPSessionInfo_t;
49
50 /**
51  * API to initialize TCP Interface.
52  * @param[in] registerCallback      Callback to register TCP interfaces to
53  *                                  Connectivity Abstraction Layer.
54  * @param[in] networkPacketCallback Callback to notify request and
55  *                                  response messages from server(s)
56  *                                  started at Connectivity Abstraction Layer.
57  * @param[in] netCallback           Callback to notify the adapter changes
58  *                                  to Connectivity Abstraction Layer.
59  * @param[in] connCallback          Callback to notify the connection changes
60  *                                  to Connectivity Abstraction Layer.
61  * @param[in] errorCallback         Callback to notify the network errors to
62  *                                  Connectivity Abstraction Layer.
63  * @param[in] handle                Threadpool Handle.
64  * @return  ::CA_STATUS_OK or Appropriate error code
65  */
66 CAResult_t CAInitializeTCP(CARegisterConnectivityCallback registerCallback,
67                            CANetworkPacketReceivedCallback networkPacketCallback,
68                            CAAdapterChangeCallback netCallback,
69                            CAConnectionChangeCallback connCallback,
70                            CAErrorHandleCallback errorCallback, ca_thread_pool_t handle);
71
72 /**
73  * Start TCP Interface adapter.
74  * @return  ::CA_STATUS_OK or Appropriate error code.
75  */
76 CAResult_t CAStartTCP();
77
78 /**
79  * Start listening server for receiving connect requests.
80  * Transport Specific Behavior:
81  * TCP Starts Listening Server on a particular interface and prefixed port
82  * number and as per OIC Specification.
83  * @return  ::CA_STATUS_OK or Appropriate error code.
84  */
85 CAResult_t CAStartTCPListeningServer();
86
87 /**
88  * Stops listening server from receiving connect requests.
89  * Transport Specific Behavior:
90  * TCP Stops Listening Server on a particular interface and prefixed port
91  * number and as per OIC Specification.
92  * @return  ::CA_STATUS_OK or Appropriate error code.
93  */
94 CAResult_t CAStopTCPListeningServer();
95
96 /**
97  * Start discovery servers for receiving advertisements.
98  * Transport Specific Behavior:
99  * TCP Starts Discovery server on a particular interface and prefixed port
100  * number as per OIC Specification.
101  * @return  ::CA_STATUS_OK or Appropriate error code.
102  */
103 CAResult_t CAStartTCPDiscoveryServer();
104
105 /**
106  * Sends data to the endpoint using the adapter connectivity.
107  * @param[in]   endpoint       Remote Endpoint information (like ipaddress,
108  *                              port, reference uri and transport type) to
109  *                              which the unicast data has to be sent.
110  * @param[in]   data           Data which is required to be sent.
111  * @param[in]   dataLen        Size of data to be sent.
112  * @note  dataLen must be > 0.
113  * @return  The number of bytes sent on the network, or -1 upon error.
114  */
115 int32_t CASendTCPUnicastData(const CAEndpoint_t *endpoint,
116                              const void *data, uint32_t dataLen);
117
118 /**
119  * Send Multicast data to the endpoint using the TCP connectivity.
120  * @param[in]   endpoint       Remote Endpoint information (like ipaddress,
121  *                              port)
122  * @param[in]   data           Data which is required to be sent.
123  * @param[in]   dataLen        Size of data to be sent.
124  * @note  dataLen must be > 0.
125  * @return  The number of bytes sent on the network, or -1 upon error.
126  */
127 int32_t CASendTCPMulticastData(const CAEndpoint_t *endpoint,
128                                const void *data, uint32_t dataLen);
129
130 /**
131  * Get TCP Connectivity network information.
132  * @param[out]   info        Local connectivity information structures.
133  * @note info is allocated in this API and should be freed by the caller.
134  * @param[out]   size        Number of local connectivity structures.
135  * @return  ::CA_STATUS_OK or Appropriate error code.
136  */
137 CAResult_t CAGetTCPInterfaceInformation(CAEndpoint_t **info, uint32_t *size);
138
139 /**
140  * Read Synchronous API callback.
141  * @return  ::CA_STATUS_OK or Appropriate error code.
142  */
143 CAResult_t CAReadTCPData();
144
145 /**
146  * Stops Unicast, servers and close the sockets.
147  * @return  ::CA_STATUS_OK or Appropriate error code.
148  */
149 CAResult_t CAStopTCP();
150
151 /**
152  * Terminate the TCP connectivity adapter.
153  * Configuration information will be deleted from further use.
154  */
155 void CATerminateTCP();
156
157 /**
158  * Set connection status changes callback to process KeepAlive.
159  * connection informations are delivered these callbacks.
160  * @param[in]   ConnHandler     Connection status changes callback.
161  */
162 void CATCPSetKeepAliveCallbacks(CAKeepAliveConnectionCallback ConnHandler);
163
164 #ifdef __cplusplus
165 } /* extern "C" */
166 #endif
167
168 #endif  // CA_TCP_ADAPTER_H_