- 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>
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
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
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
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
#include "JniOcDirectPairDevice.h"
#include "JniUtils.h"
#include "ocpayload.h"
+#include "RDClient.h"
#ifdef WITH_CLOUD
#include "JniOcAccountManager.h"
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
}
/*
- * 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;
#include "JniOnDirectPairingListener.h"
#include "JniOnPresenceListener.h"
#include "JniOnObserveListener.h"
-#include "JniOnPublishResourceListener.h"
-#include "JniOnDeleteResourceListener.h"
+
#include <mutex>
#ifndef _Included_org_iotivity_base_OcPlatform
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;
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;
std::mutex observeMapLock;
std::mutex dpDevicesFoundListenerMapLock;
std::mutex directPairingListenerMapLock;
-std::mutex publishResourceListenerMapLock;
-std::mutex deleteResourceListenerMapLock;
#ifdef __cplusplus
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;
}
#endif
#endif
-
--- /dev/null
+/* ****************************************************************
+ *
+ * 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
+ }
--- /dev/null
+/* ****************************************************************
+ *
+ * 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
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
*/
--- /dev/null
+/* ****************************************************************
+ *
+ * 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);
+ }
+}
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;
// 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");
}
};
- OcPlatform.OnDeleteResourceListener resourceDeleteListener =
- new OcPlatform.OnDeleteResourceListener() {
+ OcRDClient.OnDeleteResourceListener resourceDeleteListener =
+ new OcRDClient.OnDeleteResourceListener() {
@Override
public void onDeleteResourceCompleted(int resultCode) {
msg("onDeleteResourceCompleted, result is " + resultCode);
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
);
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
);
#include "ocstack.h"
#include "ocpayload.h"
-#include "rd_client.h"
+#include "RDClient.h"
#include <OCApi.h>
#include <OCPlatform.h>
OCPlatform::registerDeviceInfo(devInfoAirConditioner);
- result = OCPlatform::publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP,
+ result = RDClient::Instance().publishResourceToRD(host, OCConnectivityType::CT_ADAPTER_TCP,
resourceHandles,
&onPublish);
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);
#include "ocstack.h"
#include "ocpayload.h"
-#include "rd_client.h"
+#include "RDClient.h"
#include <OCApi.h>
#include <OCPlatform.h>
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.
SConscript('#resource/third_party_libs.scons', 'lib_env')
examples_env = lib_env.Clone()
-rd_mode = lib_env.get('RD_MODE')
######################################################################
# Build flags
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
######################################################################
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
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'])
######################################################################
# 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'):
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
SConscript('samples/SConscript')
######################################################################
-# Build UnitTests Things Manager
+# Build UnitTests of the Resource Directory
################################################ ######################
if target_os in ['linux']:
SConscript('unittests/SConscript')
--- /dev/null
+//******************************************************************
+//
+// 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);
+
+};
--- /dev/null
+//******************************************************************
+//
+// 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
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
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
######################################################################
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')
-
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
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
######################################################################
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
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
######################################################################
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")
'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)
#include "OCPlatform.h"
#include "OCApi.h"
+#include "RDClient.h"
#include <functional>
#include <iostream>
* 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";
* 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";
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
};
}
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:
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;
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
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
}
#endif // OC_PLATFORM_H_
-
-
-
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,
}
#endif //__OCPLATFORM_IMPL_H
-
-
-
#include <OCPlatform.h>
#include <OCUtilities.h>
-#ifdef RD_CLIENT
-#include <rd_client.h>
-#endif
-
using namespace std;
using 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())
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);
}
} // namespace OCPlatform
} //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;
return OCSetDeviceId(myUuid);
}
} //namespace OC
-
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
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
######################################################################
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
######################################################################
'oc_logger',
'connectivity_abstraction',
'libcoap',
- 'resource_directory'
])
if target_os not in ['windows', 'winrt']:
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'])