+static void CATCPConnectionHandler(const CAEndpoint_t *endpoint, bool isConnected, bool isClient)
+{
+ // Pass the changed connection status to RI Layer for keepalive.
+ if (g_connKeepAliveCallback)
+ {
+ g_connKeepAliveCallback(endpoint, isConnected, isClient);
+ }
+
+ // Pass the changed connection status to CAUtil.
+ if (g_connectionChangeCallback)
+ {
+ g_connectionChangeCallback(endpoint, isConnected);
+ }
+}
+
+void CATCPSetKeepAliveCallbacks(CAKeepAliveConnectionCallback ConnHandler)
+{
+ g_connKeepAliveCallback = ConnHandler;
+}
+
+void CATCPAdapterHandler(CATransportAdapter_t adapter, CANetworkStatus_t status)
+{
+ if (g_networkChangeCallback)
+ {
+ g_networkChangeCallback(adapter, status);
+ }
+
+ if (CA_INTERFACE_DOWN == status)
+ {
+ OIC_LOG(INFO, TAG, "Network status is down, close all session");
+
+ CAResult_t res = CAQueueingThreadClearData(g_sendQueueHandle);
+ if (res != CA_STATUS_OK)
+ {
+ OIC_LOG_V(ERROR, TAG, "CAQueueingThreadClearData failed[%d]", res);
+ }
+
+ CATCPStopServer();
+ }
+ else if (CA_INTERFACE_UP == status)
+ {
+ OIC_LOG(INFO, TAG, "Network status is up, create new socket for listening");
+
+ CAResult_t ret = CA_STATUS_FAILED;
+#ifndef SINGLE_THREAD
+ ret = CATCPStartServer((const ca_thread_pool_t)caglobals.tcp.threadpool);
+#else
+ ret = CATCPStartServer();
+#endif
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "CATCPStartServer failed[%d]", ret);
+ }
+ }
+}
+