static void CAIPPacketSendCB(CAEndpoint_t *endpoint, const void *data, uint32_t dataLength) { VERIFY_NON_NULL_VOID(endpoint, TAG, "endpoint is NULL"); VERIFY_NON_NULL_VOID(data, TAG, "data is NULL"); CAIPSendData(endpoint, data, dataLength, false); }
static int32_t CAQueueIPData(bool isMulticast, const CAEndpoint_t *endpoint, const void *data, uint32_t dataLength) { VERIFY_NON_NULL_RET(endpoint, TAG, "remoteEndpoint", -1); VERIFY_NON_NULL_RET(data, TAG, "data", -1); if (0 == dataLength) { OIC_LOG(ERROR, TAG, "Invalid Data Length"); return -1; } #ifdef SINGLE_THREAD CAIPSendData(endpoint, data, dataLength, isMulticast); return dataLength; #else VERIFY_NON_NULL_RET(g_sendQueueHandle, TAG, "sendQueueHandle", -1); // Create IPData to add to queue CAIPData_t *ipData = CACreateIPData(endpoint, data, dataLength, isMulticast); if (!ipData) { OIC_LOG(ERROR, TAG, "Failed to create ipData!"); return -1; } // Add message to send queue CAQueueingThreadAddData(g_sendQueueHandle, ipData, sizeof(CAIPData_t)); #endif // SINGLE_THREAD return dataLength; }
void CAIPSendDataThread(void *threadData) { OIC_LOG(DEBUG, TAG, "IN"); CAIPData_t *ipData = (CAIPData_t *) threadData; if (!ipData) { OIC_LOG(DEBUG, TAG, "Invalid ip data!"); return; } if (ipData->isMulticast) { //Processing for sending multicast OIC_LOG(DEBUG, TAG, "Send Multicast Data is called"); CAIPSendData(ipData->remoteEndpoint, ipData->data, ipData->dataLen, true); } else { //Processing for sending unicast #ifdef __WITH_DTLS__ if (ipData->remoteEndpoint && ipData->remoteEndpoint->flags & CA_SECURE) { OIC_LOG(DEBUG, TAG, "CAAdapterNetDtlsEncrypt called!"); CAResult_t result = CAAdapterNetDtlsEncrypt(ipData->remoteEndpoint, ipData->data, ipData->dataLen); if (CA_STATUS_OK != result) { OIC_LOG(ERROR, TAG, "CAAdapterNetDtlsEncrypt failed!"); } OIC_LOG_V(DEBUG, TAG, "CAAdapterNetDtlsEncrypt returned with result[%d]", result); } else { OIC_LOG(DEBUG, TAG, "Send Unicast Data is called"); CAIPSendData(ipData->remoteEndpoint, ipData->data, ipData->dataLen, false); } #else CAIPSendData(ipData->remoteEndpoint, ipData->data, ipData->dataLen, false); #endif } OIC_LOG(DEBUG, TAG, "OUT"); }