+/*\r
+* //******************************************************************\r
+* //\r
+* // Copyright 2015 Intel Corporation.\r
+* //\r
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+* //\r
+* // Licensed under the Apache License, Version 2.0 (the "License");\r
+* // you may not use this file except in compliance with the License.\r
+* // You may obtain a copy of the License at\r
+* //\r
+* // http://www.apache.org/licenses/LICENSE-2.0\r
+* //\r
+* // Unless required by applicable law or agreed to in writing, software\r
+* // distributed under the License is distributed on an "AS IS" BASIS,\r
+* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+* // See the License for the specific language governing permissions and\r
+* // limitations under the License.\r
+* //\r
+* //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\r
+*/\r
+#include "JniOcPlatform.h"\r
+#include "OCPlatform.h"\r
+#include "JniOcResource.h"\r
+#include "JniOcResourceHandle.h"\r
+#include "JniOcPresenceHandle.h"\r
+#include "JniOcResourceResponse.h"\r
+#include "JniUtils.h"\r
+\r
+using namespace OC;\r
+\r
+JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)\r
+{\r
+ JniOnResourceFoundListener *onResourceFoundListener = NULL;\r
+\r
+ resourceFoundMapLock.lock();\r
+\r
+ for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ onResourceFoundListener = refPair.first;\r
+ refPair.second++;\r
+ it->second = refPair;\r
+ onResourceFoundListenerMap.insert(*it);\r
+ LOGD("OnResourceFoundListener: ref. count incremented");\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!onResourceFoundListener)\r
+ {\r
+ onResourceFoundListener = new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);\r
+ jobject jgListener = env->NewGlobalRef(jListener);\r
+\r
+ onResourceFoundListenerMap.insert(std::pair < jobject, std::pair < JniOnResourceFoundListener*,\r
+ int >> (jgListener, std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener, 1)));\r
+ LOGD("OnResourceFoundListener: new listener");\r
+ }\r
+ resourceFoundMapLock.unlock();\r
+ return onResourceFoundListener;\r
+}\r
+\r
+void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)\r
+{\r
+ resourceFoundMapLock.lock();\r
+\r
+ for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ if (refPair.second > 1)\r
+ {\r
+ refPair.second--;\r
+ it->second = refPair;\r
+ onResourceFoundListenerMap.insert(*it);\r
+ LOGI("OnResourceFoundListener: ref. count decremented");\r
+ }\r
+ else\r
+ {\r
+ env->DeleteGlobalRef(it->first);\r
+ JniOnResourceFoundListener* listener = refPair.first;\r
+ delete listener;\r
+ onResourceFoundListenerMap.erase(it);\r
+ LOGI("OnResourceFoundListener removed");\r
+ }\r
+ break;\r
+ }\r
+ }\r
+ resourceFoundMapLock.unlock();\r
+}\r
+\r
+JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)\r
+{\r
+ JniOnDeviceInfoListener *onDeviceInfoListener = NULL;\r
+\r
+ deviceInfoMapLock.lock();\r
+\r
+ for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ onDeviceInfoListener = refPair.first;\r
+ refPair.second++;\r
+ it->second = refPair;\r
+ onDeviceInfoListenerMap.insert(*it);\r
+ LOGD("OnDeviceInfoListener: ref. count incremented");\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!onDeviceInfoListener)\r
+ {\r
+ onDeviceInfoListener = new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);\r
+ jobject jgListener = env->NewGlobalRef(jListener);\r
+\r
+ onDeviceInfoListenerMap.insert(std::pair < jobject, std::pair < JniOnDeviceInfoListener*,\r
+ int >> (jgListener, std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));\r
+ LOGI("OnDeviceInfoListener: new listener");\r
+ }\r
+\r
+ deviceInfoMapLock.unlock();\r
+ return onDeviceInfoListener;\r
+}\r
+\r
+void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)\r
+{\r
+ deviceInfoMapLock.lock();\r
+ bool isFound = false;\r
+ for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ if (refPair.second > 1)\r
+ {\r
+ refPair.second--;\r
+ it->second = refPair;\r
+ onDeviceInfoListenerMap.insert(*it);\r
+ LOGI("OnDeviceInfoListener: ref. count decremented");\r
+ }\r
+ else\r
+ {\r
+ env->DeleteGlobalRef(it->first);\r
+ JniOnDeviceInfoListener* listener = refPair.first;\r
+ delete listener;\r
+ onDeviceInfoListenerMap.erase(it);\r
+\r
+ LOGI("OnDeviceInfoListener removed");\r
+ }\r
+\r
+ isFound = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if (!isFound)\r
+ {\r
+ ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");\r
+ }\r
+ deviceInfoMapLock.unlock();\r
+}\r
+\r
+JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)\r
+{\r
+ JniOnPresenceListener *onPresenceListener = NULL;\r
+\r
+ presenceMapLock.lock();\r
+\r
+ for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ onPresenceListener = refPair.first;\r
+ refPair.second++;\r
+ it->second = refPair;\r
+ onPresenceListenerMap.insert(*it);\r
+ LOGD("OnPresenceListener: ref. count incremented");\r
+ break;\r
+ }\r
+ }\r
+ if (!onPresenceListener)\r
+ {\r
+ onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);\r
+ jobject jgListener = env->NewGlobalRef(jListener);\r
+ onPresenceListenerMap.insert(std::pair < jobject, std::pair < JniOnPresenceListener*,\r
+ int >> (jgListener, std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));\r
+ LOGI("OnPresenceListener: new listener");\r
+ }\r
+ presenceMapLock.unlock();\r
+ return onPresenceListener;\r
+}\r
+\r
+void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)\r
+{\r
+ presenceMapLock.lock();\r
+ bool isFound = false;\r
+ for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)\r
+ {\r
+ if (env->IsSameObject(jListener, it->first))\r
+ {\r
+ auto refPair = it->second;\r
+ if (refPair.second > 1)\r
+ {\r
+ refPair.second--;\r
+ it->second = refPair;\r
+ onPresenceListenerMap.insert(*it);\r
+ LOGI("OnPresenceListener: ref. count decremented");\r
+ }\r
+ else\r
+ {\r
+ env->DeleteGlobalRef(it->first);\r
+ JniOnPresenceListener* listener = refPair.first;\r
+ delete listener;\r
+ onPresenceListenerMap.erase(it);\r
+ LOGI("OnPresenceListener is removed");\r
+ }\r
+ isFound = true;\r
+ break;\r
+ }\r
+ }\r
+ if (!isFound)\r
+ {\r
+ ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");\r
+ }\r
+ presenceMapLock.unlock();\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: configure\r
+* Signature: (IILjava/lang/String;II)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure\r
+(JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort, jint jQOS)\r
+{\r
+ LOGI("OcPlatform_configure");\r
+\r
+ std::string ipAddress;\r
+ if (jIpAddress)\r
+ {\r
+ ipAddress = env->GetStringUTFChars(jIpAddress, NULL);\r
+ }\r
+ uint16_t port;\r
+ if (jPort > 0)\r
+ {\r
+ port = static_cast<uint16_t>(jPort);\r
+ }\r
+ PlatformConfig cfg{\r
+ JniUtils::getServiceType(env, jServiceType),\r
+ JniUtils::getModeType(env, jModeType),\r
+ ipAddress,\r
+ port,\r
+ JniUtils::getQOS(env, static_cast<int>(jQOS))\r
+ };\r
+\r
+ OCPlatform::Configure(cfg);\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: notifyAllObservers0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle)\r
+{\r
+ LOGI("OcPlatform_notifyAllObservers");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to notify all observers");\r
+ return;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: notifyAllObservers1\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;I)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)\r
+{\r
+ LOGI("OcPlatform_notifyAllObservers1");\r
+\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try{\r
+ OCStackResult result = OCPlatform::notifyAllObservers(\r
+ jniOcResourceHandle->getOCResourceHandle(),\r
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to notify all observers");\r
+ return;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: notifyListOfObservers2\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse)\r
+{\r
+ LOGD("OcPlatform_notifyListOfObservers2");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jObservationIdArr)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceResponse)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(\r
+ env, jResourceResponse);\r
+ if (!jniOcResourceResponse) return;\r
+\r
+ int len = env->GetArrayLength(jObservationIdArr);\r
+ uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);\r
+\r
+ ObservationIds observationIds;\r
+ for (int i = 0; i < len; ++i)\r
+ {\r
+ observationIds.push_back(bArr[i]);\r
+ }\r
+\r
+ env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);\r
+\r
+ try{\r
+ OCStackResult result = OCPlatform::notifyListOfObservers(\r
+ jniOcResourceHandle->getOCResourceHandle(),\r
+ observationIds,\r
+ jniOcResourceResponse->getOCResourceResponse());\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to notify all observers");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: notifyListOfObservers3\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse, jint jQoS)\r
+{\r
+ LOGD("OcPlatform_notifyListOfObservers3");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jObservationIdArr)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceResponse)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(\r
+ env, jResourceResponse);\r
+ if (!jniOcResourceResponse) return;\r
+\r
+ int len = env->GetArrayLength(jObservationIdArr);\r
+ uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);\r
+\r
+ ObservationIds observationIds;\r
+ for (int i = 0; i < len; ++i)\r
+ {\r
+ observationIds.push_back(bArr[i]);\r
+ }\r
+\r
+ env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);\r
+\r
+ try{\r
+ OCStackResult result = OCPlatform::notifyListOfObservers(\r
+ jniOcResourceHandle->getOCResourceHandle(),\r
+ observationIds,\r
+ jniOcResourceResponse->getOCResourceResponse(),\r
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to notify all observers");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: findResource0\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)\r
+{\r
+ LOGD("OcPlatform_findResource");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string resourceUri;\r
+ if (jResourceUri)\r
+ {\r
+ resourceUri = env->GetStringUTFChars(jResourceUri, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);\r
+\r
+ FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)\r
+ {\r
+ onResFoundListener->foundResourceCallback(resource);\r
+ };\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::findResource(\r
+ host,\r
+ resourceUri,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ findCallback);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Find resource has failed");\r
+ return;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: findResource1\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)\r
+{\r
+ LOGD("OcPlatform_findResource");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string resourceUri;\r
+ if (jResourceUri)\r
+ {\r
+ resourceUri = env->GetStringUTFChars(jResourceUri, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");\r
+ return;\r
+ }\r
+ JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);\r
+\r
+ FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)\r
+ {\r
+ onResFoundListener->foundResourceCallback(resource);\r
+ };\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::findResource(\r
+ host,\r
+ resourceUri,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ findCallback,\r
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Find resource has failed");\r
+ return;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: getDeviceInfo0\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)\r
+{\r
+ LOGD("OcPlatform_getDeviceInfo0");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string resourceUri;\r
+ if (jResourceUri)\r
+ {\r
+ resourceUri = env->GetStringUTFChars(jResourceUri, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");\r
+ return;\r
+ }\r
+ JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);\r
+\r
+ FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)\r
+ {\r
+ onDeviceInfoListener->foundDeviceCallback(ocRepresentation);\r
+ };\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::getDeviceInfo(\r
+ host,\r
+ resourceUri,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ findDeviceCallback);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Find device has failed");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: getDeviceInfo1\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)\r
+{\r
+ LOGD("OcPlatform_getDeviceInfo1");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string resourceUri;\r
+ if (jResourceUri)\r
+ {\r
+ resourceUri = env->GetStringUTFChars(jResourceUri, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");\r
+ return;\r
+ }\r
+ JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);\r
+\r
+ FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)\r
+ {\r
+ onDeviceInfoListener->foundDeviceCallback(ocRepresentation);\r
+ };\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::getDeviceInfo(\r
+ host,\r
+ resourceUri,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ findDeviceCallback,\r
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Find device has failed");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: registerResource0\r
+* Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;\r
+*/\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0\r
+(JNIEnv *env, jclass clazz, jobject jResource)\r
+{\r
+ LOGD("OcPlatform_registerResource");\r
+ if (!jResource)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");\r
+ return nullptr;\r
+ }\r
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);\r
+ if (!resource) return nullptr;\r
+\r
+ OCResourceHandle resourceHandle;\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::registerResource(\r
+ resourceHandle,\r
+ resource->getOCResource());\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "register resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ return nullptr;\r
+ }\r
+\r
+ JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);\r
+ jlong handle = reinterpret_cast<jlong>(jniHandle);\r
+ jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);\r
+ if (!jResourceHandle)\r
+ {\r
+ LOGE("Failed to create OcResourceHandle");\r
+ delete jniHandle;\r
+ }\r
+ return jResourceHandle;\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: registerResource1\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;\r
+*/\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1\r
+(JNIEnv *env, jclass clazz, jstring jResourceUri, jstring jResourceTypeName, jstring jResourceInterface,\r
+jobject jListener, jint jResourceProperty)\r
+{\r
+ LOGI("OcPlatform_registerResource1");\r
+ std::string resourceUri;\r
+ if (jResourceUri)\r
+ {\r
+ resourceUri = env->GetStringUTFChars(jResourceUri, NULL);\r
+ }\r
+ std::string resourceTypeName;\r
+ if (jResourceTypeName)\r
+ {\r
+ resourceTypeName = env->GetStringUTFChars(jResourceTypeName, NULL);\r
+ }\r
+ std::string resourceInterface;\r
+ if (jResourceInterface)\r
+ {\r
+ resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "entityHandler cannot be null");\r
+ return nullptr;\r
+ }\r
+ JniEntityHandler* entityHandler = new JniEntityHandler(env, jListener);\r
+ EntityHandler handleEntityCallback = [entityHandler](const std::shared_ptr<OCResourceRequest> request) ->\r
+ OCEntityHandlerResult{\r
+ return entityHandler->handleEntity(request);\r
+ };\r
+\r
+ OCResourceHandle resourceHandle;\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::registerResource(\r
+ resourceHandle,\r
+ resourceUri,\r
+ resourceTypeName,\r
+ resourceInterface,\r
+ handleEntityCallback,\r
+ static_cast<int>(jResourceProperty));\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ delete entityHandler;\r
+ ThrowOcException(result, "register resource");\r
+ return nullptr;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ delete entityHandler;\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ return nullptr;\r
+ }\r
+\r
+ JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);\r
+ jlong handle = reinterpret_cast<jlong>(jniHandle);\r
+ jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);\r
+ if (!jResourceHandle)\r
+ {\r
+ LOGE("Failed to create OcResourceHandle");\r
+ delete jniHandle;\r
+ }\r
+\r
+ return jResourceHandle;\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: registerDeviceInfo0\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0\r
+(JNIEnv *env,\r
+jclass clazz,\r
+jstring jDeviceName,\r
+jstring jHostName,\r
+jstring jDeviceUUID,\r
+jstring jContentType,\r
+jstring jVersion,\r
+jstring jManufacturerName,\r
+jstring jManufacturerUrl,\r
+jstring jModelNumber,\r
+jstring jDateOfManufacture,\r
+jstring jPlatformVersion,\r
+jstring jFirmwareVersion,\r
+jstring jSupportUrl)\r
+{\r
+ LOGI("OcPlatform_registerDeviceInfo");\r
+\r
+ std::string deviceName;\r
+ if (jDeviceName)\r
+ {\r
+ deviceName = env->GetStringUTFChars(jDeviceName, NULL);\r
+ }\r
+ std::string hostName;\r
+ if (jHostName)\r
+ {\r
+ hostName = env->GetStringUTFChars(jHostName, NULL);\r
+ }\r
+ std::string deviceUUID;\r
+ if (jDeviceUUID)\r
+ {\r
+ deviceUUID = env->GetStringUTFChars(jDeviceUUID, NULL);\r
+ }\r
+ std::string contentType;\r
+ if (jContentType)\r
+ {\r
+ contentType = env->GetStringUTFChars(jContentType, NULL);\r
+ }\r
+ std::string version;\r
+ if (jVersion)\r
+ {\r
+ version = env->GetStringUTFChars(jVersion, NULL);\r
+ }\r
+ std::string manufacturerName;\r
+ if (jManufacturerName)\r
+ {\r
+ manufacturerName = env->GetStringUTFChars(jManufacturerName, NULL);\r
+ }\r
+ std::string manufacturerUrl;\r
+ if (jManufacturerUrl)\r
+ {\r
+ manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, NULL);\r
+ }\r
+ std::string modelNumber;\r
+ if (jModelNumber)\r
+ {\r
+ modelNumber = env->GetStringUTFChars(jModelNumber, NULL);\r
+ }\r
+ std::string dateOfManufacture;\r
+ if (jDateOfManufacture)\r
+ {\r
+ dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, NULL);\r
+ }\r
+ std::string platformVersion;\r
+ if (jPlatformVersion)\r
+ {\r
+ platformVersion = env->GetStringUTFChars(jPlatformVersion, NULL);\r
+ }\r
+ std::string firmwareVersion;\r
+ if (jFirmwareVersion)\r
+ {\r
+ firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, NULL);\r
+ }\r
+ std::string supportUrl;\r
+ if (jSupportUrl)\r
+ {\r
+ supportUrl = env->GetStringUTFChars(jSupportUrl, NULL);\r
+ }\r
+\r
+ OCDeviceInfo deviceInfo;\r
+ try\r
+ {\r
+ DuplicateString(&deviceInfo.contentType, contentType);\r
+ DuplicateString(&deviceInfo.dateOfManufacture, dateOfManufacture);\r
+ DuplicateString(&deviceInfo.deviceName, deviceName);\r
+ DuplicateString(&deviceInfo.deviceUUID, deviceUUID);\r
+ DuplicateString(&deviceInfo.firmwareVersion, firmwareVersion);\r
+ DuplicateString(&deviceInfo.hostName, hostName);\r
+ DuplicateString(&deviceInfo.manufacturerName, manufacturerName);\r
+ DuplicateString(&deviceInfo.manufacturerUrl, manufacturerUrl);\r
+ DuplicateString(&deviceInfo.modelNumber, modelNumber);\r
+ DuplicateString(&deviceInfo.platformVersion, platformVersion);\r
+ DuplicateString(&deviceInfo.supportUrl, supportUrl);\r
+ DuplicateString(&deviceInfo.version, version);\r
+ }\r
+ catch (std::exception &e)\r
+ {\r
+ ThrowOcException(JNI_EXCEPTION, "Failed to register device info");\r
+ return;\r
+ }\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);\r
+\r
+ delete deviceInfo.contentType;\r
+ delete deviceInfo.dateOfManufacture;\r
+ delete deviceInfo.deviceName;\r
+ delete deviceInfo.deviceUUID;\r
+ delete deviceInfo.firmwareVersion;\r
+ delete deviceInfo.hostName;\r
+ delete deviceInfo.manufacturerName;\r
+ delete deviceInfo.manufacturerUrl;\r
+ delete deviceInfo.modelNumber;\r
+ delete deviceInfo.platformVersion;\r
+ delete deviceInfo.supportUrl;\r
+ delete deviceInfo.version;\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to register device info");\r
+ return;\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: unregisterResource0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle)\r
+{\r
+ LOGI("OcPlatform_unregisterResource");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();\r
+ OCStackResult result = OCPlatform::unregisterResource(resHandle);\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to unregister resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: bindResource0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0\r
+(JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)\r
+{\r
+ LOGI("OcPlatform_bindResource");\r
+ if (!jResourceCollectionHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceCollectionHandle);\r
+ if (!jniOcResourceCollectionHandle) return;\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::bindResource(\r
+ jniOcResourceCollectionHandle->getOCResourceHandle(),\r
+ jniOcResourceHandle->getOCResourceHandle()\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to bind resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: bindResources0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0\r
+(JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)\r
+{\r
+ LOGI("OcPlatform_bindResources");\r
+\r
+ if (!jResourceCollectionHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceHandleArray)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceCollectionHandle);\r
+ if (!jniOcResourceCollectionHandle) return;\r
+\r
+ std::vector<OCResourceHandle> resourceHandleList;\r
+ int len = env->GetArrayLength(jResourceHandleArray);\r
+ for (int i = 0; i < len; ++i)\r
+ {\r
+ jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ resourceHandleList.push_back(\r
+ jniOcResourceHandle->getOCResourceHandle());\r
+ }\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::bindResources(\r
+ jniOcResourceCollectionHandle->getOCResourceHandle(),\r
+ resourceHandleList\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to bind resources");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: unbindResource0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0\r
+(JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)\r
+{\r
+ LOGI("OcPlatform_unbindResource");\r
+ if (!jResourceCollectionHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceCollectionHandle);\r
+ if (!jniOcResourceCollectionHandle) return;\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::unbindResource(\r
+ jniOcResourceCollectionHandle->getOCResourceHandle(),\r
+ jniOcResourceHandle->getOCResourceHandle()\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to unbind resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: unbindResources0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0\r
+(JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)\r
+{\r
+ LOGI("OcPlatform_unbindResources");\r
+ if (!jResourceCollectionHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");\r
+ return;\r
+ }\r
+ if (!jResourceHandleArray)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceCollectionHandle);\r
+ if (!jniOcResourceCollectionHandle) return;\r
+\r
+ std::vector<OCResourceHandle> resourceHandleList;\r
+ int len = env->GetArrayLength(jResourceHandleArray);\r
+ for (int i = 0; i < len; ++i)\r
+ {\r
+ jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ resourceHandleList.push_back(\r
+ jniOcResourceHandle->getOCResourceHandle());\r
+ }\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::unbindResources(\r
+ jniOcResourceCollectionHandle->getOCResourceHandle(),\r
+ resourceHandleList\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to unbind resources");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: bindTypeToResource0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceTypeName)\r
+{\r
+ LOGI("OcPlatform_bindTypeToResource");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ std::string typeName;\r
+ if (jResourceTypeName)\r
+ {\r
+ typeName = env->GetStringUTFChars(jResourceTypeName, NULL);\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::bindTypeToResource(\r
+ jniOcResourceHandle->getOCResourceHandle(),\r
+ typeName\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to bind type to resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: bindInterfaceToResource0\r
+* Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0\r
+(JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)\r
+{\r
+ LOGI("OcPlatform_bindInterfaceToResource");\r
+ if (!jResourceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");\r
+ return;\r
+ }\r
+ std::string interfaceName;\r
+ if (jResourceInterfaceName)\r
+ {\r
+ interfaceName = env->GetStringUTFChars(jResourceInterfaceName, NULL);\r
+ }\r
+\r
+ JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(\r
+ env, jResourceHandle);\r
+ if (!jniOcResourceHandle) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::bindInterfaceToResource(\r
+ jniOcResourceHandle->getOCResourceHandle(),\r
+ interfaceName\r
+ );\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to bind interface to resource");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: startPresence0\r
+* Signature: (I)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0\r
+(JNIEnv *env, jclass clazz, jint ttl)\r
+{\r
+ LOGI("OcPlatform_startPresence");\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to start presence");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: stopPresence0\r
+* Signature: ()V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0\r
+(JNIEnv *env, jclass clazz)\r
+{\r
+ LOGI("OcPlatform_stopPresence");\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::stopPresence();\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "Failed to stop presence");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: subscribePresence0\r
+* Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;\r
+*/\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0\r
+(JNIEnv *env, jclass clazz, jstring jHost, jint jConnectivityType, jobject jListener)\r
+{\r
+ LOGD("OcPlatform_subscribePresence");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");\r
+ return nullptr;\r
+ }\r
+\r
+ JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);\r
+\r
+ SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result, const unsigned int nonce,\r
+ const std::string& hostAddress)\r
+ {\r
+ onPresenceListener->onPresenceCallback(result, nonce, hostAddress);\r
+ };\r
+\r
+ OCPlatform::OCPresenceHandle presenceHandle;\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::subscribePresence(\r
+ presenceHandle,\r
+ host,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ subscribeCallback);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "subscribe presence has failed");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ return nullptr;\r
+ }\r
+\r
+ JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);\r
+ jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);\r
+ jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);\r
+ if (!jPresenceHandle)\r
+ {\r
+ LOGE("Failed to create OcPresenceHandle");\r
+ delete jniPresenceHandle;\r
+ }\r
+\r
+ return jPresenceHandle;\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: subscribePresence1\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;I\r
+Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;\r
+*/\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceType, jint jConnectivityType, jobject jListener)\r
+{\r
+ LOGD("OcPlatform_subscribePresence1");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string resourceType;\r
+ if (jResourceType)\r
+ {\r
+ resourceType = env->GetStringUTFChars(jResourceType, NULL);\r
+ }\r
+ if (!jListener)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");\r
+ return nullptr;\r
+ }\r
+\r
+ JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);\r
+\r
+ SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,\r
+ const unsigned int nonce, const std::string& hostAddress)\r
+ {\r
+ onPresenceListener->onPresenceCallback(result, nonce, hostAddress);\r
+ };\r
+\r
+ OCPlatform::OCPresenceHandle presenceHandle;\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::subscribePresence(\r
+ presenceHandle,\r
+ host,\r
+ resourceType,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ subscribeCallback);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "subscribe presence has failed");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ return nullptr;\r
+ }\r
+\r
+ JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);\r
+ jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);\r
+ jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);\r
+ if (!jPresenceHandle)\r
+ {\r
+ LOGE("Failed to create OcPresenceHandle");\r
+ delete jniPresenceHandle;\r
+ }\r
+ return jPresenceHandle;\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: unsubscribePresence0\r
+* Signature: (Lorg/iotivity/base/OcPresenceHandle;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0\r
+(JNIEnv *env, jclass clazz, jobject jPresenceHandle)\r
+{\r
+ LOGD("OcPlatform_unsubscribePresence");\r
+ if (!jPresenceHandle)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");\r
+ return;\r
+ }\r
+ JniOcPresenceHandle* jniPresenceHandle = JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);\r
+ if (!jniPresenceHandle) return;\r
+\r
+ OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "unsubscribe presence has failed");\r
+ return;\r
+ }\r
+ jweak jwOnPresenceListener = jniPresenceHandle->getJniOnPresenceListener()->getJWListener();\r
+ if (jwOnPresenceListener)\r
+ {\r
+ RemoveOnPresenceListener(env, jwOnPresenceListener);\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: constructResourceObject0\r
+* Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)\r
+Lorg/iotivity/base/OcResource;\r
+*/\r
+JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0\r
+(JNIEnv *env, jclass clazz, jstring jHost, jstring jUri, jint jConnectivityType,\r
+jboolean jIsObservable, jobjectArray jResourceTypeArray, jobjectArray jInterfaceArray)\r
+{\r
+ LOGD("OcPlatform_constructResourceObject");\r
+ std::string host;\r
+ if (jHost)\r
+ {\r
+ host = env->GetStringUTFChars(jHost, NULL);\r
+ }\r
+ std::string uri;\r
+ if (jUri)\r
+ {\r
+ uri = env->GetStringUTFChars(jUri, NULL);\r
+ }\r
+ if (!jResourceTypeArray)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");\r
+ return nullptr;\r
+ }\r
+ if (!jInterfaceArray)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");\r
+ return nullptr;\r
+ }\r
+\r
+ std::vector<std::string> resourceTypes;\r
+ JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);\r
+\r
+ std::vector<std::string> interfaces;\r
+ JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);\r
+\r
+ std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(\r
+ host,\r
+ uri,\r
+ JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),\r
+ static_cast<bool>(jIsObservable),\r
+ resourceTypes,\r
+ interfaces);\r
+\r
+ if (!resource)\r
+ {\r
+ ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");\r
+ return nullptr;\r
+ }\r
+\r
+ JniOcResource *jniOcResource = new JniOcResource(resource);\r
+ jlong handle = reinterpret_cast<jlong>(jniOcResource);\r
+\r
+ jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);\r
+ if (!jResource)\r
+ {\r
+ delete jniOcResource;\r
+ return nullptr;\r
+ }\r
+ SetHandle<JniOcResource>(env, jResource, jniOcResource);\r
+ if (env->ExceptionCheck())\r
+ {\r
+ delete jniOcResource;\r
+ return nullptr;\r
+ }\r
+ return jResource;\r
+}\r
+\r
+/*\r
+* Class: org_iotivity_base_OcPlatform\r
+* Method: sendResponse0\r
+* Signature: (Lorg/iotivity/base/OcResourceResponse;)V\r
+*/\r
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0\r
+(JNIEnv *env, jclass clazz, jobject jResourceResponse)\r
+{\r
+ LOGD("OcPlatform_sendResponse");\r
+ if (!jResourceResponse)\r
+ {\r
+ ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");\r
+ return;\r
+ }\r
+\r
+ JniOcResourceResponse *jniResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(\r
+ env, jResourceResponse);\r
+ if (!jniResponse) return;\r
+\r
+ try\r
+ {\r
+ OCStackResult result = OCPlatform::sendResponse(jniResponse->getOCResourceResponse());\r
+\r
+ if (OC_STACK_OK != result)\r
+ {\r
+ ThrowOcException(result, "failed to send response");\r
+ }\r
+ }\r
+ catch (OCException& e)\r
+ {\r
+ LOGE("%s", e.reason().c_str());\r
+ ThrowOcException(OC_STACK_ERROR, e.reason().c_str());\r
+ }\r
+}
\ No newline at end of file