From: jihwan.seo Date: Mon, 16 Jan 2017 08:41:06 +0000 (+0900) Subject: Apply the logic which can start transport type in initialize step. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1eed852b1041384de03e4d48df647689a5b72063;p=contrib%2Fiotivity.git Apply the logic which can start transport type in initialize step. In case of some scenario that just one library is used in here and there. There are many resource wastes related unused transport adapter. thru, It is better to provide it manually. Change-Id: Id34bad8db3a323c723af95330ef243041ba6fa34 Signed-off-by: jihwan.seo Reviewed-on: https://gerrit.iotivity.org/gerrit/16433 Tested-by: jenkins-iotivity Reviewed-by: Ashok Babu Channa --- diff --git a/resource/csdk/connectivity/api/cainterface.h b/resource/csdk/connectivity/api/cainterface.h index b5ad39c..6a4916d 100644 --- a/resource/csdk/connectivity/api/cainterface.h +++ b/resource/csdk/connectivity/api/cainterface.h @@ -85,10 +85,10 @@ void CARegisterKeepAliveHandler(CAKeepAliveConnectionCallback ConnHandler); * Initialize the connectivity abstraction module. * It will initialize adapters, thread pool and other modules based on the platform * compilation options. - * + * @param[in] transportType transport type to initialize. * @return ::CA_STATUS_OK or ::CA_STATUS_FAILED or ::CA_MEMORY_ALLOC_FAILED */ -CAResult_t CAInitialize(); +CAResult_t CAInitialize(CATransportAdapter_t transportType); /** * Terminate the connectivity abstraction module. diff --git a/resource/csdk/connectivity/inc/cainterfacecontroller.h b/resource/csdk/connectivity/inc/cainterfacecontroller.h index fa15c25..c4e44b9 100644 --- a/resource/csdk/connectivity/inc/cainterfacecontroller.h +++ b/resource/csdk/connectivity/inc/cainterfacecontroller.h @@ -50,8 +50,9 @@ void CAInitializeAdapters(); * Initializes different adapters based on the compilation flags. * @param[in] handle thread pool handle created by message handler * for different adapters. + * @param[in] transportType transport type to initialize. */ -void CAInitializeAdapters(ca_thread_pool_t handle); +void CAInitializeAdapters(ca_thread_pool_t handle, CATransportAdapter_t transportType); #endif /** diff --git a/resource/csdk/connectivity/inc/camessagehandler.h b/resource/csdk/connectivity/inc/camessagehandler.h index cdd0e8d..c49e8c9 100644 --- a/resource/csdk/connectivity/inc/camessagehandler.h +++ b/resource/csdk/connectivity/inc/camessagehandler.h @@ -76,9 +76,10 @@ void CASetInterfaceCallbacks(CARequestCallback ReqHandler, CAResponseCallback Re /** * Initialize the message handler by starting thread pool and initializing the * send and receive queue. + * @param[in] transportType transport type to initialize. * @return ::CA_STATUS_OK or ERROR CODES (::CAResult_t error codes in cacommon.h). */ -CAResult_t CAInitializeMessageHandler(); +CAResult_t CAInitializeMessageHandler(CATransportAdapter_t transportType); /** * Terminate the message handler by stopping the thread pool and destroying the queues. diff --git a/resource/csdk/connectivity/src/caconnectivitymanager.c b/resource/csdk/connectivity/src/caconnectivitymanager.c index a170ade..e051f38 100644 --- a/resource/csdk/connectivity/src/caconnectivitymanager.c +++ b/resource/csdk/connectivity/src/caconnectivitymanager.c @@ -55,14 +55,14 @@ extern void CAsetCredentialTypesCallback(CAgetCredentialTypesHandler credCallbac #endif // __WITH_DTLS__ or __WITH_TLS__ -CAResult_t CAInitialize() +CAResult_t CAInitialize(CATransportAdapter_t transportType) { OIC_LOG_V(DEBUG, TAG, "IoTivity version is v%s", IOTIVITY_VERSION); - OIC_LOG(DEBUG, TAG, "CAInitialize"); + OIC_LOG_V(DEBUG, TAG, "CAInitialize type : %d", transportType); if (!g_isInitialized) { - CAResult_t res = CAInitializeMessageHandler(); + CAResult_t res = CAInitializeMessageHandler(transportType); if (res != CA_STATUS_OK) { OIC_LOG(ERROR, TAG, "CAInitialize has failed"); diff --git a/resource/csdk/connectivity/src/cainterfacecontroller.c b/resource/csdk/connectivity/src/cainterfacecontroller.c index 311549e..427c436 100644 --- a/resource/csdk/connectivity/src/cainterfacecontroller.c +++ b/resource/csdk/connectivity/src/cainterfacecontroller.c @@ -288,39 +288,63 @@ static void CAAdapterErrorHandleCallback(const CAEndpoint_t *endpoint, } } -void CAInitializeAdapters(ca_thread_pool_t handle) +void CAInitializeAdapters(ca_thread_pool_t handle, CATransportAdapter_t transportType) { - OIC_LOG(DEBUG, TAG, "initialize adapters.."); + OIC_LOG_V(DEBUG, TAG, "initialize adapters %d", transportType); // Initialize adapters and register callback. #ifdef IP_ADAPTER - CAInitializeIP(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - CAAdapterErrorHandleCallback, handle); + if ((transportType & CA_ADAPTER_IP) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType & CA_ALL_ADAPTERS)) + { + CAInitializeIP(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + CAAdapterErrorHandleCallback, handle); + } #endif /* IP_ADAPTER */ #ifdef EDR_ADAPTER - CAInitializeEDR(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + if ((transportType & CA_ADAPTER_RFCOMM_BTEDR) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType == CA_ALL_ADAPTERS)) + { + CAInitializeEDR(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + } #endif /* EDR_ADAPTER */ #ifdef LE_ADAPTER - CAInitializeLE(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + if ((transportType & CA_ADAPTER_GATT_BTLE) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType == CA_ALL_ADAPTERS)) + { + CAInitializeLE(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + } #endif /* LE_ADAPTER */ #ifdef RA_ADAPTER - CAInitializeRA(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - handle); + if ((transportType & CA_ADAPTER_REMOTE_ACCESS) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType == CA_ALL_ADAPTERS)) + { + CAInitializeRA(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + handle); + } #endif /* RA_ADAPTER */ #ifdef TCP_ADAPTER - CAInitializeTCP(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + if ((transportType & CA_ADAPTER_TCP) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType == CA_ALL_ADAPTERS)) + { + CAInitializeTCP(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + CAConnectionChangedCallback, CAAdapterErrorHandleCallback, handle); + } #endif /* TCP_ADAPTER */ #ifdef NFC_ADAPTER - CAInitializeNFC(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, - CAAdapterErrorHandleCallback, handle); + if ((transportType & CA_ADAPTER_NFC) || (CA_DEFAULT_ADAPTER == transportType) + || (transportType == CA_ALL_ADAPTERS)) + { + CAInitializeNFC(CARegisterCallback, CAReceivedPacketCallback, CAAdapterChangedCallback, + CAAdapterErrorHandleCallback, handle); + } #endif /* NFC_ADAPTER */ } diff --git a/resource/csdk/connectivity/src/camessagehandler.c b/resource/csdk/connectivity/src/camessagehandler.c index 070cdcb..44869ee 100644 --- a/resource/csdk/connectivity/src/camessagehandler.c +++ b/resource/csdk/connectivity/src/camessagehandler.c @@ -1052,7 +1052,7 @@ void CASetNetworkMonitorCallback(CANetworkMonitorCallback nwMonitorHandler) g_nwMonitorHandler = nwMonitorHandler; } -CAResult_t CAInitializeMessageHandler() +CAResult_t CAInitializeMessageHandler(CATransportAdapter_t transportType) { CASetPacketReceivedCallback(CAReceivedPacketCallback); CASetErrorHandleCallback(CAErrorHandler); @@ -1130,7 +1130,7 @@ CAResult_t CAInitializeMessageHandler() } // initialize interface adapters by controller - CAInitializeAdapters(g_threadPoolHandle); + CAInitializeAdapters(g_threadPoolHandle, transportType); #else // retransmission initialize CAResult_t res = CARetransmissionInitialize(&g_retransmissionContext, NULL, CASendUnicastData, diff --git a/resource/csdk/connectivity/test/ca_api_unittest.cpp b/resource/csdk/connectivity/test/ca_api_unittest.cpp index f76d819..8b760c1 100755 --- a/resource/csdk/connectivity/test/ca_api_unittest.cpp +++ b/resource/csdk/connectivity/test/ca_api_unittest.cpp @@ -33,7 +33,7 @@ class CATests : public testing::Test { protected: virtual void SetUp() { - CAInitialize(); + CAInitialize(CA_DEFAULT_ADAPTER); } virtual void TearDown() @@ -165,7 +165,7 @@ int32_t CAGetDtlsPskCredentials( CADtlsPskCredType_t type, // CAInitialize TC TEST(InitializeTest, CAInitializeTest) { - EXPECT_EQ(CA_STATUS_OK, CAInitialize()); + EXPECT_EQ(CA_STATUS_OK, CAInitialize(CA_DEFAULT_ADAPTER)); CATerminate(); } @@ -177,7 +177,7 @@ TEST_F(CATests, TerminateTest) char* check = (char *) "terminate success"; EXPECT_STREQ(check, "terminate success"); - CAInitialize(); + CAInitialize(CA_DEFAULT_ADAPTER); } // CAStartListeningServer TC diff --git a/resource/csdk/connectivity/test/cablocktransfertest.cpp b/resource/csdk/connectivity/test/cablocktransfertest.cpp index 6540348..0c6fae2 100644 --- a/resource/csdk/connectivity/test/cablocktransfertest.cpp +++ b/resource/csdk/connectivity/test/cablocktransfertest.cpp @@ -31,7 +31,7 @@ class CABlockTransferTests : public testing::Test { protected: virtual void SetUp() { - CAInitialize(); + CAInitialize(CA_ADAPTER_IP); } virtual void TearDown() diff --git a/resource/csdk/octbstack_product.def b/resource/csdk/octbstack_product.def index ecb7cc6..825aef6 100644 --- a/resource/csdk/octbstack_product.def +++ b/resource/csdk/octbstack_product.def @@ -70,6 +70,7 @@ OCGetServerInstanceIDString OCGetSupportedEndpointTpsFlags OCInit OCInit1 +OCInit2 OCNotifyAllObservers OCNotifyListOfObservers OCPayloadDestroy diff --git a/resource/csdk/stack/include/ocstack.h b/resource/csdk/stack/include/ocstack.h index cbc01c8..fc04c3f 100644 --- a/resource/csdk/stack/include/ocstack.h +++ b/resource/csdk/stack/include/ocstack.h @@ -57,6 +57,19 @@ OCStackResult OCInit1(OCMode mode, OCTransportFlags serverFlags, OCTransportFlag /** * This function Initializes the OC Stack. Must be called prior to starting the stack. * + * @param mode OCMode Host device is client, server, or client-server. + * @param serverFlags OCTransportFlags Default server transport flags. + * @param clientFlags OCTransportFlags Default client transport flags. + * @param transportType OCTransportAdapter value to initialize. + * + * @return ::OC_STACK_OK on success, some other value upon failure. + */ +OCStackResult OCInit2(OCMode mode, OCTransportFlags serverFlags, OCTransportFlags clientFlags, + OCTransportAdapter transportType); + +/** + * This function Initializes the OC Stack. Must be called prior to starting the stack. + * * @param ipAddr IP Address of host device. Deprecated parameter. * @param port Port of host device. Deprecated parameter. * @param mode OCMode Host device is client, server, or client-server. diff --git a/resource/csdk/stack/src/ocstack.c b/resource/csdk/stack/src/ocstack.c index 03698d6..571c88b 100644 --- a/resource/csdk/stack/src/ocstack.c +++ b/resource/csdk/stack/src/ocstack.c @@ -296,10 +296,10 @@ static void incrementSequenceNumber(OCResource * resPtr); * * Note: At least one interface must succeed to initialize. If all calls to @ref CASelectNetwork * return something other than @ref CA_STATUS_OK, then this function fails. - * + * @param transportType OCTransportAdapter value to select. * @return ::CA_STATUS_OK on success, some other value upon failure. */ -static CAResult_t OCSelectNetwork(); +static CAResult_t OCSelectNetwork(OCTransportAdapter transportType); /** * Convert CAResponseResult_t to OCStackResult. @@ -2176,6 +2176,13 @@ OCStackResult OCInit(const char *ipAddr, uint16_t port, OCMode mode) OCStackResult OCInit1(OCMode mode, OCTransportFlags serverFlags, OCTransportFlags clientFlags) { + OIC_LOG(DEBUG, TAG, "call OCInit1"); + return OCInit2(mode, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS, OC_DEFAULT_ADAPTER); +} + +OCStackResult OCInit2(OCMode mode, OCTransportFlags serverFlags, OCTransportFlags clientFlags, + OCTransportAdapter transportType) +{ if(stackState == OC_STACK_INITIALIZED) { OIC_LOG(INFO, TAG, "Subsequent calls to OCInit() without calling \ @@ -2237,10 +2244,10 @@ OCStackResult OCInit1(OCMode mode, OCTransportFlags serverFlags, OCTransportFlag result = InitializeScheduleResourceList(); VERIFY_SUCCESS(result, OC_STACK_OK); - result = CAResultToOCResult(CAInitialize()); + result = CAResultToOCResult(CAInitialize((CATransportAdapter_t)transportType)); VERIFY_SUCCESS(result, OC_STACK_OK); - result = CAResultToOCResult(OCSelectNetwork()); + result = CAResultToOCResult(OCSelectNetwork(transportType)); VERIFY_SUCCESS(result, OC_STACK_OK); result = CAResultToOCResult(CARegisterNetworkMonitorHandler( @@ -4891,8 +4898,9 @@ const char* OCGetServerInstanceIDString(void) return sidStr; } -CAResult_t OCSelectNetwork() +CAResult_t OCSelectNetwork(OCTransportAdapter transportType) { + OIC_LOG_V(DEBUG, TAG, "OCSelectNetwork [%d]", transportType); CAResult_t retResult = CA_STATUS_FAILED; CAResult_t caResult = CA_STATUS_OK; @@ -4916,11 +4924,19 @@ CAResult_t OCSelectNetwork() // If CA status is not initialized, CASelectNetwork() will not be called. if (caResult != CA_STATUS_NOT_INITIALIZED) { - caResult = CASelectNetwork(connTypes[i]); - if (caResult == CA_STATUS_OK) - { - retResult = CA_STATUS_OK; - } + if ((connTypes[i] & transportType) || (OC_DEFAULT_ADAPTER == transportType)) + { + OIC_LOG_V(DEBUG, TAG, "call CASelectNetwork [%d]", connTypes[i]); + caResult = CASelectNetwork(connTypes[i]); + if (caResult == CA_STATUS_OK) + { + retResult = CA_STATUS_OK; + } + } + else + { + OIC_LOG_V(DEBUG, TAG, "there is no transport type [%d]", connTypes[i]); + } } } diff --git a/resource/examples/simpleclient.cpp b/resource/examples/simpleclient.cpp index 885d9aa..0c0149e 100644 --- a/resource/examples/simpleclient.cpp +++ b/resource/examples/simpleclient.cpp @@ -516,8 +516,9 @@ int main(int argc, char* argv[]) { PlatformConfig cfg { OC::ServiceType::InProc, OC::ModeType::Both, - "0.0.0.0", - 0, + OCConnectivityType::CT_ADAPTER_IP, + OCConnectivityType::CT_ADAPTER_IP, + (OCTransportAdapter)(OCTransportAdapter::OC_ADAPTER_IP|OCTransportAdapter::OC_ADAPTER_TCP), OC::QualityOfService::HighQos, &ps }; diff --git a/resource/examples/simpleserver.cpp b/resource/examples/simpleserver.cpp index 79b83d4..b232827 100644 --- a/resource/examples/simpleserver.cpp +++ b/resource/examples/simpleserver.cpp @@ -672,8 +672,7 @@ int main(int argc, char* argv[]) PlatformConfig cfg { OC::ServiceType::InProc, OC::ModeType::Server, - "0.0.0.0", // By setting to "0.0.0.0", it binds to all available interfaces - 0, // Uses randomly available port + (OCTransportAdapter)(OCTransportAdapter::OC_ADAPTER_IP|OCTransportAdapter::OC_ADAPTER_TCP), OC::QualityOfService::LowQos, &ps }; diff --git a/resource/include/OCApi.h b/resource/include/OCApi.h index ff2d212..100eec0 100644 --- a/resource/include/OCApi.h +++ b/resource/include/OCApi.h @@ -146,6 +146,9 @@ namespace OC /** default flags for client. */ OCConnectivityType clientConnectivity; + /** transport type to initialize. */ + OCTransportAdapter transportType; + /** not used. */ std::string ipAddress; @@ -164,6 +167,7 @@ namespace OC mode(ModeType::Both), serverConnectivity(CT_DEFAULT), clientConnectivity(CT_DEFAULT), + transportType(OC_DEFAULT_ADAPTER), ipAddress("0.0.0.0"), port(0), QoS(QualityOfService::NaQos), @@ -179,6 +183,7 @@ namespace OC mode(mode_), serverConnectivity(serverConnectivity_), clientConnectivity(clientConnectivity_), + transportType(OC_DEFAULT_ADAPTER), ipAddress(""), port(0), QoS(QoS_), @@ -195,11 +200,45 @@ namespace OC mode(mode_), serverConnectivity(CT_DEFAULT), clientConnectivity(CT_DEFAULT), + transportType(OC_DEFAULT_ADAPTER), ipAddress(ipAddress_), port(port_), QoS(QoS_), ps(ps_) {} + PlatformConfig(const ServiceType serviceType_, + const ModeType mode_, + OCTransportAdapter transportType_, + const QualityOfService QoS_, + OCPersistentStorage *ps_ = nullptr) + : serviceType(serviceType_), + mode(mode_), + serverConnectivity(CT_DEFAULT), + clientConnectivity(CT_DEFAULT), + transportType(transportType_), + ipAddress(""), + port(0), + QoS(QoS_), + ps(ps_) + {} + PlatformConfig(const ServiceType serviceType_, + const ModeType mode_, + OCConnectivityType serverConnectivity_, + OCConnectivityType clientConnectivity_, + OCTransportAdapter transportType_, + const QualityOfService QoS_, + OCPersistentStorage *ps_ = nullptr) + : serviceType(serviceType_), + mode(mode_), + serverConnectivity(serverConnectivity_), + clientConnectivity(clientConnectivity_), + transportType(transportType_), + ipAddress(""), + port(0), + QoS(QoS_), + ps(ps_) + {} + }; enum RequestHandlerFlag diff --git a/resource/src/InProcClientWrapper.cpp b/resource/src/InProcClientWrapper.cpp index 9dccd59..872a812 100644 --- a/resource/src/InProcClientWrapper.cpp +++ b/resource/src/InProcClientWrapper.cpp @@ -57,14 +57,16 @@ namespace OC OCStackResult InProcClientWrapper::start() { - OIC_LOG(INFO, TAG, "start ocplatform"); + OIC_LOG_V(INFO, TAG, "start ocplatform for client : %d", m_cfg.transportType); + if (m_cfg.mode == ModeType::Client) { OCTransportFlags serverFlags = static_cast(m_cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = static_cast(m_cfg.clientConnectivity & CT_MASK_FLAGS); - OCStackResult result = OCInit1(OC_CLIENT, serverFlags, clientFlags); + OCStackResult result = OCInit2(OC_CLIENT, serverFlags, clientFlags, + m_cfg.transportType); if (OC_STACK_OK != result) { diff --git a/resource/src/InProcServerWrapper.cpp b/resource/src/InProcServerWrapper.cpp index 5cfe7fc..774094d 100644 --- a/resource/src/InProcServerWrapper.cpp +++ b/resource/src/InProcServerWrapper.cpp @@ -266,10 +266,9 @@ namespace OC OCStackResult InProcServerWrapper::start() { - OIC_LOG(INFO, TAG, "start"); + OIC_LOG_V(INFO, TAG, "start ocplatform for server : %d", m_cfg.transportType); OCMode initType; - if(m_cfg.mode == ModeType::Server) { initType = OC_SERVER; @@ -292,7 +291,8 @@ namespace OC static_cast(m_cfg.serverConnectivity & CT_MASK_FLAGS); OCTransportFlags clientFlags = static_cast(m_cfg.clientConnectivity & CT_MASK_FLAGS); - OCStackResult result = OCInit1(initType, serverFlags, clientFlags); + OCStackResult result = OCInit2(initType, serverFlags, clientFlags, + m_cfg.transportType); if(OC_STACK_OK != result) {