* @param registerCallback [IN] Callback to register IP interfaces to Connectivity
* Abstraction Layer
* @param networkPacketCallback [IN] Callback to notify request and response messages from server(s)
- * started at Connectivity Abstraction Layer
+ * started at Connectivity Abstraction Layer.
* @param netCallback [IN] Callback to notify the network additions to Connectivity
- * Abstraction Layer
- * @param errorCallback [IN] Callback to notify the network errors to Connectivity
- * Abstraction Layer
+ * Abstraction Layer.
* @param handle [IN] Threadpool Handle
* @return #CA_STATUS_OK or Appropriate error code
*/
-CAResult_t CAInitializeIP(CARegisterConnectivityCallback registerCallback,
- CANetworkPacketReceivedCallback networkPacketCallback,
- CANetworkChangeCallback netCallback,
- CAErrorHandleCallback errorCallback, ca_thread_pool_t handle);
+ CAResult_t CAInitializeIP(CARegisterConnectivityCallback registerCallback,
+ CANetworkPacketReceivedCallback networkPacketCallback,
+ CANetworkChangeCallback netCallback, ca_thread_pool_t handle);
+
/**
* @brief Start IP Interface adapter.
bool isSecured);
/**
- * @brief Callback to notify error in the IP adapter
- *
- * @param ipAddress [IN] IP address of the device.
- * @param port [IN] Port number
- * @param data [IN] Data sent/received
- * @param dataLength [IN] Length of data in bytes.
- * @param isSecured [IN] flag to indicate if data is secured
- * @param result [IN] result of request from R.I
- * @return NONE
- * @pre Callback must be registered using CAIPSetPacketReceiveCallback()
- */
-typedef void (*CAIPErrorHandleCallback)(const char *ipAddress, uint16_t port,
- const void *data, uint32_t dataLength,
- bool isSecured, CAResult_t result);
-
-/**
* @brief Callback to be notified when exception occures on multicast/unicast server.
* @param type [IN] Type of server(#CAAdapterServerType_t)
* @return NONE
// Initialize adapters and register callback.
#ifdef IP_ADAPTER
CAInitializeIP(CARegisterCallback, CAReceivedPacketCallback, CANetworkChangedCallback,
- CAAdapterErrorHandleCallback, handle);
+ handle);
#endif /* IP_ADAPTER */
+
+#ifdef EDR_ADAPTER
+ CAInitializeEDR(CARegisterCallback, CAReceivedPacketCallback, CANetworkChangedCallback,
+ handle);
+#endif /* EDR_ADAPTER */
+
+#ifdef LE_ADAPTER
+ CAInitializeLE(CARegisterCallback, CAReceivedPacketCallback, CANetworkChangedCallback,
+ handle);
+#endif /* LE_ADAPTER */
+
}
void CASetPacketReceivedCallback(CANetworkPacketReceivedCallback callback)
CASetNetworkChangeCallback(CANetworkChangedCallback);
- CASetErrorHandleCallback(CAErrorHandler);
-
// create thread pool
CAResult_t res = ca_thread_pool_init(MAX_THREAD_POOL_SIZE, &g_threadPoolHandle);
static CANetworkChangeCallback g_networkChangeCallback = NULL;
/**
- * @var g_errorCallback
- * @brief error Callback to CA adapter
- */
-static CAErrorHandleCallback g_errorCallback = NULL;
-
-/**
* @var g_sendQueueHandle
* @brief Queue handle for Send Data
*/
static void CAIPDeinitializeQueueHandles();
static void CAIPNotifyNetworkChange(const char *address, uint16_t port,
- CANetworkStatus_t status);
+ CANetworkStatus_t status);
static void CAIPConnectionStateCB(const char *ipAddress, CANetworkStatus_t status);
static void CAIPPacketReceivedCB(const char *ipAddress, uint16_t port, const void *data,
- uint32_t dataLength, bool isSecured);
-static void CAIPErrorHandler(const char *ipAddress, uint16_t port, const void *data,
- uint32_t dataLength, bool isSecured, CAResult_t result);
-
+ uint32_t dataLength, bool isSecured);
#ifdef __WITH_DTLS__
static uint32_t CAIPPacketSendCB(const char *ipAddress, uint16_t port,
- const void *data, uint32_t dataLength);
+ const void *data, uint32_t dataLength);
#endif
static CAResult_t CAIPStopServers();
static void CAIPSendDataThread(void *threadData);
static CAIPData *CACreateIPData(const CARemoteEndpoint_t *remoteEndpoint,
- const void *data, uint32_t dataLength);
+ const void *data, uint32_t dataLength);
void CAFreeIPData(CAIPData *ipData);
static void CADataDestroyer(void *data, uint32_t size);
uint32_t sentLength = CAIPSendData(ipAddress, port, data, dataLength, false, true);
- if (sentLength == 0)
- {
- CARemoteEndpoint_t *endPoint = CAAdapterCreateRemoteEndpoint(CA_IPV4, ipAddress, NULL);
- if (!endPoint)
- {
- OIC_LOG(ERROR, IP_ADAPTER_TAG, "EndPoint creation failed!");
- return 0;
- }
-
- g_errorCallback(endPoint, data, dataLength, CA_SEND_FAILED);
-
- CAAdapterFreeRemoteEndpoint(endPoint);
- }
-
OIC_LOG_V(DEBUG, IP_ADAPTER_TAG, "Successfully sent %d of encrypted data!", sentLength);
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "OUT");
OIC_LOG_V(DEBUG, IP_ADAPTER_TAG, "Address: %s, port:%d", ipAddress, port);
// CA is freeing this memory
- CARemoteEndpoint_t *endPoint = CAAdapterCreateRemoteEndpoint(CA_IPV4, ipAddress, NULL);
+ CARemoteEndpoint_t *endPoint = CAAdapterCreateRemoteEndpoint(CA_IPV4, ipAddress, NULL );
if (!endPoint)
{
OIC_LOG(ERROR, IP_ADAPTER_TAG, "EndPoint creation failed!");
endPoint->addressInfo.IP.port = port;
endPoint->isSecured = isSecured;
- void *buf = (void*)OICMalloc(sizeof(char) * dataLength);
+ void *buf = OICCalloc(dataLength + 1, sizeof(char));
if (!buf)
{
OIC_LOG(ERROR, IP_ADAPTER_TAG, "Memory Allocation failed!");
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "OUT");
}
-void CAIPErrorHandler (const char *ipAddress, uint16_t port, const void *data,
- uint32_t dataLength, bool isSecured, CAResult_t result)
-{
- OIC_LOG(DEBUG, IP_ADAPTER_TAG, "IN");
-
- VERIFY_NON_NULL_VOID(ipAddress, IP_ADAPTER_TAG, "ipAddress is NULL");
-
- VERIFY_NON_NULL_VOID(data, IP_ADAPTER_TAG, "data is NULL");
-
- OIC_LOG_V(DEBUG, IP_ADAPTER_TAG, "Address: %s, port:%d", ipAddress, port);
-
- // CA is freeing this memory
- CARemoteEndpoint_t *endPoint = CAAdapterCreateRemoteEndpoint(CA_IPV4, ipAddress, NULL );
- if (!endPoint)
- {
- OIC_LOG(ERROR, IP_ADAPTER_TAG, "EndPoint creation failed!");
- return;
- }
- endPoint->addressInfo.IP.port = port;
- endPoint->isSecured = isSecured;
-
- void *buf = (void*)OICMalloc(sizeof(char) * dataLength);
- if (!buf)
- {
- OIC_LOG(ERROR, IP_ADAPTER_TAG, "Memory Allocation failed!");
- CAAdapterFreeRemoteEndpoint(endPoint);
- return;
- }
- memcpy(buf, data, dataLength);
- if (g_errorCallback)
- {
- g_errorCallback(endPoint, buf, dataLength, result);
- }
- else
- {
- OICFree(buf);
- CAAdapterFreeRemoteEndpoint(endPoint);
- }
-
- OIC_LOG(DEBUG, IP_ADAPTER_TAG, "OUT");
-
- return;
-}
-
CAResult_t CAInitializeIP(CARegisterConnectivityCallback registerCallback,
- CANetworkPacketReceivedCallback networkPacketCallback,
- CANetworkChangeCallback netCallback,
- CAErrorHandleCallback errorCallback, ca_thread_pool_t handle)
+ CANetworkPacketReceivedCallback networkPacketCallback,
+ CANetworkChangeCallback netCallback, ca_thread_pool_t handle)
{
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "IN");
VERIFY_NON_NULL(registerCallback, IP_ADAPTER_TAG, "registerCallback");
g_threadPool = handle;
g_networkChangeCallback = netCallback;
g_networkPacketCallback = networkPacketCallback;
- g_errorCallback = errorCallback;
CAResult_t ret = CAIPInitializeNetworkMonitor(g_threadPool);
if (CA_STATUS_OK != ret)
}
CAIPSetPacketReceiveCallback(CAIPPacketReceivedCB);
- CAIPSetErrorHandleCallback(CAIPErrorHandler);
#ifdef __WITH_DTLS__
CAAdapterNetDtlsInit();
if (!ipData->remoteEndpoint->isSecured)
{
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "Send Unicast Data is called");
- uint32_t res = CAIPSendData(address, port, ipData->data, ipData->dataLen, false,
+ CAIPSendData(address, port, ipData->data, ipData->dataLen, false,
ipData->remoteEndpoint->isSecured);
- if (res == 0)
- {
- g_errorCallback(ipData->remoteEndpoint, ipData->data, ipData->dataLen,
- CA_SEND_FAILED);
- }
}
else
{
"CAAdapterNetDtlsEncrypt returned with cache[%d]", cacheFlag);
}
#else
- uint32_t res = CAIPSendData(address, port, ipData->data, ipData->dataLen, false,
+ CAIPSendData(address, port, ipData->data, ipData->dataLen, false,
ipData->remoteEndpoint->isSecured);
- if (res == 0)
- {
- g_errorCallback(ipData->remoteEndpoint, ipData->data, ipData->dataLen, CA_SEND_FAILED);
- }
-
#endif
}
else
{
//Processing for sending multicast
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "Send Multicast Data is called");
- uint32_t res = CAIPSendData(CA_MULTICAST_IP, CA_MCAST_PORT, ipData->data,
+ CAIPSendData(CA_MULTICAST_IP, CA_MCAST_PORT, ipData->data,
ipData->dataLen, true, false);
- if (res == 0)
- {
- g_errorCallback(ipData->remoteEndpoint, ipData->data, ipData->dataLen, CA_SEND_FAILED);
- }
}
OIC_LOG(DEBUG, IP_ADAPTER_TAG, "OUT");
{
OIC_LOG(ERROR, IP_CLIENT_TAG, "Invalid Socket Fd");
CAClearServerInfoList(tempServerInfoList);
- return 0;
+ return len;
}
OIC_LOG_V(DEBUG, IP_CLIENT_TAG, "IP unicast SendData sockFd %d", sockFd);
ca_thread_pool_t threadPool;
CAIPPacketReceivedCallback packetReceivedCallback;
CAIPExceptionCallback exceptionCallback;
- CAIPErrorHandleCallback IPErrorCallback;
} CAAdapterIPServerContext_t;
/**
static ca_mutex g_mutexServerInfoList = NULL;
/**
- * @var g_adapterIPServerContext
+ * @var g_adapterEthServerContext
* @brief Mutex to synchronize ethenet adapter context.
*/
-static CAAdapterIPServerContext_t *g_adapterIPServerContext = NULL;
+static CAAdapterIPServerContext_t *g_adapterEthServerContext = NULL;
/**
* @var g_mutexAdapterServerContext
OIC_LOG_V(ERROR, IP_SERVER_TAG, "Server socket shutdown sock fd[%d]", sd);
ca_mutex_lock(g_mutexAdapterServerContext);
// Notify upper layer this exception
- if (g_adapterIPServerContext->exceptionCallback)
+ if (g_adapterEthServerContext->exceptionCallback)
{
// need to make proper exception callback.
- //g_adapterIPServerContext->exceptionCallback(ctx->type);
+ //g_adapterEthServerContext->exceptionCallback(ctx->type);
}
ca_mutex_unlock(g_mutexAdapterServerContext);
}
{
ca_mutex_lock(g_mutexAdapterServerContext);
- if (g_adapterIPServerContext->packetReceivedCallback)
+ if (g_adapterEthServerContext->packetReceivedCallback)
{
- g_adapterIPServerContext->packetReceivedCallback(srcIPAddress, srcPort,
- recvBuffer, recvLen,
- false);
+ g_adapterEthServerContext->packetReceivedCallback(srcIPAddress, srcPort,
+ recvBuffer, recvLen,
+ false);
}
ca_mutex_unlock(g_mutexAdapterServerContext);
ca_mutex_lock(g_mutexAdapterServerContext);
- if (!g_adapterIPServerContext)
+ if (!g_adapterEthServerContext)
{
- OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterIPServerContext NULL");
+ OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterEthServerContext NULL");
ca_mutex_unlock(g_mutexAdapterServerContext);
return CA_STATUS_FAILED;
}
if (1 == listLength) //Its first time.
{
g_packetHandlerStopFlag = false;
- if (CA_STATUS_OK != ca_thread_pool_add_task(g_adapterIPServerContext->threadPool,
+ if (CA_STATUS_OK != ca_thread_pool_add_task(g_adapterEthServerContext->threadPool,
CAReceiveHandler, NULL ))
{
OIC_LOG(ERROR, IP_SERVER_TAG, "thread_pool_add_task failed!");
}
ca_mutex_lock(g_mutexAdapterServerContext);
- g_adapterIPServerContext = (CAAdapterIPServerContext_t *) OICCalloc(1,
+ g_adapterEthServerContext = (CAAdapterIPServerContext_t *) OICCalloc(1,
sizeof(CAAdapterIPServerContext_t));
- if (!g_adapterIPServerContext)
+ if (!g_adapterEthServerContext)
{
OIC_LOG(ERROR, IP_SERVER_TAG, "Malloc failed");
ca_mutex_unlock(g_mutexAdapterServerContext);
return CA_MEMORY_ALLOC_FAILED;
}
- g_adapterIPServerContext->threadPool = threadPool;
+ g_adapterEthServerContext->threadPool = threadPool;
ca_mutex_unlock(g_mutexAdapterServerContext);
{
OIC_LOG(DEBUG, IP_SERVER_TAG, "IN");
ca_mutex_lock(g_mutexAdapterServerContext);
- if (!g_adapterIPServerContext)
+ if (!g_adapterEthServerContext)
{
- OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterIPServerContext NULL");
+ OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterEthServerContext NULL");
ca_mutex_unlock(g_mutexAdapterServerContext);
return;
}
- OICFree(g_adapterIPServerContext);
- g_adapterIPServerContext = NULL;
+ OICFree(g_adapterEthServerContext);
+ g_adapterEthServerContext = NULL;
ca_mutex_unlock(g_mutexAdapterServerContext);
ca_mutex_lock(g_mutexAdapterServerContext);
- if (!g_adapterIPServerContext)
+ if (!g_adapterEthServerContext)
{
- OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterIPServerContext NULL");
+ OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterEthServerContext NULL");
ca_mutex_unlock(g_mutexAdapterServerContext);
return;
}
- g_adapterIPServerContext->packetReceivedCallback = callback;
-
- ca_mutex_unlock(g_mutexAdapterServerContext);
-
- OIC_LOG(DEBUG, IP_SERVER_TAG, "OUT");
-}
-
-void CAIPSetErrorHandleCallback(CAIPErrorHandleCallback ipErrorCallback)
-{
- OIC_LOG(DEBUG, IP_SERVER_TAG, "IN");
-
- ca_mutex_lock(g_mutexAdapterServerContext);
-
- if (!g_adapterIPServerContext)
- {
- OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterIPServerContext NULL");
- ca_mutex_unlock(g_mutexAdapterServerContext);
- return;
- }
- g_adapterIPServerContext->IPErrorCallback = ipErrorCallback;
+ g_adapterEthServerContext->packetReceivedCallback = callback;
ca_mutex_unlock(g_mutexAdapterServerContext);
OIC_LOG(DEBUG, IP_SERVER_TAG, "IN");
ca_mutex_lock(g_mutexAdapterServerContext);
- if (!g_adapterIPServerContext)
+ if (!g_adapterEthServerContext)
{
- OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterIPServerContext NULL");
+ OIC_LOG(ERROR, IP_SERVER_TAG, "g_adapterEthServerContext NULL");
ca_mutex_unlock(g_mutexAdapterServerContext);
return;
}
- g_adapterIPServerContext->exceptionCallback = callback;
+ g_adapterEthServerContext->exceptionCallback = callback;
ca_mutex_unlock(g_mutexAdapterServerContext);