CAResult_t CAStopListeningServerAdapters() { u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list) { OIC_LOG(ERROR, TAG, "No selected network"); return CA_STATUS_FAILED; } size_t length = u_arraylist_length(list); for (size_t i = 0; i < length; i++) { void* ptrType = u_arraylist_get(list, i); if(ptrType == NULL) { continue; } CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType; int index = CAGetAdapterIndex(connType); if (0 > index) { OIC_LOG(ERROR, TAG, "unknown connectivity type!"); continue; } if (g_adapterHandler[index].stopListenServer != NULL) { g_adapterHandler[index].stopListenServer(); } } return CA_STATUS_OK; }
CAResult_t CASendMulticastData(const CAEndpoint_t *endpoint, const void *data, uint32_t length) { u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list) { OIC_LOG(DEBUG, TAG, "No selected network"); return CA_SEND_FAILED; } CATransportFlags_t requestedAdapter = endpoint->adapter ? endpoint->adapter : CA_ALL_ADAPTERS; size_t selectedLength = u_arraylist_length(list); for (size_t i = 0; i < selectedLength; i++) { void* ptrType = u_arraylist_get(list, i); if(ptrType == NULL) { continue; } CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType; if ((connType & requestedAdapter) == 0) { continue; } int index = CAGetAdapterIndex(connType); if (0 > index) { OIC_LOG(DEBUG, TAG, "unknown connectivity type!"); continue; } uint32_t sentDataLen = 0; if (g_adapterHandler[index].sendDataToAll != NULL) { void *payload = (void *) OICMalloc(length); if (!payload) { OIC_LOG(ERROR, TAG, "Out of memory!"); return CA_MEMORY_ALLOC_FAILED; } memcpy(payload, data, length); sentDataLen = g_adapterHandler[index].sendDataToAll(endpoint, payload, length); OICFree(payload); } if (sentDataLen != length) { OIC_LOG(ERROR, TAG, "sendDataToAll failed! Error will be reported from adapter"); #ifdef SINGLE_THREAD //in case of single thread, no error handler. Report error immediately return CA_SEND_FAILED; #endif } } return CA_STATUS_OK; }
static bool CAIsSelectedNetworkAvailable() { u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list || u_arraylist_length(list) == 0) { OIC_LOG(ERROR, TAG, "No selected network"); return false; } return true; }
CAResult_t CAStartDiscoveryServerAdapters() { OIC_LOG(DEBUG, TAG, "IN"); CAResult_t result = CA_STATUS_FAILED; u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list) { OIC_LOG(ERROR, TAG, "No selected network"); return result; } size_t length = u_arraylist_length(list); for (size_t i = 0; i < length; i++) { void* ptrType = u_arraylist_get(list, i); if(ptrType == NULL) { continue; } CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType; int index = CAGetAdapterIndex(connType); if (0 > index) { OIC_LOG(DEBUG, TAG, "unknown connectivity type!"); continue; } if (g_adapterHandler[index].startDiscoveryServer != NULL) { const CAResult_t tmp = g_adapterHandler[index].startDiscoveryServer(); // Successful discovery if at least one adapter started. if (CA_STATUS_OK == tmp) { result = tmp; } } } OIC_LOG(DEBUG, TAG, "OUT"); return result; }
CAResult_t CAStartDiscoveryServerAdapters() { OIC_LOG(DEBUG, TAG, "IN"); u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list) { OIC_LOG(ERROR, TAG, "No selected network"); return CA_STATUS_FAILED; } for (uint32_t i = 0; i < u_arraylist_length(list); i++) { void* ptrType = u_arraylist_get(list, i); if(ptrType == NULL) { continue; } CATransportAdapter_t connType = *(CATransportAdapter_t *)ptrType; int index = CAGetAdapterIndex(connType); if (index == -1) { OIC_LOG(DEBUG, TAG, "unknown connectivity type!"); continue; } if (g_adapterHandler[index].startDiscoveryServer != NULL) { g_adapterHandler[index].startDiscoveryServer(); } } OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; }
CAResult_t CAReadData() { OIC_LOG(DEBUG, TAG, "IN"); u_arraylist_t *list = CAGetSelectedNetworkList(); if (!list) { return CA_STATUS_FAILED; } uint8_t i = 0; for (i = 0; i < u_arraylist_length(list); i++) { void *ptrType = u_arraylist_get(list, i); if (NULL == ptrType) { OIC_LOG(ERROR, TAG, "get list fail"); return CA_STATUS_FAILED; } CATransportAdapter_t connType = *(CATransportAdapter_t *) ptrType; int index = CAGetAdapterIndex(connType); if (-1 == index) { OIC_LOG(DEBUG, TAG, "unknown connectivity type!"); continue; } if (g_adapterHandler[index].readData != NULL) { g_adapterHandler[index].readData(); } } OIC_LOG(DEBUG, TAG, "OUT"); return CA_STATUS_OK; }
void CATerminateMessageHandler() { #ifndef SINGLE_THREAD CATransportAdapter_t connType; u_arraylist_t *list = CAGetSelectedNetworkList(); uint32_t length = u_arraylist_length(list); uint32_t i = 0; for (i = 0; i < length; i++) { void* ptrType = u_arraylist_get(list, i); if (NULL == ptrType) { continue; } connType = *(CATransportAdapter_t *)ptrType; CAStopAdapter(connType); } // stop retransmission if (NULL != g_retransmissionContext.threadMutex) { CARetransmissionStop(&g_retransmissionContext); } // stop thread // delete thread data if (NULL != g_sendThread.threadMutex) { CAQueueingThreadStop(&g_sendThread); } // stop thread // delete thread data if (NULL != g_receiveThread.threadMutex) { #ifndef SINGLE_HANDLE // This will be enabled when RI supports multi threading CAQueueingThreadStop(&g_receiveThread); #endif /* SINGLE_HANDLE */ } // destroy thread pool if (NULL != g_threadPoolHandle) { ca_thread_pool_free(g_threadPoolHandle); g_threadPoolHandle = NULL; } #ifdef WITH_BWT CATerminateBlockWiseTransfer(); #endif CARetransmissionDestroy(&g_retransmissionContext); CAQueueingThreadDestroy(&g_sendThread); CAQueueingThreadDestroy(&g_receiveThread); // terminate interface adapters by controller CATerminateAdapters(); #else // terminate interface adapters by controller CATerminateAdapters(); // stop retransmission CARetransmissionStop(&g_retransmissionContext); CARetransmissionDestroy(&g_retransmissionContext); #endif }