From ee6f9aa3e0dd3e01657ff0f71f9b79dcf7f1b071 Mon Sep 17 00:00:00 2001 From: Habib Virji Date: Fri, 11 Nov 2016 10:58:50 +0000 Subject: [PATCH] Remove resource directory dependency in lib OC - Android code related to the resource directory is removed from OCPlatform and is in standalone file. - In android resource-directory is linked as a shared file. - Resource directory code in the InProcServerWrapper was creating a circular dependency and unwanted requirement for the unit test and sample code. - This patch fixes this dependency and moves C++ code to the resource directory. https://jira.iotivity.org/browse/IOT-1510 Change-Id: I23423929b3000471d7fb91cb7c7bac89c3d1879b Signed-off-by: Habib Virji Reviewed-on: https://gerrit.iotivity.org/gerrit/14059 Tested-by: jenkins-iotivity Reviewed-by: Rick Bell --- android/android_api/base/jni/Android.mk | 5 +- android/android_api/base/jni/JniOcPlatform.cpp | 467 +------------------- android/android_api/base/jni/JniOcPlatform.h | 47 +- android/android_api/base/jni/JniOcRDClient.cpp | 488 +++++++++++++++++++++ android/android_api/base/jni/JniOcRDClient.h | 84 ++++ .../main/java/org/iotivity/base/OcPlatform.java | 307 ------------- .../main/java/org/iotivity/base/OcRDClient.java | 327 ++++++++++++++ .../org/iotivity/base/examples/CloudFragment.java | 15 +- .../client/airconditioner/aircon_controlee.cpp | 6 +- .../client/group_invite/group_light_share.cpp | 4 +- resource/csdk/resource-directory/SConscript | 27 +- .../csdk/resource-directory/include/RDClient.h | 112 +++++ resource/csdk/resource-directory/src/RDClient.cpp | 219 +++++++++ resource/examples/SConscript | 11 +- resource/examples/rdclient.cpp | 11 +- resource/include/IServerWrapper.h | 13 - resource/include/InProcServerWrapper.h | 30 +- resource/include/OCApi.h | 5 - resource/include/OCPlatform.h | 125 ------ resource/include/OCPlatform_impl.h | 24 - resource/src/InProcServerWrapper.cpp | 130 ------ resource/src/OCPlatform.cpp | 80 ---- resource/src/OCPlatform_impl.cpp | 42 -- resource/src/SConscript | 9 - 24 files changed, 1279 insertions(+), 1309 deletions(-) create mode 100644 android/android_api/base/jni/JniOcRDClient.cpp create mode 100644 android/android_api/base/jni/JniOcRDClient.h create mode 100644 android/android_api/base/src/main/java/org/iotivity/base/OcRDClient.java create mode 100644 resource/csdk/resource-directory/include/RDClient.h create mode 100644 resource/csdk/resource-directory/src/RDClient.cpp diff --git a/android/android_api/base/jni/Android.mk b/android/android_api/base/jni/Android.mk index c7e940b..7852692 100644 --- a/android/android_api/base/jni/Android.mk +++ b/android/android_api/base/jni/Android.mk @@ -115,7 +115,8 @@ LOCAL_SRC_FILES := JniOcStack.cpp \ JniOnDirectPairingListener.cpp \ JniOcDirectPairDevice.cpp \ JniOnPublishResourceListener.cpp \ - JniOnDeleteResourceListener.cpp + JniOnDeleteResourceListener.cpp \ + JniOcRDClient.cpp ifeq ($(MQ_FLAG), 1) LOCAL_SRC_FILES += JniOnMQTopicFoundListener.cpp \ @@ -155,6 +156,7 @@ ifeq ($(SECURED), 1) LOCAL_STATIC_LIBRARIES += android-ocprovision LOCAL_STATIC_LIBRARIES += android-ocpmapi endif +LOCAL_SHARED_LIBRARIES += android-rd ifeq "$(RD_MODE)" "CLIENT" LOCAL_CPPFLAGS += -DRD_CLIENT @@ -167,6 +169,7 @@ LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_string/include LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_malloc/include LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/stack/include LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/ocsocket/include +LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/resource-directory/include LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/oc_logger/include LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../extlibs/boost/boost_1_58_0 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../extlibs/cjson diff --git a/android/android_api/base/jni/JniOcPlatform.cpp b/android/android_api/base/jni/JniOcPlatform.cpp index a746cfe..d474ec2 100644 --- a/android/android_api/base/jni/JniOcPlatform.cpp +++ b/android/android_api/base/jni/JniOcPlatform.cpp @@ -28,6 +28,7 @@ #include "JniOcDirectPairDevice.h" #include "JniUtils.h" #include "ocpayload.h" +#include "RDClient.h" #ifdef WITH_CLOUD #include "JniOcAccountManager.h" @@ -536,172 +537,6 @@ void RemoveOnDirectPairingListener(JNIEnv* env, jobject jListener) directPairingListenerMapLock.unlock(); } -JniOnPublishResourceListener* AddOnPublishResourceListener(JNIEnv* env, jobject jListener) -{ - if (!env) - { - LOGD("env is null"); - return nullptr; - } - - JniOnPublishResourceListener *onPublishResourceListener = nullptr; - - publishResourceListenerMapLock.lock(); - - for (auto it = onPublishResourceListenerMap.begin(); it != - onPublishResourceListenerMap.end(); ++it) - { - if (env->IsSameObject(jListener, it->first)) - { - auto refPair = it->second; - onPublishResourceListener = refPair.first; - refPair.second++; - it->second = refPair; - onPublishResourceListenerMap.insert(*it); - LOGD("onPublishResourceListener: ref. count incremented"); - break; - } - } - if (!onPublishResourceListener) - { - onPublishResourceListener = new JniOnPublishResourceListener(env, jListener, - RemoveOnPublishResourceListener); - jobject jgListener = env->NewGlobalRef(jListener); - onPublishResourceListenerMap.insert( - std::pair>( - jgListener, - std::pair(onPublishResourceListener, 1))); - LOGI("onPublishResourceListener: new listener"); - } - publishResourceListenerMapLock.unlock(); - return onPublishResourceListener; -} - -void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener) -{ - if (!env) - { - LOGE("env is null"); - return; - } - - publishResourceListenerMapLock.lock(); - bool isFound = false; - for (auto it = onPublishResourceListenerMap.begin(); it != - onPublishResourceListenerMap.end(); ++it) - { - if (env->IsSameObject(jListener, it->first)) - { - auto refPair = it->second; - if (refPair.second > 1) - { - refPair.second--; - it->second = refPair; - onPublishResourceListenerMap.insert(*it); - LOGI("onPublishResourceListener: ref. count decremented"); - } - else - { - env->DeleteGlobalRef(it->first); - JniOnPublishResourceListener* listener = refPair.first; - delete listener; - onPublishResourceListenerMap.erase(it); - LOGI("onPublishResourceListener is removed"); - } - isFound = true; - break; - } - } - if (!isFound) - { - ThrowOcException(JNI_EXCEPTION, "onPublishResourceListener not found"); - } - publishResourceListenerMapLock.unlock(); -} - -JniOnDeleteResourceListener* AddOnDeleteResourceListener(JNIEnv* env, jobject jListener) -{ - if (!env) - { - LOGD("env is null"); - return nullptr; - } - - JniOnDeleteResourceListener *onDeleteResourceListener = nullptr; - - deleteResourceListenerMapLock.lock(); - - for (auto it = onDeleteResourceListenerMap.begin(); it != - onDeleteResourceListenerMap.end(); ++it) - { - if (env->IsSameObject(jListener, it->first)) - { - auto refPair = it->second; - onDeleteResourceListener = refPair.first; - refPair.second++; - it->second = refPair; - onDeleteResourceListenerMap.insert(*it); - LOGD("onDeleteResourceListener: ref. count incremented"); - break; - } - } - if (!onDeleteResourceListener) - { - onDeleteResourceListener = new JniOnDeleteResourceListener(env, jListener, - RemoveOnDeleteResourceListener); - jobject jgListener = env->NewGlobalRef(jListener); - onDeleteResourceListenerMap.insert( - std::pair>( - jgListener, - std::pair(onDeleteResourceListener, 1))); - LOGI("onDeleteResourceListener: new listener"); - } - deleteResourceListenerMapLock.unlock(); - return onDeleteResourceListener; -} - -void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener) -{ - if (!env) - { - LOGE("env is null"); - return; - } - - deleteResourceListenerMapLock.lock(); - bool isFound = false; - for (auto it = onDeleteResourceListenerMap.begin(); it != - onDeleteResourceListenerMap.end(); ++it) - { - if (env->IsSameObject(jListener, it->first)) - { - auto refPair = it->second; - if (refPair.second > 1) - { - refPair.second--; - it->second = refPair; - onDeleteResourceListenerMap.insert(*it); - LOGI("onDeleteResourceListener: ref. count decremented"); - } - else - { - env->DeleteGlobalRef(it->first); - JniOnDeleteResourceListener* listener = refPair.first; - delete listener; - onDeleteResourceListenerMap.erase(it); - LOGI("onDeleteResourceListener is removed"); - } - isFound = true; - break; - } - } - if (!isFound) - { - ThrowOcException(JNI_EXCEPTION, "onDeleteResourceListener not found"); - } - deleteResourceListenerMapLock.unlock(); -} - /* * Class: org_iotivity_base_OcPlatform * Method: configure @@ -2634,306 +2469,6 @@ JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0( } /* - * Class: org_iotivity_base_OcPlatform - * Method: publishResourceToRD0 - * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V - */ -JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD0( - JNIEnv *env, - jclass clazz, - jstring jHost, - jint jConnectivityType, - jobject jListener, - jint jQoS) -{ - LOGD("OcPlatform_publishResourceToRD"); -#ifdef RD_CLIENT - std::string host; - if (jHost) - { - host = env->GetStringUTFChars(jHost, nullptr); - } - if (!jListener) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null"); - return; - } - JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener); - - PublishResourceCallback pubResCallback = [onPubResListener]( - const OCRepresentation& ocRepresentation, - const int eCode) - { - onPubResListener->onPublishResourceCallback(ocRepresentation, eCode); - }; - - try - { - OCStackResult result = OCPlatform::publishResourceToRD( - host, - static_cast(jConnectivityType), - pubResCallback, - JniUtils::getQOS(env, static_cast(jQoS))); - - if (OC_STACK_OK != result) - { - ThrowOcException(result, "Publish resource has failed"); - return; - } - } - catch (OCException& e) - { - LOGE("%s", e.reason().c_str()); - ThrowOcException(e.code(), e.reason().c_str()); - } -#else - ThrowOcException(JNI_NO_SUPPORT, "Not supported"); - return; -#endif -} - -/* - * Class: org_iotivity_base_OcPlatform - * Method: publishResourceToRD1 - * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V - */ -JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD1( - JNIEnv *env, - jclass clazz, - jstring jHost, - jint jConnectivityType, - jobjectArray jResourceHandleArray, - jobject jListener, - jint jQoS) -{ - LOGD("OcPlatform_publishResourceToRD"); -#ifdef RD_CLIENT - if (!env) - { - LOGE("env is null"); - return; - } - std::string host; - if (jHost) - { - host = env->GetStringUTFChars(jHost, nullptr); - } - if (!jListener) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null"); - return; - } - if (!jResourceHandleArray) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null"); - return; - } - JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener); - - PublishResourceCallback pubResCallback = [onPubResListener]( - const OCRepresentation& ocRepresentation, - const int eCode) - { - onPubResListener->onPublishResourceCallback(ocRepresentation, eCode); - }; - - std::vector resourceHandleList; - size_t len = env->GetArrayLength(jResourceHandleArray); - for (size_t i = 0; i < len; ++i) - { - jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i); - if (!jResourceHandle) - { - ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null"); - return; - } - - JniOcResourceHandle* jniOcResourceHandle = - JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle); - if (!jniOcResourceHandle) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid"); - return; - } - - resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle()); - } - - try - { - OCStackResult result = OCPlatform::publishResourceToRD( - host, - static_cast(jConnectivityType), - resourceHandleList, - pubResCallback, - JniUtils::getQOS(env, static_cast(jQoS))); - - if (OC_STACK_OK != result) - { - ThrowOcException(result, "Publish resource has failed"); - return; - } - } - catch (OCException& e) - { - LOGE("%s", e.reason().c_str()); - ThrowOcException(e.code(), e.reason().c_str()); - } -#else - ThrowOcException(JNI_NO_SUPPORT, "Not supported"); - return; -#endif -} - -/* - * Class: org_iotivity_base_OcPlatform - * Method: deleteResourceFromRD0 - * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V - */ -JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD0( - JNIEnv *env, - jclass clazz, - jstring jHost, - jint jConnectivityType, - jobject jListener, - jint jQoS) -{ - LOGD("OcPlatform_deleteResourceFromRD"); -#ifdef RD_CLIENT - std::string host; - if (jHost) - { - host = env->GetStringUTFChars(jHost, nullptr); - } - if (!jListener) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null"); - return; - } - JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener); - - DeleteResourceCallback delResCallback = [onDelResListener](const int eCode) - { - onDelResListener->onDeleteResourceCallback(eCode); - }; - - try - { - OCStackResult result = OCPlatform::deleteResourceFromRD( - host, - static_cast(jConnectivityType), - delResCallback, - JniUtils::getQOS(env, static_cast(jQoS))); - - if (OC_STACK_OK != result) - { - ThrowOcException(result, "Delete resource has failed"); - return; - } - } - catch (OCException& e) - { - LOGE("%s", e.reason().c_str()); - ThrowOcException(e.code(), e.reason().c_str()); - } -#else - ThrowOcException(JNI_NO_SUPPORT, "Not supported"); - return; -#endif -} - -/* - * Class: org_iotivity_base_OcPlatform - * Method: deleteResourceFromRD1 - * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V - */ -JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD1( - JNIEnv *env, - jclass clazz, - jstring jHost, - jint jConnectivityType, - jobjectArray jResourceHandleArray, - jobject jListener, - jint jQoS) -{ - LOGD("OcPlatform_deleteResourceFromRD"); -#ifdef RD_CLIENT - if (!env) - { - LOGE("env is null"); - return; - } - std::string host; - if (jHost) - { - host = env->GetStringUTFChars(jHost, nullptr); - } - if (!jListener) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null"); - return; - } - if (!jResourceHandleArray) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null"); - return; - } - JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener); - - DeleteResourceCallback delResCallback = [onDelResListener](const int eCode) - { - onDelResListener->onDeleteResourceCallback(eCode); - }; - - std::vector resourceHandleList; - size_t len = env->GetArrayLength(jResourceHandleArray); - for (size_t i = 0; i < len; ++i) - { - jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i); - if (!jResourceHandle) - { - ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null"); - return; - } - - JniOcResourceHandle* jniOcResourceHandle = - JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle); - if (!jniOcResourceHandle) - { - ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid"); - return; - } - - resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle()); - } - - try - { - OCStackResult result = OCPlatform::deleteResourceFromRD( - host, - static_cast(jConnectivityType), - resourceHandleList, - delResCallback, - JniUtils::getQOS(env, static_cast(jQoS))); - - if (OC_STACK_OK != result) - { - ThrowOcException(result, "Delete resource has failed"); - return; - } - } - catch (OCException& e) - { - LOGE("%s", e.reason().c_str()); - ThrowOcException(e.code(), e.reason().c_str()); - } -#else - ThrowOcException(JNI_NO_SUPPORT, "Not supported"); - return; -#endif -} - -/* * Class: org_iotivity_base_OcPlatform * Method: constructAccountManagerObject0 * Signature: (Ljava/lang/String;I)Lorg/iotivity/base/OcAccountManager; diff --git a/android/android_api/base/jni/JniOcPlatform.h b/android/android_api/base/jni/JniOcPlatform.h index cf6e20f..a6641e3 100644 --- a/android/android_api/base/jni/JniOcPlatform.h +++ b/android/android_api/base/jni/JniOcPlatform.h @@ -27,8 +27,7 @@ #include "JniOnDirectPairingListener.h" #include "JniOnPresenceListener.h" #include "JniOnObserveListener.h" -#include "JniOnPublishResourceListener.h" -#include "JniOnDeleteResourceListener.h" + #include #ifndef _Included_org_iotivity_base_OcPlatform @@ -57,12 +56,6 @@ void RemoveOnDPDevicesFoundListener(JNIEnv* env, jobject jListener); JniOnDirectPairingListener* AddOnDirectPairingListener(JNIEnv* env, jobject jListener); void RemoveOnDirectPairingListener(JNIEnv* env, jobject jListener); -JniOnPublishResourceListener* AddOnPublishResourceListener(JNIEnv* env, jobject jListener); -void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener); - -JniOnDeleteResourceListener* AddOnDeleteResourceListener(JNIEnv* env, jobject jListener); -void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener); - std::map> onResourceFoundListenerMap; std::map> onDeviceInfoListenerMap; std::map> onPlatformInfoListenerMap; @@ -70,8 +63,6 @@ std::map> onPresenceListenerMap; std::map> onObserveListenerMap; std::map> onDPDevicesFoundListenerMap; std::map> directPairingListenerMap; -std::map> onPublishResourceListenerMap; -std::map> onDeleteResourceListenerMap; std::mutex resourceFoundMapLock; std::mutex deviceInfoMapLock; @@ -80,8 +71,6 @@ std::mutex presenceMapLock; std::mutex observeMapLock; std::mutex dpDevicesFoundListenerMapLock; std::mutex directPairingListenerMapLock; -std::mutex publishResourceListenerMapLock; -std::mutex deleteResourceListenerMapLock; #ifdef __cplusplus extern "C" { @@ -353,39 +342,6 @@ extern "C" { (JNIEnv *, jclass, jobject, jint, jstring, jobject); /* - * Class: org_iotivity_base_OcPlatform - * Method: publishResourceToRD0 - * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V - */ - JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD0 - (JNIEnv *, jclass, jstring, jint, jobject, jint); - - /* - * Class: org_iotivity_base_OcPlatform - * Method: publishResourceToRD1 - * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle - * ;Lorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V - */ - JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD1 - (JNIEnv *, jclass, jstring, jint, jobjectArray, jobject, jint); - - /* - * Class: org_iotivity_base_OcPlatform - * Method: deleteResourceFromRD0 - * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V - */ - JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD0 - (JNIEnv *, jclass, jstring, jint, jobject, jint); - - /* - * Class: org_iotivity_base_OcPlatform - * Method: deleteResourceFromRD1 - * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V - */ - JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD1 - (JNIEnv *, jclass, jstring, jint, jobjectArray, jobject, jint); - - /* * Class: org_iotivity_base_OcPlatform * Method: constructAccountManagerObject0 * Signature: (Ljava/lang/String;I)Lorg/iotivity/base/OcAccountManager; @@ -413,4 +369,3 @@ extern "C" { } #endif #endif - diff --git a/android/android_api/base/jni/JniOcRDClient.cpp b/android/android_api/base/jni/JniOcRDClient.cpp new file mode 100644 index 0000000..41c7a5d --- /dev/null +++ b/android/android_api/base/jni/JniOcRDClient.cpp @@ -0,0 +1,488 @@ +/* **************************************************************** + * + * Copyright 2016 Samsung Electronics All Rights Reserved. + * + * + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ +#include "JniOcRDClient.h" +#include "JniUtils.h" +#include "JniOcResourceHandle.h" + +#include "RDClient.h" + +void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener) +{ + if (!env) + { + LOGE("env is null"); + return; + } + + publishResourceListenerMapLock.lock(); + bool isFound = false; + for (auto it = onPublishResourceListenerMap.begin(); it != onPublishResourceListenerMap.end(); ++it) + { + if (env->IsSameObject(jListener, it->first)) + { + auto refPair = it->second; + if (refPair.second > 1) + { + refPair.second--; + it->second = refPair; + onPublishResourceListenerMap.insert(*it); + LOGI("onPublishResourceListener: ref. count decremented"); + } + else + { + env->DeleteGlobalRef(it->first); + JniOnPublishResourceListener* listener = refPair.first; + delete listener; + onPublishResourceListenerMap.erase(it); + LOGI("onPublishResourceListener is removed"); + } + isFound = true; + break; + } + } + if (!isFound) + { + ThrowOcException(JNI_EXCEPTION, "onPublishResourceListener not found"); + } + publishResourceListenerMapLock.unlock(); +} + +JniOnPublishResourceListener* AddOnPublishResourceListener(JNIEnv* env, jobject jListener) +{ + if (!env) + { + LOGD("env is null"); + return nullptr; + } + + JniOnPublishResourceListener *onPublishResourceListener = nullptr; + + publishResourceListenerMapLock.lock(); + + for (auto it = onPublishResourceListenerMap.begin(); it != + onPublishResourceListenerMap.end(); ++it) + { + if (env->IsSameObject(jListener, it->first)) + { + auto refPair = it->second; + onPublishResourceListener = refPair.first; + refPair.second++; + it->second = refPair; + onPublishResourceListenerMap.insert(*it); + LOGD("onPublishResourceListener: ref. count incremented"); + break; + } + } + if (!onPublishResourceListener) + { + onPublishResourceListener = new JniOnPublishResourceListener(env, jListener, + RemoveOnPublishResourceListener); + + jobject jgListener = env->NewGlobalRef(jListener); + onPublishResourceListenerMap.insert( + std::pair>( + jgListener, + std::pair(onPublishResourceListener, 1))); + LOGI("onPublishResourceListener: new listener"); + } + publishResourceListenerMapLock.unlock(); + return onPublishResourceListener; +} + +void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener) +{ + if (!env) + { + LOGE("env is null"); + return; + } + + deleteResourceListenerMapLock.lock(); + bool isFound = false; + for (auto it = onDeleteResourceListenerMap.begin(); it != + onDeleteResourceListenerMap.end(); ++it) + { + if (env->IsSameObject(jListener, it->first)) + { + auto refPair = it->second; + if (refPair.second > 1) + { + refPair.second--; + it->second = refPair; + onDeleteResourceListenerMap.insert(*it); + LOGI("onDeleteResourceListener: ref. count decremented"); + } + else + { + env->DeleteGlobalRef(it->first); + JniOnDeleteResourceListener* listener = refPair.first; + delete listener; + onDeleteResourceListenerMap.erase(it); + LOGI("onDeleteResourceListener is removed"); + } + isFound = true; + break; + } + } + if (!isFound) + { + ThrowOcException(JNI_EXCEPTION, "onDeleteResourceListener not found"); + } + deleteResourceListenerMapLock.unlock(); +} + +JniOnDeleteResourceListener* AddOnDeleteResourceListener(JNIEnv* env, jobject jListener) +{ + if (!env) + { + LOGD("env is null"); + return nullptr; + } + + JniOnDeleteResourceListener *onDeleteResourceListener = nullptr; + + deleteResourceListenerMapLock.lock(); + + for (auto it = onDeleteResourceListenerMap.begin(); it != + onDeleteResourceListenerMap.end(); ++it) + { + if (env->IsSameObject(jListener, it->first)) + { + auto refPair = it->second; + onDeleteResourceListener = refPair.first; + refPair.second++; + it->second = refPair; + onDeleteResourceListenerMap.insert(*it); + LOGD("onDeleteResourceListener: ref. count incremented"); + break; + } + } + if (!onDeleteResourceListener) + { + onDeleteResourceListener = new JniOnDeleteResourceListener(env, jListener, + RemoveOnDeleteResourceListener); + jobject jgListener = env->NewGlobalRef(jListener); + onDeleteResourceListenerMap.insert( + std::pair>( + jgListener, + std::pair(onDeleteResourceListener, 1))); + LOGI("onDeleteResourceListener: new listener"); + } + deleteResourceListenerMapLock.unlock(); + return onDeleteResourceListener; +} + +/* + * Class: org_iotivity_base_OcRDClient + * Method: publishResourceToRD0 + * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcRDClient/OnPublishResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_publishResourceToRD0( + JNIEnv *env, + jclass clazz, + jstring jHost, + jint jConnectivityType, + jobject jListener, + jint jQoS) +{ + LOGD("OcRDClient_publishResourceToRD"); +#ifdef RD_CLIENT + std::string host; + if (jHost) + { + host = env->GetStringUTFChars(jHost, nullptr); + } + if (!jListener) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null"); + return; + } + JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener); + + PublishResourceCallback pubResCallback = [onPubResListener]( + const OCRepresentation& ocRepresentation, + const int eCode) + { + onPubResListener->onPublishResourceCallback(ocRepresentation, eCode); + }; + + try + { + OCStackResult result = RDClient::Instance().publishResourceToRD( + host, + static_cast(jConnectivityType), + pubResCallback, + JniUtils::getQOS(env, static_cast(jQoS))); + + if (OC_STACK_OK != result) + { + ThrowOcException(result, "Publish resource has failed"); + return; + } + } + catch (OCException& e) + { + LOGE("%s", e.reason().c_str()); + ThrowOcException(e.code(), e.reason().c_str()); + } +#else + ThrowOcException(JNI_NO_SUPPORT, "Not supported"); + return; +#endif +} + +/* + * Class: org_iotivity_base_OcRDClient + * Method: publishResourceToRD1 + * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcRDClient/OnPublishResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_publishResourceToRD1( + JNIEnv *env, + jclass clazz, + jstring jHost, + jint jConnectivityType, + jobjectArray jResourceHandleArray, + jobject jListener, + jint jQoS) +{ + LOGD("OcRDClient_publishResourceToRD"); +#ifdef RD_CLIENT + if (!env) + { + LOGE("env is null"); + return; + } + std::string host; + if (jHost) + { + host = env->GetStringUTFChars(jHost, nullptr); + } + if (!jListener) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null"); + return; + } + if (!jResourceHandleArray) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null"); + return; + } + JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener); + + PublishResourceCallback pubResCallback = [onPubResListener]( + const OCRepresentation& ocRepresentation, + const int eCode) + { + onPubResListener->onPublishResourceCallback(ocRepresentation, eCode); + }; + + std::vector resourceHandleList; + size_t len = env->GetArrayLength(jResourceHandleArray); + for (size_t i = 0; i < len; ++i) + { + jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i); + if (!jResourceHandle) + { + ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null"); + return; + } + JniOcResourceHandle* jniOcResourceHandle = + JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle); + if (!jniOcResourceHandle) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid"); + return; + } + + resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle()); + } + + try + { + OCStackResult result = RDClient::Instance().publishResourceToRD( + host, + static_cast(jConnectivityType), + resourceHandleList, + pubResCallback, + JniUtils::getQOS(env, static_cast(jQoS))); + + if (OC_STACK_OK != result) + { + ThrowOcException(result, "Publish resource has failed"); + return; + } + } + catch (OCException& e) + { + LOGE("%s", e.reason().c_str()); + ThrowOcException(e.code(), e.reason().c_str()); + } +#else + ThrowOcException(JNI_NO_SUPPORT, "Not supported"); + return; +#endif +} + +/* + * Class: org_iotivity_base_OcRDClient + * Method: deleteResourceFromRD0 + * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcRDClient/OnDeleteResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_deleteResourceFromRD0( + JNIEnv *env, + jclass clazz, + jstring jHost, + jint jConnectivityType, + jobject jListener, + jint jQoS) +{ + LOGD("OcRDClient_deleteResourceFromRD"); +#ifdef RD_CLIENT + std::string host; + if (jHost) + { + host = env->GetStringUTFChars(jHost, nullptr); + } + if (!jListener) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null"); + return; + } + JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener); + + DeleteResourceCallback delResCallback = [onDelResListener](const int eCode) + { + onDelResListener->onDeleteResourceCallback(eCode); + }; + try + { + OCStackResult result = RDClient::Instance().deleteResourceFromRD( + host, + static_cast(jConnectivityType), + delResCallback, + JniUtils::getQOS(env, static_cast(jQoS))); + + if (OC_STACK_OK != result) + { + ThrowOcException(result, "Delete resource has failed"); + return; + } + } + catch (OCException& e) + { + LOGE("%s", e.reason().c_str()); + ThrowOcException(e.code(), e.reason().c_str()); + } + #else + ThrowOcException(JNI_NO_SUPPORT, "Not supported"); + return; + #endif + } + + /* + * Class: org_iotivity_base_OcRDClient + * Method: deleteResourceFromRD1 + * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcRDClient/OnDeleteResourceListener;I)V + */ + JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_deleteResourceFromRD1( + JNIEnv *env, + jclass clazz, + jstring jHost, + jint jConnectivityType, + jobjectArray jResourceHandleArray, + jobject jListener, + jint jQoS) + { + LOGD("OcRDClient_deleteResourceFromRD"); + #ifdef RD_CLIENT + if (!env) + { + LOGE("env is null"); + return; + } + std::string host; + if (jHost) + { + host = env->GetStringUTFChars(jHost, nullptr); + } + if (!jListener) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null"); + return; + } + if (!jResourceHandleArray) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null"); + return; + } + JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener); + + DeleteResourceCallback delResCallback = [onDelResListener](const int eCode) + { + onDelResListener->onDeleteResourceCallback(eCode); + }; + + std::vector resourceHandleList; + size_t len = env->GetArrayLength(jResourceHandleArray); + for (size_t i = 0; i < len; ++i) + { + jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i); + if (!jResourceHandle) + { + ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null"); + return; + } + + JniOcResourceHandle* jniOcResourceHandle = + JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle); + if (!jniOcResourceHandle) + { + ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid"); + return; + } + + resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle()); + } + + try + { + OCStackResult result = RDClient::Instance().deleteResourceFromRD( + host, + static_cast(jConnectivityType), + resourceHandleList, + delResCallback, + JniUtils::getQOS(env, static_cast(jQoS))); + + if (OC_STACK_OK != result) + { + ThrowOcException(result, "Delete resource has failed"); + return; + } + } + catch (OCException& e) + { + LOGE("%s", e.reason().c_str()); + ThrowOcException(e.code(), e.reason().c_str()); + } + #else + ThrowOcException(JNI_NO_SUPPORT, "Not supported"); + return; + #endif + } diff --git a/android/android_api/base/jni/JniOcRDClient.h b/android/android_api/base/jni/JniOcRDClient.h new file mode 100644 index 0000000..171c2c4 --- /dev/null +++ b/android/android_api/base/jni/JniOcRDClient.h @@ -0,0 +1,84 @@ +/* **************************************************************** + * + * Copyright 2016 Samsung Electronics All Rights Reserved. + * + * + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ + + #include "JniOcStack.h" + #include "JniOnPublishResourceListener.h" + #include "JniOnDeleteResourceListener.h" + +#include + +#ifndef _Included_org_iotivity_base_RDClient +#define _Included_org_iotivity_base_RDClient + +using namespace OC; + +void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener); +JniOnPublishResourceListener* AddOnPublishResourceListener(JNIEnv* env, jobject jListener); + +void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener); +JniOnDeleteResourceListener* AddOnDeleteResourceListener(JNIEnv* env, jobject jListener); + +std::map> onPublishResourceListenerMap; +std::map> onDeleteResourceListenerMap; + +std::mutex publishResourceListenerMapLock; +std::mutex deleteResourceListenerMapLock; + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Class: org_iotivity_base_OcRDClient + * Method: publishResourceToRD0 + * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcRDClient/OnPublishResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_publishResourceToRD0 + (JNIEnv *, jclass, jstring, jint, jobject, jint); + +/* + * Class: org_iotivity_base_OcRDClient + * Method: publishResourceToRD1 + * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle + * ;Lorg/iotivity/base/OcRDClient/OnPublishResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_publishResourceToRD1 + (JNIEnv *, jclass, jstring, jint, jobjectArray, jobject, jint); + +/* + * Class: org_iotivity_base_OcRDClient + * Method: deleteResourceFromRD0 + * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcRDClient/OnDeleteResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_deleteResourceFromRD0 + (JNIEnv *, jclass, jstring, jint, jobject, jint); + +/* + * Class: org_iotivity_base_OcRDClient + * Method: deleteResourceFromRD1 + * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcRDClient/OnDeleteResourceListener;I)V + */ +JNIEXPORT void JNICALL Java_org_iotivity_base_OcRDClient_deleteResourceFromRD1 + (JNIEnv *, jclass, jstring, jint, jobjectArray, jobject, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/android/android_api/base/src/main/java/org/iotivity/base/OcPlatform.java b/android/android_api/base/src/main/java/org/iotivity/base/OcPlatform.java index 8eacd4b..8d671f9 100644 --- a/android/android_api/base/src/main/java/org/iotivity/base/OcPlatform.java +++ b/android/android_api/base/src/main/java/org/iotivity/base/OcPlatform.java @@ -1006,313 +1006,6 @@ public final class OcPlatform { throws OcException; /** - * API to publish resource to remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param onPublishResourceListener Handles events, success states and failure states. - * @throws OcException if failure - */ - public static void publishResourceToRD( - String host, - EnumSet connectivityTypeSet, - OnPublishResourceListener onPublishResourceListener) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.publishResourceToRD0( - host, - connTypeInt, - onPublishResourceListener, - sPlatformQualityOfService.getValue() - ); - } - - /** - * API to publish resource to remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param onPublishResourceListener Handles events, success states and failure states. - * @param qualityOfService the quality of communication. - * @throws OcException if failure - */ - public static void publishResourceToRD( - String host, - EnumSet connectivityTypeSet, - OnPublishResourceListener onPublishResourceListener, - QualityOfService qualityOfService) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.publishResourceToRD0( - host, - connTypeInt, - onPublishResourceListener, - qualityOfService.getValue() - ); - } - - private static native void publishResourceToRD0( - String host, - int connectivityType, - OnPublishResourceListener onPublishResourceListener, - int qualityOfService) throws OcException; - - /** - * API to publish resource to remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param ocResourceHandleList reference to list of resource handles to be published. - * @param onPublishResourceListener Handles events, success states and failure states. - * @throws OcException if failure - */ - public static void publishResourceToRD( - String host, - EnumSet connectivityTypeSet, - List ocResourceHandleList, - OnPublishResourceListener onPublishResourceListener) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.publishResourceToRD1( - host, - connTypeInt, - ocResourceHandleList.toArray( - new OcResourceHandle[ocResourceHandleList.size()]), - onPublishResourceListener, - sPlatformQualityOfService.getValue() - ); - } - - /** - * API to publish resource to remote resource-directory. - * - * @param host Host IP Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param ocResourceHandleList reference to list of resource handles to be published. - * @param onPublishResourceListener Handles events, success states and failure states. - * @param qualityOfService the quality of communication - * @throws OcException if failure - */ - public static void publishResourceToRD( - String host, - EnumSet connectivityTypeSet, - List ocResourceHandleList, - OnPublishResourceListener onPublishResourceListener, - QualityOfService qualityOfService) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.publishResourceToRD1( - host, - connTypeInt, - ocResourceHandleList.toArray( - new OcResourceHandle[ocResourceHandleList.size()]), - onPublishResourceListener, - qualityOfService.getValue() - ); - } - - private static native void publishResourceToRD1( - String host, - int connectivityType, - OcResourceHandle[] ocResourceHandleArray, - OnPublishResourceListener onPublishResourceListener, - int qualityOfService) throws OcException; - - /** - * API to delete resource from remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param onDeleteResourceListener Handles events, success states and failure states. - * @throws OcException if failure - */ - public static void deleteResourceFromRD( - String host, - EnumSet connectivityTypeSet, - OnDeleteResourceListener onDeleteResourceListener) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.deleteResourceFromRD0( - host, - connTypeInt, - onDeleteResourceListener, - sPlatformQualityOfService.getValue() - ); - } - - /** - * API to delete resource from remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param onDeleteResourceListener Handles events, success states and failure states. - * @param qualityOfService the quality of communication. - * @throws OcException if failure - */ - public static void deleteResourceFromRD( - String host, - EnumSet connectivityTypeSet, - OnDeleteResourceListener onDeleteResourceListener, - QualityOfService qualityOfService) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.deleteResourceFromRD0( - host, - connTypeInt, - onDeleteResourceListener, - qualityOfService.getValue() - ); - } - - private static native void deleteResourceFromRD0( - String host, - int connectivityType, - OnDeleteResourceListener onDeleteResourceListener, - int qualityOfService) throws OcException; - - /** - * API to delete resource from remote resource-directory. - * - * @param host Host Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param ocResourceHandleList reference to list of resource handles to be published. - * @param onDeleteResourceListener Handles events, success states and failure states. - * @throws OcException if failure - */ - public static void deleteResourceFromRD( - String host, - EnumSet connectivityTypeSet, - List ocResourceHandleList, - OnDeleteResourceListener onDeleteResourceListener) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.deleteResourceFromRD1( - host, - connTypeInt, - ocResourceHandleList.toArray( - new OcResourceHandle[ocResourceHandleList.size()]), - onDeleteResourceListener, - sPlatformQualityOfService.getValue() - ); - } - - /** - * API to delete resource from remote resource-directory. - * - * @param host Host IP Address of a service to publish resource. - * @param connectivityTypeSet Set of types of connectivity. Example: IP - * @param ocResourceHandleList reference to list of resource handles to be published. - * @param onDeleteResourceListener Handles events, success states and failure states. - * @param qualityOfService the quality of communication - * @throws OcException if failure - */ - public static void deleteResourceFromRD( - String host, - EnumSet connectivityTypeSet, - List ocResourceHandleList, - OnDeleteResourceListener onDeleteResourceListener, - QualityOfService qualityOfService) throws OcException { - OcPlatform.initCheck(); - - int connTypeInt = 0; - - for (OcConnectivityType connType : OcConnectivityType.values()) { - if (connectivityTypeSet.contains(connType)) { - connTypeInt |= connType.getValue(); - } - } - - OcPlatform.deleteResourceFromRD1( - host, - connTypeInt, - ocResourceHandleList.toArray( - new OcResourceHandle[ocResourceHandleList.size()]), - onDeleteResourceListener, - qualityOfService.getValue() - ); - } - - private static native void deleteResourceFromRD1( - String host, - int connectivityType, - OcResourceHandle[] ocResourceHandleArray, - OnDeleteResourceListener onDeleteResourceListener, - int qualityOfService) throws OcException; - - /** - * An OnPublishResourceListener can be registered via the OcPlatform.publishResourceToRD call. - * Event listeners are notified asynchronously - */ - public interface OnPublishResourceListener { - public void onPublishResourceCompleted(OcRepresentation ocRepresentation); - public void onPublishResourceFailed(Throwable ex); - } - - /** - * An OnDeleteResourceListener can be registered via the OcPlatform.deleteResourceFromRD call. - * Event listeners are notified asynchronously - */ - public interface OnDeleteResourceListener { - public void onDeleteResourceCompleted(int result); - } - - /** * An FindDirectPairingListener can be registered via the OcPlatform.findDirectPairingDevices call. * Event listeners are notified asynchronously */ diff --git a/android/android_api/base/src/main/java/org/iotivity/base/OcRDClient.java b/android/android_api/base/src/main/java/org/iotivity/base/OcRDClient.java new file mode 100644 index 0000000..fbbd481 --- /dev/null +++ b/android/android_api/base/src/main/java/org/iotivity/base/OcRDClient.java @@ -0,0 +1,327 @@ +/* **************************************************************** + * + * Copyright 2016 Samsung Electronics All Rights Reserved. + * + * + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************/ + +package org.iotivity.base; + +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; + +public final class OcRDClient { + private static QualityOfService sPlatformQualityOfService = QualityOfService.NA; + + private OcRDClient() + { + } + /** + * API to publish resource to remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param onPublishResourceListener Handles events, success states and failure states. + * @throws OcException if failure + */ + public static void publishResourceToRD( + String host, + EnumSet connectivityTypeSet, + OnPublishResourceListener onPublishResourceListener) throws OcException { + + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.publishResourceToRD0( + host, + connTypeInt, + onPublishResourceListener, + sPlatformQualityOfService.getValue() + ); + } + + /** + * API to publish resource to remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param onPublishResourceListener Handles events, success states and failure states. + * @param qualityOfService the quality of communication. + * @throws OcException if failure + */ + public static void publishResourceToRD( + String host, + EnumSet connectivityTypeSet, + OnPublishResourceListener onPublishResourceListener, + QualityOfService qualityOfService) throws OcException { + + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.publishResourceToRD0( + host, + connTypeInt, + onPublishResourceListener, + qualityOfService.getValue() + ); + } + + private static native void publishResourceToRD0( + String host, + int connectivityType, + OnPublishResourceListener onPublishResourceListener, + int qualityOfService) throws OcException; + + /** + * API to publish resource to remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param ocResourceHandleList reference to list of resource handles to be published. + * @param onPublishResourceListener Handles events, success states and failure states. + * @throws OcException if failure + */ + public static void publishResourceToRD( + String host, + EnumSet connectivityTypeSet, + List ocResourceHandleList, + OnPublishResourceListener onPublishResourceListener) throws OcException { + + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.publishResourceToRD1( + host, + connTypeInt, + ocResourceHandleList.toArray( + new OcResourceHandle[ocResourceHandleList.size()]), + onPublishResourceListener, + sPlatformQualityOfService.getValue() + ); + } + + /** + * API to publish resource to remote resource-directory. + * + * @param host Host IP Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param ocResourceHandleList reference to list of resource handles to be published. + * @param onPublishResourceListener Handles events, success states and failure states. + * @param qualityOfService the quality of communication + * @throws OcException if failure + */ + public static void publishResourceToRD( + String host, + EnumSet connectivityTypeSet, + List ocResourceHandleList, + OnPublishResourceListener onPublishResourceListener, + QualityOfService qualityOfService) throws OcException { + + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.publishResourceToRD1( + host, + connTypeInt, + ocResourceHandleList.toArray( + new OcResourceHandle[ocResourceHandleList.size()]), + onPublishResourceListener, + qualityOfService.getValue() + ); + } + + private static native void publishResourceToRD1( + String host, + int connectivityType, + OcResourceHandle[] ocResourceHandleArray, + OnPublishResourceListener onPublishResourceListener, + int qualityOfService) throws OcException; + + /** + * API to delete resource from remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param onDeleteResourceListener Handles events, success states and failure states. + * @throws OcException if failure + */ + public static void deleteResourceFromRD( + String host, + EnumSet connectivityTypeSet, + OnDeleteResourceListener onDeleteResourceListener) throws OcException { + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.deleteResourceFromRD0( + host, + connTypeInt, + onDeleteResourceListener, + sPlatformQualityOfService.getValue() + ); + } + + /** + * API to delete resource from remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param onDeleteResourceListener Handles events, success states and failure states. + * @param qualityOfService the quality of communication. + * @throws OcException if failure + */ + public static void deleteResourceFromRD( + String host, + EnumSet connectivityTypeSet, + OnDeleteResourceListener onDeleteResourceListener, + QualityOfService qualityOfService) throws OcException { + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.deleteResourceFromRD0( + host, + connTypeInt, + onDeleteResourceListener, + qualityOfService.getValue() + ); + } + + private static native void deleteResourceFromRD0( + String host, + int connectivityType, + OnDeleteResourceListener onDeleteResourceListener, + int qualityOfService) throws OcException; + + /** + * API to delete resource from remote resource-directory. + * + * @param host Host Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param ocResourceHandleList reference to list of resource handles to be published. + * @param onDeleteResourceListener Handles events, success states and failure states. + * @throws OcException if failure + */ + public static void deleteResourceFromRD( + String host, + EnumSet connectivityTypeSet, + List ocResourceHandleList, + OnDeleteResourceListener onDeleteResourceListener) throws OcException { + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.deleteResourceFromRD1( + host, + connTypeInt, + ocResourceHandleList.toArray( + new OcResourceHandle[ocResourceHandleList.size()]), + onDeleteResourceListener, + sPlatformQualityOfService.getValue() + ); + } + + /** + * API to delete resource from remote resource-directory. + * + * @param host Host IP Address of a service to publish resource. + * @param connectivityTypeSet Set of types of connectivity. Example: IP + * @param ocResourceHandleList reference to list of resource handles to be published. + * @param onDeleteResourceListener Handles events, success states and failure states. + * @param qualityOfService the quality of communication + * @throws OcException if failure + */ + public static void deleteResourceFromRD( + String host, + EnumSet connectivityTypeSet, + List ocResourceHandleList, + OnDeleteResourceListener onDeleteResourceListener, + QualityOfService qualityOfService) throws OcException { + int connTypeInt = 0; + + for (OcConnectivityType connType : OcConnectivityType.values()) { + if (connectivityTypeSet.contains(connType)) { + connTypeInt |= connType.getValue(); + } + } + + OcRDClient.deleteResourceFromRD1( + host, + connTypeInt, + ocResourceHandleList.toArray( + new OcResourceHandle[ocResourceHandleList.size()]), + onDeleteResourceListener, + qualityOfService.getValue() + ); + } + + private static native void deleteResourceFromRD1( + String host, + int connectivityType, + OcResourceHandle[] ocResourceHandleArray, + OnDeleteResourceListener onDeleteResourceListener, + int qualityOfService) throws OcException; + + /** + * An OnPublishResourceListener can be registered via the OcRDClient.publishResourceToRD call. + * Event listeners are notified asynchronously + */ + public interface OnPublishResourceListener { + public void onPublishResourceCompleted(OcRepresentation ocRepresentation); + public void onPublishResourceFailed(Throwable ex); + } + + /** + * An OnDeleteResourceListener can be registered via the OcRDClient.deleteResourceFromRD call. + * Event listeners are notified asynchronously + */ + public interface OnDeleteResourceListener { + public void onDeleteResourceCompleted(int result); + } +} diff --git a/android/examples/simplebase/src/main/java/org/iotivity/base/examples/CloudFragment.java b/android/examples/simplebase/src/main/java/org/iotivity/base/examples/CloudFragment.java index 443c4c7..3d21bb7 100644 --- a/android/examples/simplebase/src/main/java/org/iotivity/base/examples/CloudFragment.java +++ b/android/examples/simplebase/src/main/java/org/iotivity/base/examples/CloudFragment.java @@ -62,6 +62,7 @@ import org.iotivity.base.OcResource; import org.iotivity.base.OcResourceHandle; import org.iotivity.base.OcResourceRequest; import org.iotivity.base.OcResourceResponse; +import org.iotivity.base.OcRDClient; import org.iotivity.base.PlatformConfig; import org.iotivity.base.QualityOfService; import org.iotivity.base.RequestHandlerFlag; @@ -666,8 +667,8 @@ public class CloudFragment extends Fragment implements // End of the Account Manager specific code // ****************************************************************************** - OcPlatform.OnPublishResourceListener resourcePublishListener = - new OcPlatform.OnPublishResourceListener() { + OcRDClient.OnPublishResourceListener resourcePublishListener = + new OcRDClient.OnPublishResourceListener() { @Override public void onPublishResourceCompleted(OcRepresentation ocRepresentation) { msg("onPublishResourceCompleted"); @@ -687,8 +688,8 @@ public class CloudFragment extends Fragment implements } }; - OcPlatform.OnDeleteResourceListener resourceDeleteListener = - new OcPlatform.OnDeleteResourceListener() { + OcRDClient.OnDeleteResourceListener resourceDeleteListener = + new OcRDClient.OnDeleteResourceListener() { @Override public void onDeleteResourceCompleted(int resultCode) { msg("onDeleteResourceCompleted, result is " + resultCode); @@ -906,14 +907,14 @@ public class CloudFragment extends Fragment implements try { // Publish Virtual Resource to Resource-Directory. Log.d(TAG, "Publish Virtual Resource to Resource-Directory."); - OcPlatform.publishResourceToRD( + OcRDClient.publishResourceToRD( Common.HOST, EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP), resourcePublishListener ); // Publish Local Resource to Resource-Directory. Log.d(TAG, "Publish Local Resource to Resource-Directory."); - OcPlatform.publishResourceToRD( + OcRDClient.publishResourceToRD( Common.HOST, EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP), mResourceHandleList, resourcePublishListener ); @@ -926,7 +927,7 @@ public class CloudFragment extends Fragment implements try { // Delete Resource from Resource-Directory. Log.d(TAG, "Delete Resource from Resource-Directory."); - OcPlatform.deleteResourceFromRD( + OcRDClient.deleteResourceFromRD( Common.HOST, EnumSet.of(OcConnectivityType.CT_ADAPTER_TCP), resourceDeleteListener ); diff --git a/cloud/samples/client/airconditioner/aircon_controlee.cpp b/cloud/samples/client/airconditioner/aircon_controlee.cpp index 2916fdf..99a1868 100644 --- a/cloud/samples/client/airconditioner/aircon_controlee.cpp +++ b/cloud/samples/client/airconditioner/aircon_controlee.cpp @@ -9,7 +9,7 @@ #include "ocstack.h" #include "ocpayload.h" -#include "rd_client.h" +#include "RDClient.h" #include #include @@ -639,7 +639,7 @@ int main(int argc, char *argv[]) OCPlatform::registerDeviceInfo(devInfoAirConditioner); - result = OCPlatform::publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP, + result = RDClient::Instance().publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP, resourceHandles, &onPublish); @@ -647,7 +647,7 @@ int main(int argc, char *argv[]) resourceHandles.push_back(airConditioner.m_handle); - result = OCPlatform::publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP, + result = RDClient::Instance().publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP, resourceHandles, &onPublish); diff --git a/cloud/samples/client/group_invite/group_light_share.cpp b/cloud/samples/client/group_invite/group_light_share.cpp index 2db2e7c..0eff3e2 100644 --- a/cloud/samples/client/group_invite/group_light_share.cpp +++ b/cloud/samples/client/group_invite/group_light_share.cpp @@ -9,7 +9,7 @@ #include "ocstack.h" #include "ocpayload.h" -#include "rd_client.h" +#include "RDClient.h" #include #include @@ -381,7 +381,7 @@ int main(int argc, char **argv) ResourceHandles resourceHandles; resourceHandles.push_back(lightResource.m_resourceHandle); - OCPlatform::publishResourceToRD(g_host, OCConnectivityType::CT_ADAPTER_TCP, resourceHandles, + RDClient::Instance().publishResourceToRD(g_host, OCConnectivityType::CT_ADAPTER_TCP, resourceHandles, &onPublish); g_callbackLock.wait(lock); if (g_option == "owner") diff --git a/resource/csdk/resource-directory/SConscript b/resource/csdk/resource-directory/SConscript index 1a52fe6..b79455f 100755 --- a/resource/csdk/resource-directory/SConscript +++ b/resource/csdk/resource-directory/SConscript @@ -35,7 +35,13 @@ rd_mode = env.get('RD_MODE') ###################################################################### # Build flags ###################################################################### -rd_env.AppendUnique(CPPPATH = ['include', 'src/internal', '../stack/include']) +rd_env.AppendUnique(CPPPATH = ['include', + 'src/internal', + '../stack/include', + '../../include', + '../logger/include', + '../../oc_logger/include', +]) if 'CLIENT' in rd_mode: rd_env.AppendUnique(CPPDEFINES = ['RD_CLIENT']) @@ -43,14 +49,16 @@ if 'SERVER' in rd_mode: rd_env.AppendUnique(CPPDEFINES = ['RD_SERVER']) rd_env.PrependUnique(LIBPATH = [rd_env.get('BUILD_DIR')]) -rd_env.PrependUnique(RPATH = [rd_env.get('BUILD_DIR')]) -rd_env.PrependUnique(LIBS = ['octbstack']) +if target_os != 'android': + rd_env.PrependUnique(RPATH = [rd_env.get('BUILD_DIR')]) +rd_env.PrependUnique(LIBS = ['octbstack', 'oc', 'oc_logger']) if target_os not in ['windows']: - rd_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-Wextra']) + rd_env.AppendUnique(CXXFLAGS = ['-O2', '-g', '-Wall', '-Wextra', '-std=c++0x']) if target_os == 'android': rd_env.AppendUnique(CXXFLAGS = ['-frtti', '-fexceptions']) + rd_env.AppendUnique(LINKFLAGS = ['-Wl,-soname,libresource_directory.so']) rd_env.AppendUnique(LIBS = ['gnustl_static']) if not env.get('RELEASE'): rd_env.AppendUnique(LIBS = ['log']) @@ -76,6 +84,8 @@ if 'SERVER' in rd_mode: if 'CLIENT' in rd_mode: rd_src += [RD_SRC_DIR + 'rd_client.c',] + if target_os not in ['arduino','darwin','ios', 'windows', 'winrt']: + rd_src += [ RD_SRC_DIR + 'RDClient.cpp',] if target_os not in ['arduino', 'darwin', 'ios', 'windows', 'winrt']: rdsdk_shared = rd_env.SharedLibrary('resource_directory', rd_src) @@ -87,11 +97,12 @@ rd_env.InstallTarget(rdsdk, 'resource_directory') rd_env.UserInstallTargetLib(rdsdk, 'resource_directory') if 'CLIENT' in rd_mode: - rd_env.UserInstallTargetHeader('include/rd_client.h', 'service/resource-directory', 'rd_client.h') + rd_env.UserInstallTargetHeader('include/rd_client.h', 'resource', 'rd_client.h') + rd_env.UserInstallTargetHeader('include/RDClient.h', 'resource', 'RDClient.h') if 'SERVER' in rd_mode: - rd_env.UserInstallTargetHeader('include/rd_server.h', 'service/resource-directory', 'rd_server.h') - rd_env.UserInstallTargetHeader('include/rd_database.h', 'service/resource-directory', 'rd_database.h') + rd_env.UserInstallTargetHeader('include/rd_server.h', 'resource', 'rd_server.h') + rd_env.UserInstallTargetHeader('include/rd_database.h', 'resource', 'rd_database.h') ###################################################################### # Samples for the resource directory @@ -100,7 +111,7 @@ if target_os in ['linux']: SConscript('samples/SConscript') ###################################################################### -# Build UnitTests Things Manager +# Build UnitTests of the Resource Directory ################################################ ###################### if target_os in ['linux']: SConscript('unittests/SConscript') diff --git a/resource/csdk/resource-directory/include/RDClient.h b/resource/csdk/resource-directory/include/RDClient.h new file mode 100644 index 0000000..288e985 --- /dev/null +++ b/resource/csdk/resource-directory/include/RDClient.h @@ -0,0 +1,112 @@ +//****************************************************************** +// +// Copyright 2015 Samsung Electronics All Rights Reserved. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include "OCRepresentation.h" +#include "OCApi.h" +#include "octypes.h" + +typedef std::function PublishResourceCallback; +typedef std::function DeleteResourceCallback; + +using namespace OC; + +namespace ServerCallbackContext +{ + struct PublishContext + { + PublishResourceCallback callback; + PublishContext(PublishResourceCallback cb) : callback(cb){} + }; + + struct DeleteContext + { + DeleteResourceCallback callback; + DeleteContext(DeleteResourceCallback cb) : callback(cb){} + }; +} + +class RDClient +{ +private: + OCQualityOfService m_qos; +public: + RDClient(OCQualityOfService qos = OC_NA_QOS) : m_qos(qos) + { + } + + static RDClient& Instance() + { + static RDClient client; + return client; + } + + /** + * API for Virtual Resource("/oic/d" and "/oic/p") Publish to Resource Directory. + * @note This API applies to resource server side only. + * + * @param host Host IP Address of a service to direct resource publish query. + * @param connectivityType ::OCConnectivityType type of connectivity. + * @param callback Handles callbacks, success states and failure states. + * + * @return Returns ::OC_STACK_OK if success. + */ + OCStackResult publishResourceToRD(const std::string& host, + OCConnectivityType connectivityType, + OC::ResourceHandles& resourceHandles, + PublishResourceCallback callback); + + OCStackResult publishResourceToRD(const std::string& host, + OCConnectivityType connectivityType, + PublishResourceCallback callback, + QualityOfService qos); + + OCStackResult publishResourceToRD(const std::string& host, + OCConnectivityType connectivityType, + OC::ResourceHandles& resourceHandles, + PublishResourceCallback callback, + QualityOfService qos); + + /** + * API for published resource delete from Resource Directory. + * @note This API applies to resource server side only. + * + * @param host Host IP Address of a service to direct resource delete query. + * @param connectivityType ::OCConnectivityType type of connectivity. + * @param callback Handles callbacks, success states and failure states. + * + * @return Returns ::OC_STACK_OK if success. + */ + OCStackResult deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + OC::ResourceHandles& resourceHandles, + DeleteResourceCallback callback); + + OCStackResult deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + DeleteResourceCallback callback, + QualityOfService qos); + + OCStackResult deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + OC::ResourceHandles &resourceHandles, + DeleteResourceCallback callback, + QualityOfService qos); + +}; diff --git a/resource/csdk/resource-directory/src/RDClient.cpp b/resource/csdk/resource-directory/src/RDClient.cpp new file mode 100644 index 0000000..365ab5d --- /dev/null +++ b/resource/csdk/resource-directory/src/RDClient.cpp @@ -0,0 +1,219 @@ +//****************************************************************** +// +// Copyright 2015 Samsung Electronics All Rights Reserved. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= + +#include +#include + +#ifdef RD_CLIENT +#include "RDClient.h" +#include "rd_client.h" + +#include "OCApi.h" +#include "OCRepresentation.h" +#include "OCResourceRequest.h" +#include "OCResourceResponse.h" +#include "OCPlatform.h" +#include "OCException.h" +#include "ocpayload.h" + +std::weak_ptr m_csdkLock; + +using namespace OC; + + +OCRepresentation parseRDResponseCallback(OCClientResponse* clientResponse) +{ + if (nullptr == clientResponse || nullptr == clientResponse->payload || + PAYLOAD_TYPE_REPRESENTATION != clientResponse->payload->type) + { + return OCRepresentation(); + } + + MessageContainer oc; + oc.setPayload(clientResponse->payload); + + std::vector::const_iterator it = oc.representations().begin(); + if (it == oc.representations().end()) + { + return OCRepresentation(); + } + + // first one is considered the root, everything else is considered a child of this one. + OCRepresentation root = *it; + root.setDevAddr(clientResponse->devAddr); + root.setUri(clientResponse->resourceUri); + ++it; + + std::for_each(it, oc.representations().end(), + [&root](const OCRepresentation& repItr) + {root.addChild(repItr);}); + return root; +} + +OCStackApplicationResult publishResourceToRDCallback(void* ctx, OCDoHandle /*handle*/, + OCClientResponse* clientResponse) +{ + ServerCallbackContext::PublishContext* context = + static_cast(ctx); + + try + { + // Update resource unique id in stack. + if (clientResponse) + { + if (clientResponse->payload) + { + OCRepPayload *rdPayload = (OCRepPayload *) clientResponse->payload; + OCRepPayload **links = NULL; + + size_t dimensions[MAX_REP_ARRAY_DEPTH]; + OCRepPayloadGetPropObjectArray(rdPayload, OC_RSRVD_LINKS, &links, dimensions); + for(size_t i = 0; i < dimensions[0]; i++) + { + char *uri = NULL; + OCRepPayloadGetPropString(links[i], OC_RSRVD_HREF, &uri); + OCResourceHandle handle = OCGetResourceHandleAtUri(uri); + int64_t ins = 0; + OCRepPayloadGetPropInt(links[i], OC_RSRVD_INS, &ins); + OCBindResourceInsToResource(handle, ins); + } + } + OCRepresentation rep = parseRDResponseCallback(clientResponse); + std::thread exec(context->callback, rep, clientResponse->result); + exec.detach(); + } + } + catch (OC::OCException& e) + { + oclog() <<"Exception in publishResourceToRDCallback, ignoring response: " + <(m_qos)); +} + +OCStackResult RDClient::publishResourceToRD(const std::string& host, + OCConnectivityType connectivityType, + PublishResourceCallback callback, + QualityOfService qos) +{ + ResourceHandles resourceHandles; + return publishResourceToRD(host, connectivityType, resourceHandles, callback, qos); +} + +OCStackResult RDClient::publishResourceToRD(const std::string& host, + OCConnectivityType connectivityType, + ResourceHandles& resourceHandles, + PublishResourceCallback callback, + QualityOfService qos) +{ + ServerCallbackContext::PublishContext* ctx = + new ServerCallbackContext::PublishContext(callback); + OCCallbackData cbdata( + static_cast(ctx), + publishResourceToRDCallback, + [](void* c) + {delete static_cast(c);} + ); + + auto cLock = m_csdkLock.lock(); + OCStackResult result = OC_STACK_ERROR; + if (cLock) + { + std::lock_guard lock(*cLock); + result = OCRDPublish(host.c_str(), connectivityType, &resourceHandles[0], + resourceHandles.size(), &cbdata, static_cast(qos)); + } + + if (OC_STACK_OK != result) + { + throw OCException(OC::Exception::PUBLISH_RESOURCE_FAILED, result); + } + return result; +} + +OCStackApplicationResult deleteResourceFromRDCallback(void* ctx, OCDoHandle /*handle*/, + OCClientResponse* clientResponse) +{ + ServerCallbackContext::DeleteContext* context = + static_cast(ctx); + + std::thread exec(context->callback, clientResponse->result); + exec.detach(); + return OC_STACK_DELETE_TRANSACTION; +} + +OCStackResult RDClient::deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + ResourceHandles& resourceHandles, + DeleteResourceCallback callback) +{ + return deleteResourceFromRD(host, connectivityType, resourceHandles, callback, static_cast(m_qos)); +} + + +OCStackResult RDClient::deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + DeleteResourceCallback callback, + QualityOfService qos) +{ + ResourceHandles resourceHandles; + return deleteResourceFromRD(host, connectivityType, resourceHandles, callback, qos); +} + +OCStackResult RDClient::deleteResourceFromRD(const std::string& host, + OCConnectivityType connectivityType, + ResourceHandles& resourceHandles, + DeleteResourceCallback callback, + QualityOfService qos) +{ + ServerCallbackContext::DeleteContext* ctx = + new ServerCallbackContext::DeleteContext(callback); + OCCallbackData cbdata( + static_cast(ctx), + deleteResourceFromRDCallback, + [](void* c) + {delete static_cast(c);} + ); + + auto cLock = m_csdkLock.lock(); + OCStackResult result = OC_STACK_ERROR; + if (cLock) + { + std::lock_guard lock(*cLock); + result = OCRDDelete(host.c_str(), connectivityType, &resourceHandles[0], + resourceHandles.size(), &cbdata, static_cast(qos)); + } + + if (OC_STACK_OK != result) + { + throw OCException(OC::Exception::PUBLISH_RESOURCE_FAILED, result); + } + return result; +} +#endif diff --git a/resource/examples/SConscript b/resource/examples/SConscript index 9b605fc..84332c2 100644 --- a/resource/examples/SConscript +++ b/resource/examples/SConscript @@ -110,12 +110,11 @@ if target_os not in ['windows', 'msys_nt']: 'lightserver', 'threadingsample', ] - -if 'CLIENT' in examples_env.get('RD_MODE'): - examples_env.AppendUnique(CPPDEFINES = ['RD_CLIENT']) - example_names += [ - 'rdclient' - ] + if 'CLIENT' in examples_env.get('RD_MODE'): + examples_env.AppendUnique(CPPPATH = ['../csdk/resource-directory/include']) + examples_env.AppendUnique(LIBS = ['resource_directory']) + examples_env.AppendUnique(CPPDEFINES = ['RD_CLIENT']) + example_names += ['rdclient'] examples = map(make_single_file_cpp_program, example_names) diff --git a/resource/examples/rdclient.cpp b/resource/examples/rdclient.cpp index 107ba6f..4368f6b 100644 --- a/resource/examples/rdclient.cpp +++ b/resource/examples/rdclient.cpp @@ -20,6 +20,7 @@ #include "OCPlatform.h" #include "OCApi.h" +#include "RDClient.h" #include #include @@ -113,9 +114,8 @@ public: * Publish Resource of Resource-Server to RD. */ - OCStackResult result = OCPlatform::publishResourceToRD(rdAddress, connectivityType, - m_publishedResourceHandles, - &onPublish); + OCStackResult result = RDClient::Instance().publishResourceToRD(rdAddress, connectivityType, + m_publishedResourceHandles, &onPublish); if (OC_STACK_OK != result) { cout << "Resource publish was unsuccessful\n"; @@ -130,9 +130,8 @@ public: * if resource-server want to delete all resources from RD. * Ex.) OCPlatform::deleteResourceFromRD(rdAddress, connectivityType, &onDelete); */ - OCStackResult result = OCPlatform::deleteResourceFromRD(rdAddress, connectivityType, - m_publishedResourceHandles, - &onDelete); + OCStackResult result = RDClient::Instance().deleteResourceFromRD(rdAddress, connectivityType, + m_publishedResourceHandles, &onDelete); if (OC_STACK_OK != result) { cout << "Resource delete was unsuccessful\n"; diff --git a/resource/include/IServerWrapper.h b/resource/include/IServerWrapper.h index f422392..62f878a 100644 --- a/resource/include/IServerWrapper.h +++ b/resource/include/IServerWrapper.h @@ -74,19 +74,6 @@ namespace OC virtual OCStackResult setDefaultDeviceEntityHandler(EntityHandler entityHandler) = 0; virtual OCStackResult sendResponse(const std::shared_ptr pResponse) = 0; -#ifdef RD_CLIENT - virtual OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback& callback, - OCQualityOfService qos) = 0; - - virtual OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback& callback, - OCQualityOfService qos) = 0; -#endif }; } diff --git a/resource/include/InProcServerWrapper.h b/resource/include/InProcServerWrapper.h index ad578dd..07a1262 100644 --- a/resource/include/InProcServerWrapper.h +++ b/resource/include/InProcServerWrapper.h @@ -28,22 +28,6 @@ namespace OC { -#ifdef RD_CLIENT - namespace ServerCallbackContext - { - struct PublishContext - { - PublishResourceCallback callback; - PublishContext(PublishResourceCallback cb) : callback(cb){} - }; - - struct DeleteContext - { - DeleteResourceCallback callback; - DeleteContext(DeleteResourceCallback cb) : callback(cb){} - }; - } -#endif class InProcServerWrapper : public IServerWrapper { public: @@ -84,19 +68,7 @@ namespace OC virtual OCStackResult setDefaultDeviceEntityHandler(EntityHandler entityHandler); virtual OCStackResult sendResponse(const std::shared_ptr pResponse); -#ifdef RD_CLIENT - virtual OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback& callback, - OCQualityOfService qos); - - virtual OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback& callback, - OCQualityOfService qos); -#endif + private: void processFunc(); std::thread m_processThread; diff --git a/resource/include/OCApi.h b/resource/include/OCApi.h index 9094413..4ab5fdb 100644 --- a/resource/include/OCApi.h +++ b/resource/include/OCApi.h @@ -307,11 +307,6 @@ namespace OC typedef std::function)> MQTopicCallback; -#ifdef RD_CLIENT - typedef std::function PublishResourceCallback; - - typedef std::function DeleteResourceCallback; -#endif } // namespace OC #endif diff --git a/resource/include/OCPlatform.h b/resource/include/OCPlatform.h index 305ad61..9826b6c 100644 --- a/resource/include/OCPlatform.h +++ b/resource/include/OCPlatform.h @@ -681,128 +681,6 @@ namespace OC OCAccountManager::Ptr constructAccountManagerObject(const std::string& host, OCConnectivityType connectivityType); #endif // WITH_CLOUD -#ifdef RD_CLIENT - /** - * API for Virtual Resource("/oic/d" and "/oic/p") Publish to Resource Directory. - * @note This API applies to resource server side only. - * - * @param host Host IP Address of a service to direct resource publish query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param callback Handles callbacks, success states and failure states. - * - * @return Returns ::OC_STACK_OK if success. - */ - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - PublishResourceCallback callback); - - /** - * @overload - * - * @param host Host IP Address of a service to direct resource publish query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param callback Handles callbacks, success states and failure states. - * @param QoS the quality of communication. - * - * @return Returns ::OC_STACK_OK if success. - */ - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - PublishResourceCallback callback, - QualityOfService QoS); - - /** - * API for Resource Publish to Resource Directory. - * @note This API applies to resource server side only. - * - * @param host Host IP Address of a service to direct resource publish query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param resourceHandle resource handle of the resource. - * @param callback Handles callbacks, success states and failure states. - * - * @return Returns ::OC_STACK_OK if success. - */ - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback); - - /** - * @overload - * - * @param host Host IP Address of a service to direct resource publish query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param resourceHandle resource handle of the resource. - * @param callback function to callback with published resources. - * @param QoS the quality of communication. - * @see publishResourceToRD(const std::string&, OCConnectivityType, OCResourceHandle, - * uint8_t, PublishResourceCallback) - */ - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback, QualityOfService QoS); - - /** - * API for published resource delete from Resource Directory. - * @note This API applies to resource server side only. - * - * @param host Host IP Address of a service to direct resource delete query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param callback Handles callbacks, success states and failure states. - * - * @return Returns ::OC_STACK_OK if success. - */ - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - DeleteResourceCallback callback); - - /** - * @overload - * - * @param host Host IP Address of a service to direct resource delete query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param callback Handles callbacks, success states and failure states. - * @param QoS the quality of communication. - * - * @return Returns ::OC_STACK_OK if success. - */ - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - DeleteResourceCallback callback, - QualityOfService QoS); - - /** - * @overload - * - * @param host Host IP Address of a service to direct resource delete query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param resourceHandle resource handle of the resource. - * @param callback function to callback with published resources. - * @see publishResourceToRD(const std::string&, OCConnectivityType, OCResourceHandle, - * uint8_t, PublishResourceCallback) - */ - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback); - - /** - * @overload - * - * @param host Host IP Address of a service to direct resource delete query. - * @param connectivityType ::OCConnectivityType type of connectivity. - * @param resourceHandle resource handle of the resource. - * @param callback function to callback with published resources. - * @param QoS the quality of communication. - * @see publishResourceToRD(const std::string&, OCConnectivityType, OCResourceHandle, - * uint8_t, PublishResourceCallback) - */ - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback, QualityOfService QoS); -#endif /** * gets the deviceId of the client @@ -823,6 +701,3 @@ namespace OC } #endif // OC_PLATFORM_H_ - - - diff --git a/resource/include/OCPlatform_impl.h b/resource/include/OCPlatform_impl.h index cffeeea..1983a03 100644 --- a/resource/include/OCPlatform_impl.h +++ b/resource/include/OCPlatform_impl.h @@ -246,27 +246,6 @@ namespace OC const std::vector& resourceTypes, const std::vector& interfaces); OCStackResult sendResponse(const std::shared_ptr pResponse); -#ifdef RD_CLIENT - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback); - - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback, QualityOfService qos); - - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback); - - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback, QualityOfService qos); -#endif std::weak_ptr csdkLock(); OCStackResult findDirectPairingDevices(unsigned short waittime, @@ -320,6 +299,3 @@ namespace OC } #endif //__OCPLATFORM_IMPL_H - - - diff --git a/resource/src/InProcServerWrapper.cpp b/resource/src/InProcServerWrapper.cpp index 0235fda..a00d856 100644 --- a/resource/src/InProcServerWrapper.cpp +++ b/resource/src/InProcServerWrapper.cpp @@ -39,10 +39,6 @@ #include #include -#ifdef RD_CLIENT -#include -#endif - using namespace std; using namespace OC; @@ -602,132 +598,6 @@ namespace OC } } -#ifdef RD_CLIENT - OCRepresentation parseRDResponseCallback(OCClientResponse* clientResponse) - { - if (nullptr == clientResponse || nullptr == clientResponse->payload || - PAYLOAD_TYPE_REPRESENTATION != clientResponse->payload->type) - { - return OCRepresentation(); - } - - MessageContainer oc; - oc.setPayload(clientResponse->payload); - - std::vector::const_iterator it = oc.representations().begin(); - if (it == oc.representations().end()) - { - return OCRepresentation(); - } - - // first one is considered the root, everything else is considered a child of this one. - OCRepresentation root = *it; - root.setDevAddr(clientResponse->devAddr); - root.setUri(clientResponse->resourceUri); - ++it; - - std::for_each(it, oc.representations().end(), - [&root](const OCRepresentation& repItr) - {root.addChild(repItr);}); - return root; - - } - - OCStackApplicationResult publishResourceToRDCallback(void* ctx, OCDoHandle /*handle*/, - OCClientResponse* clientResponse) - { - ServerCallbackContext::PublishContext* context = - static_cast(ctx); - - try - { - OCRepresentation rep = parseRDResponseCallback(clientResponse); - std::thread exec(context->callback, rep, clientResponse->result); - exec.detach(); - } - catch (OC::OCException& e) - { - oclog() <<"Exception in publishResourceToRDCallback, ignoring response: " - <(ctx), - publishResourceToRDCallback, - [](void* c) - {delete static_cast(c);} - ); - - auto cLock = m_csdkLock.lock(); - OCStackResult result = OC_STACK_ERROR; - if (cLock) - { - std::lock_guard lock(*cLock); - result = OCRDPublish(host.c_str(), connectivityType, &resourceHandles[0], - resourceHandles.size(), &cbdata, qos); - } - - if (OC_STACK_OK != result) - { - throw OCException(OC::Exception::PUBLISH_RESOURCE_FAILED, result); - } - return result; - } - - OCStackApplicationResult deleteResourceFromRDCallback(void* ctx, OCDoHandle /*handle*/, - OCClientResponse* clientResponse) - { - ServerCallbackContext::DeleteContext* context = - static_cast(ctx); - - std::thread exec(context->callback, clientResponse->result); - exec.detach(); - return OC_STACK_DELETE_TRANSACTION; - } - - OCStackResult InProcServerWrapper::deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback& callback, - OCQualityOfService qos) - { - ServerCallbackContext::DeleteContext* ctx = - new ServerCallbackContext::DeleteContext(callback); - OCCallbackData cbdata( - static_cast(ctx), - deleteResourceFromRDCallback, - [](void* c) - {delete static_cast(c);} - ); - - auto cLock = m_csdkLock.lock(); - OCStackResult result = OC_STACK_ERROR; - if (cLock) - { - std::lock_guard lock(*cLock); - result = OCRDDelete(host.c_str(), connectivityType, &resourceHandles[0], - resourceHandles.size(), &cbdata, qos); - } - - if (OC_STACK_OK != result) - { - throw OCException(OC::Exception::PUBLISH_RESOURCE_FAILED, result); - } - return result; - } -#endif - InProcServerWrapper::~InProcServerWrapper() { if(m_processThread.joinable()) diff --git a/resource/src/OCPlatform.cpp b/resource/src/OCPlatform.cpp index 59e4fab..c886c23 100644 --- a/resource/src/OCPlatform.cpp +++ b/resource/src/OCPlatform.cpp @@ -321,86 +321,7 @@ namespace OC connectivityType); } #endif // WITH_CLOUD -#ifdef RD_CLIENT - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - PublishResourceCallback callback) - { - ResourceHandles resourceHandles; - return OCPlatform_impl::Instance().publishResourceToRD(host, connectivityType, - resourceHandles, - callback); - } - - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - PublishResourceCallback callback, - QualityOfService QoS) - { - ResourceHandles resourceHandles; - return OCPlatform_impl::Instance().publishResourceToRD(host, connectivityType, - resourceHandles, - callback, QoS); - } - - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback) - { - return OCPlatform_impl::Instance().publishResourceToRD(host, connectivityType, - resourceHandles, - callback); - } - - OCStackResult publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback, QualityOfService QoS) - { - return OCPlatform_impl::Instance().publishResourceToRD(host, connectivityType, - resourceHandles, - callback, QoS); - } - - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - DeleteResourceCallback callback) - { - ResourceHandles resourceHandles; - return OCPlatform_impl::Instance().deleteResourceFromRD(host, connectivityType, - resourceHandles, callback); - } - - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - DeleteResourceCallback callback, - QualityOfService QoS) - { - ResourceHandles resourceHandles; - return OCPlatform_impl::Instance().deleteResourceFromRD(host, connectivityType, - resourceHandles, callback, QoS); - } - - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback) - { - return OCPlatform_impl::Instance().deleteResourceFromRD(host, connectivityType, - resourceHandles, callback); - } - OCStackResult deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback, QualityOfService QoS) - { - return OCPlatform_impl::Instance().deleteResourceFromRD(host, connectivityType, - resourceHandles, callback, - QoS); - } -#endif OCStackResult getDeviceId(OCUUIdentity *deviceId) { return OCPlatform_impl::Instance().getDeviceId(deviceId); @@ -412,4 +333,3 @@ namespace OC } } // namespace OCPlatform } //namespace OC - diff --git a/resource/src/OCPlatform_impl.cpp b/resource/src/OCPlatform_impl.cpp index 7060a09..8e618c5 100644 --- a/resource/src/OCPlatform_impl.cpp +++ b/resource/src/OCPlatform_impl.cpp @@ -409,47 +409,6 @@ namespace OC return checked_guard(m_server, &IServerWrapper::sendResponse, pResponse); } -#ifdef RD_CLIENT - OCStackResult OCPlatform_impl::publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback) - { - return publishResourceToRD(host, connectivityType, resourceHandles, - callback, m_cfg.QoS); - } - - OCStackResult OCPlatform_impl::publishResourceToRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - PublishResourceCallback callback, - QualityOfService qos) - { - return checked_guard(m_server, &IServerWrapper::publishResourceToRD, - host, connectivityType, resourceHandles, callback, - static_cast(qos)); - } - - OCStackResult OCPlatform_impl::deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback) - { - return deleteResourceFromRD(host, connectivityType, resourceHandles, callback, - m_cfg.QoS); - } - - OCStackResult OCPlatform_impl::deleteResourceFromRD(const std::string& host, - OCConnectivityType connectivityType, - ResourceHandles& resourceHandles, - DeleteResourceCallback callback, - QualityOfService qos) - { - return checked_guard(m_server, &IServerWrapper::deleteResourceFromRD, - host, connectivityType, resourceHandles, callback, - static_cast(qos)); - } -#endif std::weak_ptr OCPlatform_impl::csdkLock() { return m_csdkLock; @@ -504,4 +463,3 @@ namespace OC return OCSetDeviceId(myUuid); } } //namespace OC - diff --git a/resource/src/SConscript b/resource/src/SConscript index 0eeed20..fdc9d14 100644 --- a/resource/src/SConscript +++ b/resource/src/SConscript @@ -33,7 +33,6 @@ secured = oclib_env.get('SECURED') target_os = oclib_env.get('TARGET_OS') with_cloud = oclib_env.get('WITH_CLOUD') with_mq = oclib_env.get('WITH_MQ') -rd_mode = oclib_env.get('RD_MODE') ###################################################################### # Build flags @@ -101,14 +100,6 @@ if 'PUB' in with_mq: if 'BROKER' in with_mq: oclib_env.AppendUnique(CPPDEFINES = ['MQ_BROKER', 'WITH_MQ']) -if 'CLIENT' in rd_mode or 'SERVER' in rd_mode: - if 'CLIENT' in rd_mode: - oclib_env.AppendUnique(CPPDEFINES = ['RD_CLIENT']) - if 'SERVER' in rd_mode: - oclib_env.AppendUnique(CPPDEFINES = ['RD_SERVER']) - oclib_env.AppendUnique(LIBS = ['resource_directory']) - oclib_env.AppendUnique(CPPPATH = [oclib_env.get('BUILD_DIR') + 'resource/csdk/resource-directory/include']) - ###################################################################### # Source files and Targets ###################################################################### -- 2.7.4