CAResult_t CAAdapterStartQueue() { OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "IN"); // Start send queue thread if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle)) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to Start Send Data Thread"); CAEDRClientUnsetCallbacks(); //Disconnect all the client connections CAEDRClientDisconnectAll(); return CA_STATUS_FAILED; } // Start receive queue thread if (CA_STATUS_OK != CAQueueingThreadStart(g_recvQueueHandle)) { OIC_LOG(ERROR, EDR_ADAPTER_TAG, "Failed to Start Receive Data Thread"); CAEDRClientUnsetCallbacks(); //Disconnect all the client connections CAEDRClientDisconnectAll(); return CA_STATUS_FAILED; } OIC_LOG(DEBUG, EDR_ADAPTER_TAG, "OUT"); return CA_STATUS_OK; }
CAResult_t CAStartTCP() { if (CA_STATUS_OK != CATCPInitializeQueueHandles()) { OIC_LOG(ERROR, TAG, "Failed to Initialize Queue Handle"); CATerminateTCP(); return CA_STATUS_FAILED; } // Start send queue thread if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle)) { OIC_LOG(ERROR, TAG, "Failed to Start Send Data Thread"); return CA_STATUS_FAILED; } CAResult_t ret = CATCPStartServer((const ca_thread_pool_t)caglobals.tcp.threadpool); if (CA_STATUS_OK != ret) { OIC_LOG_V(ERROR, TAG, "Failed to start server![%d]", ret); return ret; } return CA_STATUS_OK; }
CAResult_t CAStartIP() { // Specific the port number received from application. caglobals.ip.u6.port = caglobals.ports.udp.u6; caglobals.ip.u6s.port = caglobals.ports.udp.u6s; caglobals.ip.u4.port = caglobals.ports.udp.u4; caglobals.ip.u4s.port = caglobals.ports.udp.u4s; CAIPStartNetworkMonitor(); #ifdef SINGLE_THREAD uint16_t unicastPort = 55555; // Address is hardcoded as we are using Single Interface CAResult_t ret = CAIPStartServer(); if (CA_STATUS_OK != ret) { OIC_LOG_V(DEBUG, TAG, "CAIPStartServer failed[%d]", ret); return ret; } #else if (CA_STATUS_OK != CAIPInitializeQueueHandles()) { OIC_LOG(ERROR, TAG, "Failed to Initialize Queue Handle"); CATerminateIP(); return CA_STATUS_FAILED; } // Start send queue thread if (CA_STATUS_OK != CAQueueingThreadStart(g_sendQueueHandle)) { OIC_LOG(ERROR, TAG, "Failed to Start Send Data Thread"); return CA_STATUS_FAILED; } CAResult_t ret = CAIPStartServer((const ca_thread_pool_t)caglobals.ip.threadpool); if (CA_STATUS_OK != ret) { OIC_LOG_V(ERROR, TAG, "Failed to start server![%d]", ret); return ret; } #endif return CA_STATUS_OK; }
CAResult_t CAInitializeMessageHandler() { CASetPacketReceivedCallback(CAReceivedPacketCallback); CASetNetworkChangeCallback(CANetworkChangedCallback); CASetErrorHandleCallback(CAErrorHandler); #ifndef SINGLE_THREAD // create thread pool CAResult_t res = ca_thread_pool_init(MAX_THREAD_POOL_SIZE, &g_threadPoolHandle); if (CA_STATUS_OK != res) { OIC_LOG(ERROR, TAG, "thread pool initialize error."); return res; } // send thread initialize if (CA_STATUS_OK != CAQueueingThreadInitialize(&g_sendThread, g_threadPoolHandle, CASendThreadProcess, CADestroyData)) { OIC_LOG(ERROR, TAG, "Failed to Initialize send queue thread"); return CA_STATUS_FAILED; } // start send thread res = CAQueueingThreadStart(&g_sendThread); if (CA_STATUS_OK != res) { OIC_LOG(ERROR, TAG, "thread start error(send thread)."); ca_thread_pool_free(g_threadPoolHandle); g_threadPoolHandle = NULL; return res; } // receive thread initialize if (CA_STATUS_OK != CAQueueingThreadInitialize(&g_receiveThread, g_threadPoolHandle, CAReceiveThreadProcess, CADestroyData)) { OIC_LOG(ERROR, TAG, "Failed to Initialize receive queue thread"); return CA_STATUS_FAILED; } #ifndef SINGLE_HANDLE // This will be enabled when RI supports multi threading // start receive thread res = CAQueueingThreadStart(&g_receiveThread); if (res != CA_STATUS_OK) { OIC_LOG(ERROR, TAG, "thread start error(receive thread)."); return res; } #endif /* SINGLE_HANDLE */ // retransmission initialize CARetransmissionInitialize(&g_retransmissionContext, g_threadPoolHandle, CASendUnicastData, CATimeoutCallback, NULL); #ifdef WITH_BWT // block-wise transfer initialize CAInitializeBlockWiseTransfer(CAAddDataToSendThread, CAAddDataToReceiveThread); #endif // start retransmission res = CARetransmissionStart(&g_retransmissionContext); if (CA_STATUS_OK != res) { OIC_LOG(ERROR, TAG, "thread start error(retransmission thread)."); return res; } // initialize interface adapters by controller CAInitializeAdapters(g_threadPoolHandle); #else // retransmission initialize CARetransmissionInitialize(&g_retransmissionContext, NULL, CASendUnicastData, CATimeoutCallback, NULL); CAInitializeAdapters(); #endif return CA_STATUS_OK; }