Remove resource directory dependency in lib OC
authorHabib Virji <habib.virji@samsung.com>
Fri, 11 Nov 2016 10:58:50 +0000 (10:58 +0000)
committerPhil Coval <philippe.coval@osg.samsung.com>
Mon, 21 Nov 2016 08:45:26 +0000 (08:45 +0000)
- 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 <habib.virji@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/14059
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Rick Bell <richard.s.bell@intel.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/14285
Reviewed-by: jihwan seo <jihwan.seo@samsung.com>
Reviewed-by: Larry Sachs <larry.j.sachs@intel.com>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
Reviewed-by: byonggon chun <bg.chun@samsung.com>
Reviewed-by: HyunJun Kim <hyunjun2.kim@samsung.com>
Reviewed-by: Phil Coval <philippe.coval@osg.samsung.com>
31 files changed:
android/android_api/base/jni/Android.mk
android/android_api/base/jni/JniOcPlatform.cpp
android/android_api/base/jni/JniOcPlatform.h
android/android_api/base/jni/JniOcRDClient.cpp [new file with mode: 0644]
android/android_api/base/jni/JniOcRDClient.h [new file with mode: 0644]
android/android_api/base/src/main/java/org/iotivity/base/OcPlatform.java
android/android_api/base/src/main/java/org/iotivity/base/OcRDClient.java [new file with mode: 0644]
android/examples/simplebase/src/main/java/org/iotivity/base/examples/CloudFragment.java
cloud/samples/client/airconditioner/aircon_controlee.cpp
cloud/samples/client/group_invite/group_light_share.cpp
examples/OICMiddle/SConscript
resource/csdk/connectivity/test/SConscript
resource/csdk/resource-directory/SConscript
resource/csdk/resource-directory/include/RDClient.h [new file with mode: 0644]
resource/csdk/resource-directory/src/RDClient.cpp [new file with mode: 0644]
resource/csdk/security/provisioning/unittest/SConscript
resource/csdk/security/unittest/SConscript
resource/csdk/stack/test/SConscript
resource/examples/SConscript
resource/examples/rdclient.cpp
resource/include/IServerWrapper.h
resource/include/InProcServerWrapper.h
resource/include/OCApi.h
resource/include/OCPlatform.h
resource/include/OCPlatform_impl.h
resource/src/InProcServerWrapper.cpp
resource/src/OCPlatform.cpp
resource/src/OCPlatform_impl.cpp
resource/src/SConscript
resource/unittests/SConscript
service/notification/SConscript

index aabb512..4cfeebd 100644 (file)
@@ -32,6 +32,12 @@ LOCAL_MODULE := libandroid-ca
 LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libconnectivity_abstraction.so\r
 include $(PREBUILT_SHARED_LIBRARY)\r
 \r
+include $(CLEAR_VARS)\r
+OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)\r
+LOCAL_MODULE := libandroid-rd\r
+LOCAL_SRC_FILES := $(OIC_LIB_PATH)/libresource_directory.so\r
+include $(PREBUILT_SHARED_LIBRARY)\r
+\r
 ifeq ($(SECURED), 1)\r
 include $(CLEAR_VARS)\r
 OIC_LIB_PATH := ../../../../out/android/$(APP_ABI)/$(APP_OPTIM)\r
@@ -109,7 +115,8 @@ LOCAL_SRC_FILES :=  JniOcStack.cpp \
                     JniOnDirectPairingListener.cpp \\r
                     JniOcDirectPairDevice.cpp \\r
                     JniOnPublishResourceListener.cpp \\r
-                    JniOnDeleteResourceListener.cpp\r
+                    JniOnDeleteResourceListener.cpp \\r
+                    JniOcRDClient.cpp\r
 \r
 ifeq ($(MQ_FLAG), 1)\r
     LOCAL_SRC_FILES +=  JniOnMQTopicFoundListener.cpp \\r
@@ -148,6 +155,7 @@ ifeq ($(SECURED), 1)
 LOCAL_STATIC_LIBRARIES += android-ocprovision\r
 LOCAL_STATIC_LIBRARIES += android-ocpmapi\r
 endif\r
+LOCAL_SHARED_LIBRARIES += android-rd\r
 \r
 ifeq "$(RD_MODE)" "CLIENT"\r
 LOCAL_CPPFLAGS += -DRD_CLIENT\r
@@ -160,6 +168,7 @@ LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_string/include
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/c_common/oic_malloc/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/stack/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/ocsocket/include\r
+LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/csdk/resource-directory/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/oc_logger/include\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../extlibs/boost/boost_1_58_0\r
 LOCAL_C_INCLUDES += $(OIC_SRC_PATH)/../extlibs/cjson\r
index a746cfe..d474ec2 100644 (file)
@@ -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<jobject, std::pair<JniOnPublishResourceListener*, int>>(
-                    jgListener,
-                    std::pair<JniOnPublishResourceListener*, int>(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<jobject, std::pair<JniOnDeleteResourceListener*, int>>(
-                    jgListener,
-                    std::pair<JniOnDeleteResourceListener*, int>(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<OCConnectivityType>(jConnectivityType),
-            pubResCallback,
-            JniUtils::getQOS(env, static_cast<int>(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<OCResourceHandle> 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<OCConnectivityType>(jConnectivityType),
-            resourceHandleList,
-            pubResCallback,
-            JniUtils::getQOS(env, static_cast<int>(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<OCConnectivityType>(jConnectivityType),
-            delResCallback,
-            JniUtils::getQOS(env, static_cast<int>(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<OCResourceHandle> 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<OCConnectivityType>(jConnectivityType),
-            resourceHandleList,
-            delResCallback,
-            JniUtils::getQOS(env, static_cast<int>(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;
index cf6e20f..a6641e3 100644 (file)
@@ -27,8 +27,7 @@
 #include "JniOnDirectPairingListener.h"
 #include "JniOnPresenceListener.h"
 #include "JniOnObserveListener.h"
-#include "JniOnPublishResourceListener.h"
-#include "JniOnDeleteResourceListener.h"
+
 #include <mutex>
 
 #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<jobject, std::pair<JniOnResourceFoundListener*, int>> onResourceFoundListenerMap;
 std::map<jobject, std::pair<JniOnDeviceInfoListener*, int>> onDeviceInfoListenerMap;
 std::map<jobject, std::pair<JniOnPlatformInfoListener*, int>> onPlatformInfoListenerMap;
@@ -70,8 +63,6 @@ std::map<jobject, std::pair<JniOnPresenceListener*, int>> onPresenceListenerMap;
 std::map<jobject, std::pair<JniOnObserveListener*, int>> onObserveListenerMap;
 std::map<jobject, std::pair<JniOnDPDevicesFoundListener*, int>> onDPDevicesFoundListenerMap;
 std::map<jobject, std::pair<JniOnDirectPairingListener*, int>> directPairingListenerMap;
-std::map<jobject, std::pair<JniOnPublishResourceListener*, int>> onPublishResourceListenerMap;
-std::map<jobject, std::pair<JniOnDeleteResourceListener*, int>> 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 (file)
index 0000000..41c7a5d
--- /dev/null
@@ -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<jobject, std::pair<JniOnPublishResourceListener*, int>>(
+                    jgListener,
+                    std::pair<JniOnPublishResourceListener*, int>(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<jobject, std::pair<JniOnDeleteResourceListener*, int>>(
+                    jgListener,
+                    std::pair<JniOnDeleteResourceListener*, int>(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<OCConnectivityType>(jConnectivityType),
+            pubResCallback,
+            JniUtils::getQOS(env, static_cast<int>(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<OCResourceHandle> 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<OCConnectivityType>(jConnectivityType),
+            resourceHandleList,
+            pubResCallback,
+            JniUtils::getQOS(env, static_cast<int>(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<OCConnectivityType>(jConnectivityType),
+             delResCallback,
+             JniUtils::getQOS(env, static_cast<int>(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<OCResourceHandle> 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<OCConnectivityType>(jConnectivityType),
+             resourceHandleList,
+             delResCallback,
+             JniUtils::getQOS(env, static_cast<int>(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 (file)
index 0000000..171c2c4
--- /dev/null
@@ -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 <mutex>
+
+#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<jobject, std::pair<JniOnPublishResourceListener*, int>> onPublishResourceListenerMap;
+std::map<jobject, std::pair<JniOnDeleteResourceListener*, int>> 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
index 6155cea..c6b8d10 100644 (file)
@@ -1005,313 +1005,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<OcConnectivityType> 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<OcConnectivityType> 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<OcConnectivityType> connectivityTypeSet,
-            List<OcResourceHandle> 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<OcConnectivityType> connectivityTypeSet,
-            List<OcResourceHandle> 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<OcConnectivityType> 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<OcConnectivityType> 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<OcConnectivityType> connectivityTypeSet,
-            List<OcResourceHandle> 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<OcConnectivityType> connectivityTypeSet,
-            List<OcResourceHandle> 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 (file)
index 0000000..fbbd481
--- /dev/null
@@ -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<OcConnectivityType> 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<OcConnectivityType> 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<OcConnectivityType> connectivityTypeSet,
+            List<OcResourceHandle> 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<OcConnectivityType> connectivityTypeSet,
+            List<OcResourceHandle> 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<OcConnectivityType> 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<OcConnectivityType> 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<OcConnectivityType> connectivityTypeSet,
+            List<OcResourceHandle> 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<OcConnectivityType> connectivityTypeSet,
+            List<OcResourceHandle> 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);
+    }
+}
index c350a95..ba178a1 100644 (file)
@@ -55,6 +55,7 @@ import org.iotivity.base.OcPresenceHandle;
 import org.iotivity.base.OcRepresentation;
 import org.iotivity.base.OcResource;
 import org.iotivity.base.OcResourceHandle;
+import org.iotivity.base.OcRDClient;
 import org.iotivity.base.PlatformConfig;
 import org.iotivity.base.QualityOfService;
 import org.iotivity.base.ResourceProperty;
@@ -723,8 +724,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");
@@ -744,8 +745,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);
@@ -777,14 +778,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
             );
@@ -797,7 +798,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
             );
index 0a1a2dd..4b07a5f 100644 (file)
@@ -9,7 +9,7 @@
 
 #include "ocstack.h"
 #include "ocpayload.h"
-#include "rd_client.h"
+#include "RDClient.h"
 
 #include <OCApi.h>
 #include <OCPlatform.h>
@@ -641,7 +641,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);
 
@@ -649,7 +649,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);
 
index af50e09..0a87bc4 100644 (file)
@@ -9,7 +9,7 @@
 
 #include "ocstack.h"
 #include "ocpayload.h"
-#include "rd_client.h"
+#include "RDClient.h"
 
 #include <OCApi.h>
 #include <OCPlatform.h>
@@ -383,7 +383,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);
 /* TODO: need to modify the below according to the OCAccountManager API changed.
index b2b981b..60d2cbe 100644 (file)
@@ -27,7 +27,6 @@ lib_env = env.Clone()
 SConscript('#resource/third_party_libs.scons', 'lib_env')
 
 examples_env = lib_env.Clone()
-rd_mode = lib_env.get('RD_MODE')
 
 ######################################################################
 # Build flags
@@ -73,9 +72,6 @@ if target_os in ['darwin', 'ios']:
 if env.get('WITH_CLOUD'):
        examples_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       examples_env.AppendUnique(LIBS = ['resource_directory'])
-
 ######################################################################
 # Source files and Targets
 ######################################################################
index f8a2f65..3ad6615 100644 (file)
@@ -26,7 +26,6 @@ gtest_env = SConscript('#extlibs/gtest/SConscript')
 catest_env = gtest_env.Clone()
 target_os = catest_env.get('TARGET_OS')
 target_transport = catest_env.get('TARGET_TRANSPORT')
-rd_mode = catest_env.get('RD_MODE')
 
 ######################################################################
 # Build flags
@@ -50,9 +49,6 @@ if target_os not in ['arduino', 'darwin', 'ios', 'msys_nt', 'windows']:
 if catest_env.get('SECURED') == '1':
        catest_env.AppendUnique(LIBS = ['mbedtls', 'mbedx509','mbedcrypto'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       catest_env.PrependUnique(LIBS = ['resource_directory'])
-
 if catest_env.get('LOGGING'):
        catest_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
index 9ff2552..4c30d4f 100755 (executable)
@@ -35,24 +35,33 @@ rd_mode = env.get('RD_MODE')
 ######################################################################
 # Build flags
 ######################################################################
-rd_env.AppendUnique(CPPPATH = ['include', 'src/internal', '../stack/include', '../../oc_logger/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'])
 if 'SERVER' in rd_mode:
     rd_env.AppendUnique(CPPDEFINES = ['RD_SERVER'])
 
-rd_env.AppendUnique(LIBPATH = [rd_env.get('BUILD_DIR')])
-rd_env.AppendUnique(LIBS = ['octbstack'])
+rd_env.PrependUnique(LIBPATH = [rd_env.get('BUILD_DIR')])
+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 in ['linux']:
     rd_env.AppendUnique(LIBS = ['pthread'])
 
 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'):
@@ -79,21 +88,25 @@ 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 in ['tizen'] :
-    rdsdk = rd_env.SharedLibrary('resource_directory', rd_src)
+if target_os not in ['arduino', 'darwin', 'ios', 'windows', 'winrt']:
+    rdsdk_shared = rd_env.SharedLibrary('resource_directory', rd_src)
+    rdsdk_static = rd_env.StaticLibrary('resource_directory', rd_src)
+    rdsdk = Flatten([rdsdk_static, rdsdk_shared])
 else :
     rdsdk = rd_env.StaticLibrary('resource_directory', rd_src)
-
 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
@@ -102,7 +115,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 (file)
index 0000000..288e985
--- /dev/null
@@ -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<void(const OC::OCRepresentation&, const int)> PublishResourceCallback;
+typedef std::function<void(const int)> 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 (file)
index 0000000..365ab5d
--- /dev/null
@@ -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 <thread>
+#include <mutex>
+
+#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<std::recursive_mutex> 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<OCRepresentation>::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<ServerCallbackContext::PublishContext*>(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: "
+            <<e.what() <<std::flush;
+    }
+
+    return OC_STACK_KEEP_TRANSACTION;
+}
+
+OCStackResult RDClient::publishResourceToRD(const std::string& host,
+                                            OCConnectivityType connectivityType,
+                                            ResourceHandles& resourceHandles,
+                                            PublishResourceCallback callback)
+{
+    return publishResourceToRD(host, connectivityType, resourceHandles, callback, static_cast<QualityOfService>(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<void*>(ctx),
+            publishResourceToRDCallback,
+            [](void* c)
+            {delete static_cast<ServerCallbackContext::PublishContext*>(c);}
+            );
+
+    auto cLock = m_csdkLock.lock();
+    OCStackResult result = OC_STACK_ERROR;
+    if (cLock)
+    {
+        std::lock_guard<std::recursive_mutex> lock(*cLock);
+        result = OCRDPublish(host.c_str(), connectivityType, &resourceHandles[0],
+                             resourceHandles.size(), &cbdata, static_cast<OCQualityOfService>(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<ServerCallbackContext::DeleteContext*>(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<QualityOfService>(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<void*>(ctx),
+            deleteResourceFromRDCallback,
+            [](void* c)
+            {delete static_cast<ServerCallbackContext::DeleteContext*>(c);}
+            );
+
+    auto cLock = m_csdkLock.lock();
+    OCStackResult result = OC_STACK_ERROR;
+    if (cLock)
+    {
+        std::lock_guard<std::recursive_mutex> lock(*cLock);
+        result = OCRDDelete(host.c_str(), connectivityType, &resourceHandles[0],
+                            resourceHandles.size(), &cbdata, static_cast<OCQualityOfService>(qos));
+    }
+
+    if (OC_STACK_OK != result)
+    {
+        throw OCException(OC::Exception::PUBLISH_RESOURCE_FAILED, result);
+    }
+    return result;
+}
+#endif
index 54bb3b4..be45d21 100644 (file)
@@ -26,7 +26,6 @@ gtest_env = SConscript('#extlibs/gtest/SConscript')
 sptest_env = gtest_env.Clone()
 src_dir = sptest_env.get('SRC_DIR')
 target_os = sptest_env.get('TARGET_OS')
-rd_mode = sptest_env.get('RD_MODE')
 
 ######################################################################
 # Build flags
@@ -89,9 +88,6 @@ if target_os in ['msys_nt', 'windows']:
 else:
        sptest_env.AppendUnique(LIBS = ['octbstack'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       sptest_env.PrependUnique(LIBS = ['resource_directory'])
-
 ######################################################################
 # Source files and Targets
 ######################################################################
@@ -126,4 +122,3 @@ if sptest_env.get('TEST') == '1':
                sptest_env.AppendENVPath('PATH', sptest_env.get('BUILD_DIR'))
                ut = sptest_env.Command ('ut', None, out_dir + '/resource/csdk/security/provisioning/unittest/unittest')
                AlwaysBuild ('ut')
-
index 41871bb..6df16cf 100644 (file)
@@ -26,7 +26,6 @@ gtest_env = SConscript('#extlibs/gtest/SConscript')
 srmtest_env = gtest_env.Clone()
 src_dir = srmtest_env.get('SRC_DIR')
 target_os = srmtest_env.get('TARGET_OS')
-rd_mode = srmtest_env.get('RD_MODE')
 
 ######################################################################
 # Build flags
@@ -79,9 +78,6 @@ else:
        srmtest_env.AppendUnique(CPPDEFINES = ['HAVE_LOCALTIME_R'])
        srmtest_env.AppendUnique(LIBS = ['octbstack'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       srmtest_env.PrependUnique(LIBS = ['resource_directory'])
-
 ######################################################################
 # Source files and Targets
 ######################################################################
index 9a766a4..74bf390 100644 (file)
@@ -25,7 +25,6 @@ import os.path
 gtest_env = SConscript('#extlibs/gtest/SConscript')
 stacktest_env = gtest_env.Clone()
 target_os = stacktest_env.get('TARGET_OS')
-rd_mode = stacktest_env.get('RD_MODE')
 
 ######################################################################
 # Build flags
@@ -64,9 +63,6 @@ if target_os in ['msys_nt', 'windows']:
 else:
        stacktest_env.PrependUnique(LIBS = ['m'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       stacktest_env.PrependUnique(LIBS = ['resource_directory'])
-
 ######################################################################
 # Source files and Targets
 ######################################################################
index 9b605fc..afb0eb2 100644 (file)
@@ -81,9 +81,6 @@ if target_os in ['msys_nt', 'windows']:
 if examples_env.get('LOGGING'):
        examples_env.AppendUnique(CPPDEFINES = ['TB_LOG'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       examples_env.AppendUnique(LIBS = ['resource_directory'])
-
 def make_single_file_cpp_program(program_name):
        return examples_env.Program(program_name, program_name + ".cpp")
 
@@ -110,12 +107,10 @@ 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'])
+               example_names += ['rdclient']
+               examples_env.AppendUnique(LIBS = ['resource_directory'])
 
 examples = map(make_single_file_cpp_program, example_names)
 
index ef6a0c3..0b9eeb5 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "OCPlatform.h"
 #include "OCApi.h"
+#include "RDClient.h"
 
 #include <functional>
 #include <iostream>
@@ -105,9 +106,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";
@@ -122,9 +122,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";
index f422392..62f878a 100644 (file)
@@ -74,19 +74,6 @@ namespace OC
         virtual OCStackResult setDefaultDeviceEntityHandler(EntityHandler entityHandler) = 0;
 
         virtual OCStackResult sendResponse(const std::shared_ptr<OCResourceResponse> 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
     };
 }
 
index ad578dd..07a1262 100644 (file)
 
 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<OCResourceResponse> 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;
index 6c42b58..ff2d212 100644 (file)
@@ -301,11 +301,6 @@ namespace OC
 
     typedef std::function<void(const int, const std::string&,
                                std::shared_ptr<OCResource>)> MQTopicCallback;
-#ifdef RD_CLIENT
-    typedef std::function<void(const OCRepresentation&, const int)> PublishResourceCallback;
-
-    typedef std::function<void(const int)> DeleteResourceCallback;
-#endif
 } // namespace OC
 
 #endif
index 305ad61..9826b6c 100644 (file)
@@ -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_
-
-
-
index cffeeea..1983a03 100644 (file)
@@ -246,27 +246,6 @@ namespace OC
                         const std::vector<std::string>& resourceTypes,
                         const std::vector<std::string>& interfaces);
         OCStackResult sendResponse(const std::shared_ptr<OCResourceResponse> 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<std::recursive_mutex> csdkLock();
 
         OCStackResult findDirectPairingDevices(unsigned short waittime,
@@ -320,6 +299,3 @@ namespace OC
 }
 
 #endif //__OCPLATFORM_IMPL_H
-
-
-
index 0235fda..a00d856 100644 (file)
 #include <OCPlatform.h>
 #include <OCUtilities.h>
 
-#ifdef RD_CLIENT
-#include <rd_client.h>
-#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<OCRepresentation>::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<ServerCallbackContext::PublishContext*>(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: "
-                <<e.what() <<std::flush;
-        }
-
-        return OC_STACK_DELETE_TRANSACTION;
-    }
-
-    OCStackResult InProcServerWrapper::publishResourceToRD(const std::string& host,
-                                                           OCConnectivityType connectivityType,
-                                                           ResourceHandles& resourceHandles,
-                                                           PublishResourceCallback& callback,
-                                                           OCQualityOfService qos)
-    {
-        ServerCallbackContext::PublishContext* ctx =
-            new ServerCallbackContext::PublishContext(callback);
-        OCCallbackData cbdata(
-                static_cast<void*>(ctx),
-                publishResourceToRDCallback,
-                [](void* c)
-                {delete static_cast<ServerCallbackContext::PublishContext*>(c);}
-                );
-
-        auto cLock = m_csdkLock.lock();
-        OCStackResult result = OC_STACK_ERROR;
-        if (cLock)
-        {
-            std::lock_guard<std::recursive_mutex> 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<ServerCallbackContext::DeleteContext*>(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<void*>(ctx),
-                deleteResourceFromRDCallback,
-                [](void* c)
-                {delete static_cast<ServerCallbackContext::DeleteContext*>(c);}
-                );
-
-        auto cLock = m_csdkLock.lock();
-        OCStackResult result = OC_STACK_ERROR;
-        if (cLock)
-        {
-            std::lock_guard<std::recursive_mutex> 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())
index 59e4fab..c886c23 100644 (file)
@@ -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
-
index 7060a09..8e618c5 100644 (file)
@@ -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<OCQualityOfService>(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<OCQualityOfService>(qos));
-    }
-#endif
     std::weak_ptr<std::recursive_mutex> OCPlatform_impl::csdkLock()
     {
         return m_csdkLock;
@@ -504,4 +463,3 @@ namespace OC
         return OCSetDeviceId(myUuid);
     }
 } //namespace OC
-
index 5e82370..fdc9d14 100644 (file)
@@ -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
 ######################################################################
index c0a9da8..23b825d 100644 (file)
@@ -65,9 +65,6 @@ if unittests_env.get('LOGGING'):
 if unittests_env.get('WITH_CLOUD'):
        unittests_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])
 
-if 'CLIENT' in rd_mode or 'SERVER' in rd_mode:
-       unittests_env.AppendUnique(LIBS = ['resource_directory'])
-
 ######################################################################
 # Source files and Targets
 ######################################################################
index f7f8edf..90b4586 100755 (executable)
@@ -55,7 +55,6 @@ notification_env.PrependUnique(LIBS = [
        'oc_logger',
        'connectivity_abstraction',
        'libcoap',
-       'resource_directory'
        ])
 
 if target_os not in ['windows', 'winrt']:
@@ -78,9 +77,6 @@ if not env.get('RELEASE'):
        notification_env.PrependUnique(LIBS = ['gcov'])
        notification_env.AppendUnique(CCFLAGS = ['--coverage'])
 
-if 'CLIENT' in notification_env.get('RD_MODE'):
-       notification_env.AppendUnique(CPPDEFINES = ['RD_CLIENT'])
-
 if env.get('WITH_CLOUD') == True:
        notification_env.AppendUnique(CPPDEFINES = ['WITH_CLOUD'])