static CANetworkPacketReceivedCallback g_networkPacketCallback = NULL;
/**
- * Network Changed Callback to CA.
+ * Adapter Changed Callback to CA.
*/
-static CANetworkChangeCallback g_networkChangeCallback = NULL;
+static CAAdapterChangeCallback g_networkChangeCallback = NULL;
+
+/**
+ * Connection Changed Callback to CA.
+ */
+static CAConnectionChangeCallback g_connectionChangeCallback = NULL;
/**
* error Callback to CA adapter.
const void *data, uint32_t dataLength);
/**
- * KeepAlive Connected Callback to CA adapter.
- */
-static CAKeepAliveConnectedCallback g_connCallback = NULL;
-
-/**
- * KeepAlive Disconnected Callback to CA adapter.
+ * KeepAlive Connected or Disconnected Callback to CA adapter.
*/
-static CAKeepAliveDisconnectedCallback g_disconnCallback = NULL;
+static CAKeepAliveConnectionCallback g_connKeepAliveCallback = NULL;
static CAResult_t CATCPInitializeQueueHandles();
}
}
-static void CATCPKeepAliveHandler(const char *addr, uint16_t port, bool isConnected)
+static void CATCPConnectionHandler(const CAEndpoint_t *endpoint, bool isConnected)
{
- CAEndpoint_t endpoint = { .adapter = CA_ADAPTER_TCP,
- .port = port };
- OICStrcpy(endpoint.addr, sizeof(endpoint.addr), addr);
-
- if (isConnected)
+ // Pass the changed connection status to RI Layer for keepalive.
+ if (g_connKeepAliveCallback)
{
- g_connCallback(&endpoint);
+ g_connKeepAliveCallback(endpoint, isConnected);
}
- else
+
+ // Pass the changed connection status to CAUtil.
+ if (g_connectionChangeCallback)
{
- g_disconnCallback(&endpoint);
+ g_connectionChangeCallback(endpoint, isConnected);
}
}
-void CATCPSetKeepAliveCallbacks(CAKeepAliveConnectedCallback ConnHandler,
- CAKeepAliveDisconnectedCallback DisconnHandler)
+void CATCPSetKeepAliveCallbacks(CAKeepAliveConnectionCallback ConnHandler)
{
- g_connCallback = ConnHandler;
- g_disconnCallback = DisconnHandler;
-
- CATCPSetKeepAliveCallback(CATCPKeepAliveHandler);
+ g_connKeepAliveCallback = ConnHandler;
}
static void CAInitializeTCPGlobals()
{
+ caglobals.tcp.ipv4.fd = -1;
+ caglobals.tcp.ipv4.port = 0;
+ caglobals.tcp.ipv6.fd = -1;
+ caglobals.tcp.ipv6.port = 0;
caglobals.tcp.selectTimeout = CA_TCP_SELECT_TIMEOUT;
caglobals.tcp.listenBacklog = CA_TCP_LISTEN_BACKLOG;
caglobals.tcp.svrlist = NULL;
}
caglobals.tcp.ipv4tcpenabled = flags & CA_IPV4;
+ caglobals.tcp.ipv6tcpenabled = flags & CA_IPV6;
}
CAResult_t CAInitializeTCP(CARegisterConnectivityCallback registerCallback,
CANetworkPacketReceivedCallback networkPacketCallback,
- CANetworkChangeCallback netCallback,
+ CAAdapterChangeCallback netCallback,
+ CAConnectionChangeCallback connCallback,
CAErrorHandleCallback errorCallback, ca_thread_pool_t handle)
{
OIC_LOG(DEBUG, TAG, "IN");
VERIFY_NON_NULL(handle, TAG, "thread pool handle");
g_networkChangeCallback = netCallback;
+ g_connectionChangeCallback = connCallback;
g_networkPacketCallback = networkPacketCallback;
g_errorCallback = errorCallback;
CAInitializeTCPGlobals();
caglobals.tcp.threadpool = handle;
+ CATCPSetConnectionChangedCallback(CATCPConnectionHandler);
CATCPSetPacketReceiveCallback(CATCPPacketReceivedCB);
CATCPSetErrorHandler(CATCPErrorHandler);