1 //******************************************************************
3 // Copyright 2015 Intel Corporation.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #include "JniOcPlatform.h"
22 #include "OCPlatform.h"
23 #include "JniOcResource.h"
24 #include "JniOcResourceHandle.h"
25 #include "JniOcPresenceHandle.h"
26 #include "JniOcResourceResponse.h"
27 #include "JniOcSecurity.h"
28 #include "JniOcDirectPairDevice.h"
30 #include "ocpayload.h"
34 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
36 JniOnResourceFoundListener *onResourceFoundListener = nullptr;
38 resourceFoundMapLock.lock();
40 for (auto it = onResourceFoundListenerMap.begin();
41 it != onResourceFoundListenerMap.end();
44 if (env->IsSameObject(jListener, it->first))
46 auto refPair = it->second;
47 onResourceFoundListener = refPair.first;
50 onResourceFoundListenerMap.insert(*it);
51 LOGD("OnResourceFoundListener: ref. count incremented");
56 if (!onResourceFoundListener)
58 onResourceFoundListener =
59 new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
60 jobject jgListener = env->NewGlobalRef(jListener);
62 onResourceFoundListenerMap.insert(
64 std::pair<JniOnResourceFoundListener*, int >>(
66 std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener,
68 LOGD("OnResourceFoundListener: new listener");
70 resourceFoundMapLock.unlock();
71 return onResourceFoundListener;
74 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
76 resourceFoundMapLock.lock();
78 for (auto it = onResourceFoundListenerMap.begin();
79 it != onResourceFoundListenerMap.end();
82 if (env->IsSameObject(jListener, it->first))
84 auto refPair = it->second;
85 if (refPair.second > 1)
89 onResourceFoundListenerMap.insert(*it);
90 LOGI("OnResourceFoundListener: ref. count decremented");
94 env->DeleteGlobalRef(it->first);
95 JniOnResourceFoundListener* listener = refPair.first;
97 onResourceFoundListenerMap.erase(it);
98 LOGI("OnResourceFoundListener removed");
103 resourceFoundMapLock.unlock();
106 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
108 JniOnDeviceInfoListener *onDeviceInfoListener = nullptr;
110 deviceInfoMapLock.lock();
112 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
114 if (env->IsSameObject(jListener, it->first))
116 auto refPair = it->second;
117 onDeviceInfoListener = refPair.first;
119 it->second = refPair;
120 onDeviceInfoListenerMap.insert(*it);
121 LOGD("OnDeviceInfoListener: ref. count incremented");
126 if (!onDeviceInfoListener)
128 onDeviceInfoListener =
129 new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
130 jobject jgListener = env->NewGlobalRef(jListener);
132 onDeviceInfoListenerMap.insert(
134 std::pair<JniOnDeviceInfoListener*, int>>(
136 std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
137 LOGI("OnDeviceInfoListener: new listener");
140 deviceInfoMapLock.unlock();
141 return onDeviceInfoListener;
144 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
146 deviceInfoMapLock.lock();
147 bool isFound = false;
148 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
150 if (env->IsSameObject(jListener, it->first))
152 auto refPair = it->second;
153 if (refPair.second > 1)
156 it->second = refPair;
157 onDeviceInfoListenerMap.insert(*it);
158 LOGI("OnDeviceInfoListener: ref. count decremented");
162 env->DeleteGlobalRef(it->first);
163 JniOnDeviceInfoListener* listener = refPair.first;
165 onDeviceInfoListenerMap.erase(it);
167 LOGI("OnDeviceInfoListener removed");
177 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
179 deviceInfoMapLock.unlock();
182 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
184 JniOnPlatformInfoListener *onPlatformInfoListener = nullptr;
186 platformInfoMapLock.lock();
188 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
190 if (env->IsSameObject(jListener, it->first))
192 auto refPair = it->second;
193 onPlatformInfoListener = refPair.first;
195 it->second = refPair;
196 onPlatformInfoListenerMap.insert(*it);
197 LOGD("OnPlatformInfoListener: ref. count incremented");
202 if (!onPlatformInfoListener)
204 onPlatformInfoListener =
205 new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
206 jobject jgListener = env->NewGlobalRef(jListener);
208 onPlatformInfoListenerMap.insert(
209 std::pair<jobject, std::pair<JniOnPlatformInfoListener*, int>>(
211 std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
212 LOGI("OnPlatformInfoListener: new listener");
215 platformInfoMapLock.unlock();
216 return onPlatformInfoListener;
219 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
221 platformInfoMapLock.lock();
222 bool isFound = false;
223 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
225 if (env->IsSameObject(jListener, it->first))
227 auto refPair = it->second;
228 if (refPair.second > 1)
231 it->second = refPair;
232 onPlatformInfoListenerMap.insert(*it);
233 LOGI("OnPlatformInfoListener: ref. count decremented");
237 env->DeleteGlobalRef(it->first);
238 JniOnPlatformInfoListener* listener = refPair.first;
240 onPlatformInfoListenerMap.erase(it);
242 LOGI("OnPlatformInfoListener removed");
252 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
254 platformInfoMapLock.unlock();
257 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
259 JniOnPresenceListener *onPresenceListener = nullptr;
261 presenceMapLock.lock();
263 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
265 if (env->IsSameObject(jListener, it->first))
267 auto refPair = it->second;
268 onPresenceListener = refPair.first;
270 it->second = refPair;
271 onPresenceListenerMap.insert(*it);
272 LOGD("OnPresenceListener: ref. count incremented");
276 if (!onPresenceListener)
278 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
279 jobject jgListener = env->NewGlobalRef(jListener);
280 onPresenceListenerMap.insert(
281 std::pair<jobject, std::pair<JniOnPresenceListener*, int>>(
283 std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
284 LOGI("OnPresenceListener: new listener");
286 presenceMapLock.unlock();
287 return onPresenceListener;
290 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
292 presenceMapLock.lock();
293 bool isFound = false;
294 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
296 if (env->IsSameObject(jListener, it->first))
298 auto refPair = it->second;
299 if (refPair.second > 1)
302 it->second = refPair;
303 onPresenceListenerMap.insert(*it);
304 LOGI("OnPresenceListener: ref. count decremented");
308 env->DeleteGlobalRef(it->first);
309 JniOnPresenceListener* listener = refPair.first;
311 onPresenceListenerMap.erase(it);
312 LOGI("OnPresenceListener is removed");
320 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
322 presenceMapLock.unlock();
325 JniOnDPDevicesFoundListener* AddOnDPDevicesFoundListener(JNIEnv* env, jobject jListener)
327 JniOnDPDevicesFoundListener *onDPDeviceListener = nullptr;
329 dpDevicesFoundListenerMapLock.lock();
331 for (auto it = onDPDevicesFoundListenerMap.begin(); it !=
332 onDPDevicesFoundListenerMap.end(); ++it)
334 if (env->IsSameObject(jListener, it->first))
336 auto refPair = it->second;
337 onDPDeviceListener = refPair.first;
339 it->second = refPair;
340 onDPDevicesFoundListenerMap.insert(*it);
341 LOGD("onDPDeviceListener: ref. count incremented");
345 if (!onDPDeviceListener)
347 onDPDeviceListener = new JniOnDPDevicesFoundListener(env, jListener,
348 RemoveOnDPDevicesFoundListener);
349 jobject jgListener = env->NewGlobalRef(jListener);
350 onDPDevicesFoundListenerMap.insert(
351 std::pair<jobject, std::pair<JniOnDPDevicesFoundListener*, int>>(
353 std::pair<JniOnDPDevicesFoundListener*, int>(onDPDeviceListener, 1)));
354 LOGI("onDPDeviceListener: new listener");
356 dpDevicesFoundListenerMapLock.unlock();
357 return onDPDeviceListener;
360 void RemoveOnDPDevicesFoundListener(JNIEnv* env, jobject jListener)
362 dpDevicesFoundListenerMapLock.lock();
363 bool isFound = false;
364 for (auto it = onDPDevicesFoundListenerMap.begin(); it !=
365 onDPDevicesFoundListenerMap.end(); ++it)
367 if (env->IsSameObject(jListener, it->first))
369 auto refPair = it->second;
370 if (refPair.second > 1)
373 it->second = refPair;
374 onDPDevicesFoundListenerMap.insert(*it);
375 LOGI("onDPDeviceListener: ref. count decremented");
379 env->DeleteGlobalRef(it->first);
380 JniOnDPDevicesFoundListener* listener = refPair.first;
382 onDPDevicesFoundListenerMap.erase(it);
383 LOGI("onDPDeviceListener is removed");
391 ThrowOcException(JNI_EXCEPTION, "onDPDeviceListener not found");
393 dpDevicesFoundListenerMapLock.unlock();
396 JniOnDirectPairingListener* AddOnDirectPairingListener(JNIEnv* env, jobject jListener)
398 JniOnDirectPairingListener *onDirectPairingListener = nullptr;
400 directPairingListenerMapLock.lock();
402 for (auto it = directPairingListenerMap.begin(); it !=
403 directPairingListenerMap.end(); ++it)
405 if (env->IsSameObject(jListener, it->first))
407 auto refPair = it->second;
408 onDirectPairingListener = refPair.first;
410 it->second = refPair;
411 directPairingListenerMap.insert(*it);
412 LOGD("onDirectPairingListener: ref. count incremented");
416 if (!onDirectPairingListener)
418 onDirectPairingListener = new JniOnDirectPairingListener(env, jListener,
419 RemoveOnDirectPairingListener);
420 jobject jgListener = env->NewGlobalRef(jListener);
421 directPairingListenerMap.insert(
422 std::pair<jobject, std::pair<JniOnDirectPairingListener*, int>>(
424 std::pair<JniOnDirectPairingListener*, int>(onDirectPairingListener, 1)));
425 LOGI("onDirectPairingListener: new listener");
427 directPairingListenerMapLock.unlock();
428 return onDirectPairingListener;
431 void RemoveOnDirectPairingListener(JNIEnv* env, jobject jListener)
433 directPairingListenerMapLock.lock();
434 bool isFound = false;
435 for (auto it = directPairingListenerMap.begin(); it !=
436 directPairingListenerMap.end(); ++it)
438 if (env->IsSameObject(jListener, it->first))
440 auto refPair = it->second;
441 if (refPair.second > 1)
444 it->second = refPair;
445 directPairingListenerMap.insert(*it);
446 LOGI("onDirectPairingListener: ref. count decremented");
450 env->DeleteGlobalRef(it->first);
451 JniOnDirectPairingListener* listener = refPair.first;
453 directPairingListenerMap.erase(it);
454 LOGI("onDirectPairingListener is removed");
462 ThrowOcException(JNI_EXCEPTION, "onDirectPairingListener not found");
464 directPairingListenerMapLock.unlock();
467 JniOnPublishResourceListener* AddOnPublishResourceListener(JNIEnv* env, jobject jListener)
475 JniOnPublishResourceListener *onPublishResourceListener = nullptr;
477 publishResourceListenerMapLock.lock();
479 for (auto it = onPublishResourceListenerMap.begin(); it !=
480 onPublishResourceListenerMap.end(); ++it)
482 if (env->IsSameObject(jListener, it->first))
484 auto refPair = it->second;
485 onPublishResourceListener = refPair.first;
487 it->second = refPair;
488 onPublishResourceListenerMap.insert(*it);
489 LOGD("onPublishResourceListener: ref. count incremented");
493 if (!onPublishResourceListener)
495 onPublishResourceListener = new JniOnPublishResourceListener(env, jListener,
496 RemoveOnPublishResourceListener);
497 jobject jgListener = env->NewGlobalRef(jListener);
498 onPublishResourceListenerMap.insert(
499 std::pair<jobject, std::pair<JniOnPublishResourceListener*, int>>(
501 std::pair<JniOnPublishResourceListener*, int>(onPublishResourceListener, 1)));
502 LOGI("onPublishResourceListener: new listener");
504 publishResourceListenerMapLock.unlock();
505 return onPublishResourceListener;
508 void RemoveOnPublishResourceListener(JNIEnv* env, jobject jListener)
512 ThrowOcException(JNI_EXCEPTION, "env is null");
516 publishResourceListenerMapLock.lock();
517 bool isFound = false;
518 for (auto it = onPublishResourceListenerMap.begin(); it !=
519 onPublishResourceListenerMap.end(); ++it)
521 if (env->IsSameObject(jListener, it->first))
523 auto refPair = it->second;
524 if (refPair.second > 1)
527 it->second = refPair;
528 onPublishResourceListenerMap.insert(*it);
529 LOGI("onPublishResourceListener: ref. count decremented");
533 env->DeleteGlobalRef(it->first);
534 JniOnPublishResourceListener* listener = refPair.first;
536 onPublishResourceListenerMap.erase(it);
537 LOGI("onPublishResourceListener is removed");
545 ThrowOcException(JNI_EXCEPTION, "onPublishResourceListener not found");
547 publishResourceListenerMapLock.unlock();
550 JniOnDeleteResourceListener* AddOnDeleteResourceListener(JNIEnv* env, jobject jListener)
558 JniOnDeleteResourceListener *onDeleteResourceListener = nullptr;
560 deleteResourceListenerMapLock.lock();
562 for (auto it = onDeleteResourceListenerMap.begin(); it !=
563 onDeleteResourceListenerMap.end(); ++it)
565 if (env->IsSameObject(jListener, it->first))
567 auto refPair = it->second;
568 onDeleteResourceListener = refPair.first;
570 it->second = refPair;
571 onDeleteResourceListenerMap.insert(*it);
572 LOGD("onDeleteResourceListener: ref. count incremented");
576 if (!onDeleteResourceListener)
578 onDeleteResourceListener = new JniOnDeleteResourceListener(env, jListener,
579 RemoveOnDeleteResourceListener);
580 jobject jgListener = env->NewGlobalRef(jListener);
581 onDeleteResourceListenerMap.insert(
582 std::pair<jobject, std::pair<JniOnDeleteResourceListener*, int>>(
584 std::pair<JniOnDeleteResourceListener*, int>(onDeleteResourceListener, 1)));
585 LOGI("onDeleteResourceListener: new listener");
587 deleteResourceListenerMapLock.unlock();
588 return onDeleteResourceListener;
591 void RemoveOnDeleteResourceListener(JNIEnv* env, jobject jListener)
595 ThrowOcException(JNI_EXCEPTION, "env is null");
599 deleteResourceListenerMapLock.lock();
600 bool isFound = false;
601 for (auto it = onDeleteResourceListenerMap.begin(); it !=
602 onDeleteResourceListenerMap.end(); ++it)
604 if (env->IsSameObject(jListener, it->first))
606 auto refPair = it->second;
607 if (refPair.second > 1)
610 it->second = refPair;
611 onDeleteResourceListenerMap.insert(*it);
612 LOGI("onDeleteResourceListener: ref. count decremented");
616 env->DeleteGlobalRef(it->first);
617 JniOnDeleteResourceListener* listener = refPair.first;
619 onDeleteResourceListenerMap.erase(it);
620 LOGI("onDeleteResourceListener is removed");
628 ThrowOcException(JNI_EXCEPTION, "onDeleteResourceListener not found");
630 deleteResourceListenerMapLock.unlock();
634 * Class: org_iotivity_base_OcPlatform
636 * Signature: (IILjava/lang/String;II)V
638 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
639 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort,
640 jint jQOS, jstring jDbPath)
642 LOGI("OcPlatform_configure");
644 std::string ipAddress;
648 ipAddress = env->GetStringUTFChars(jIpAddress, nullptr);
652 dbfile = env->GetStringUTFChars(jDbPath, nullptr);
653 JniOcSecurity::StoreDbPath(dbfile);
658 port = static_cast<uint16_t>(jPort);
662 JniUtils::getServiceType(env, jServiceType),
663 JniUtils::getModeType(env, jModeType),
666 JniUtils::getQOS(env, static_cast<int>(jQOS)),
667 JniOcSecurity::getOCPersistentStorage()
669 OCPlatform::Configure(cfg);
673 * Class: org_iotivity_base_OcPlatform
674 * Method: notifyAllObservers0
675 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
677 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
678 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
680 LOGI("OcPlatform_notifyAllObservers");
681 if (!jResourceHandle)
683 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
687 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
688 env, jResourceHandle);
689 if (!jniOcResourceHandle)
696 OCStackResult result =
697 OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
699 if (OC_STACK_OK != result)
701 ThrowOcException(result, "Failed to notify all observers");
705 catch (OCException& e)
707 LOGE("%s", e.reason().c_str());
708 ThrowOcException(e.code(), e.reason().c_str());
713 * Class: org_iotivity_base_OcPlatform
714 * Method: notifyAllObservers1
715 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
717 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
718 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
720 LOGI("OcPlatform_notifyAllObservers1");
722 if (!jResourceHandle)
724 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
728 JniOcResourceHandle* jniOcResourceHandle =
729 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
730 if (!jniOcResourceHandle)
736 OCStackResult result = OCPlatform::notifyAllObservers(
737 jniOcResourceHandle->getOCResourceHandle(),
738 JniUtils::getQOS(env, static_cast<int>(jQoS)));
740 if (OC_STACK_OK != result)
742 ThrowOcException(result, "Failed to notify all observers");
746 catch (OCException& e)
748 LOGE("%s", e.reason().c_str());
749 ThrowOcException(e.code(), e.reason().c_str());
754 * Class: org_iotivity_base_OcPlatform
755 * Method: notifyListOfObservers2
756 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
758 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2(
761 jobject jResourceHandle,
762 jbyteArray jObservationIdArr,
763 jobject jResourceResponse)
765 LOGD("OcPlatform_notifyListOfObservers2");
766 if (!jResourceHandle)
768 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
771 if (!jObservationIdArr)
773 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
776 if (!jResourceResponse)
778 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
782 JniOcResourceHandle* jniOcResourceHandle =
783 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
784 if (!jniOcResourceHandle)
789 JniOcResourceResponse* jniOcResourceResponse =
790 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
791 if (!jniOcResourceResponse)
796 int len = env->GetArrayLength(jObservationIdArr);
797 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
799 ObservationIds observationIds;
800 for (int i = 0; i < len; ++i)
802 observationIds.push_back(bArr[i]);
805 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
809 OCStackResult result = OCPlatform::notifyListOfObservers(
810 jniOcResourceHandle->getOCResourceHandle(),
812 jniOcResourceResponse->getOCResourceResponse());
814 if (OC_STACK_OK != result)
816 ThrowOcException(result, "Failed to notify all observers");
819 catch (OCException& e)
821 LOGE("%s", e.reason().c_str());
822 ThrowOcException(e.code(), e.reason().c_str());
827 * Class: org_iotivity_base_OcPlatform
828 * Method: notifyListOfObservers3
829 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
831 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3(
834 jobject jResourceHandle,
835 jbyteArray jObservationIdArr,
836 jobject jResourceResponse,
839 LOGD("OcPlatform_notifyListOfObservers3");
840 if (!jResourceHandle)
842 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
845 if (!jObservationIdArr)
847 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
850 if (!jResourceResponse)
852 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
856 JniOcResourceHandle* jniOcResourceHandle =
857 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
858 if (!jniOcResourceHandle)
863 JniOcResourceResponse* jniOcResourceResponse =
864 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
865 if (!jniOcResourceResponse)
870 int len = env->GetArrayLength(jObservationIdArr);
871 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
873 ObservationIds observationIds;
874 for (int i = 0; i < len; ++i)
876 observationIds.push_back(bArr[i]);
879 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
883 OCStackResult result = OCPlatform::notifyListOfObservers(
884 jniOcResourceHandle->getOCResourceHandle(),
886 jniOcResourceResponse->getOCResourceResponse(),
887 JniUtils::getQOS(env, static_cast<int>(jQoS)));
889 if (OC_STACK_OK != result)
891 ThrowOcException(result, "Failed to notify all observers");
894 catch (OCException& e)
896 LOGE("%s", e.reason().c_str());
897 ThrowOcException(e.code(), e.reason().c_str());
902 * Class: org_iotivity_base_OcPlatform
903 * Method: findResource0
904 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
906 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0(
910 jstring jResourceUri,
911 jint jConnectivityType,
914 LOGD("OcPlatform_findResource");
918 host = env->GetStringUTFChars(jHost, nullptr);
920 std::string resourceUri;
923 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
927 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
931 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
933 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
935 onResFoundListener->foundResourceCallback(resource);
938 FindErrorCallback findErrorCallback = [onResFoundListener](const std::string& uri, const int eCode)
940 onResFoundListener->findResourceErrorCallback(uri, eCode);
945 OCStackResult result = OCPlatform::findResource(
948 static_cast<OCConnectivityType>(jConnectivityType),
952 if (OC_STACK_OK != result)
954 ThrowOcException(result, "Find resource has failed");
958 catch (OCException& e)
960 LOGE("%s", e.reason().c_str());
961 ThrowOcException(e.code(), e.reason().c_str());
966 * Class: org_iotivity_base_OcPlatform
967 * Method: findResource1
968 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
970 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1(
974 jstring jResourceUri,
975 jint jConnectivityType,
979 LOGD("OcPlatform_findResource");
983 host = env->GetStringUTFChars(jHost, nullptr);
985 std::string resourceUri;
988 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
992 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
995 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
997 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
999 onResFoundListener->foundResourceCallback(resource);
1002 FindErrorCallback findErrorCallback = [onResFoundListener](const std::string& uri, const int eCode)
1004 onResFoundListener->findResourceErrorCallback(uri, eCode);
1009 OCStackResult result = OCPlatform::findResource(
1012 static_cast<OCConnectivityType>(jConnectivityType),
1015 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1017 if (OC_STACK_OK != result)
1019 ThrowOcException(result, "Find resource has failed");
1023 catch (OCException& e)
1025 LOGE("%s", e.reason().c_str());
1026 ThrowOcException(e.code(), e.reason().c_str());
1031 * Class: org_iotivity_base_OcPlatform
1032 * Method: findDirectPairingDevices
1033 * Signature: (ILorg/iotivity/base/OcPlatform/FindDirectPairingListener;)V
1035 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findDirectPairingDevices
1036 (JNIEnv * env, jclass clazz, jint jTimeout, jobject jListener)
1038 LOGD("OcPlatform_findDirectPairingDevices");
1042 ThrowOcException(OC_STACK_INVALID_PARAM, "onDPDevicesFoundListener cannot be null");
1045 JniOnDPDevicesFoundListener *onDPDevsFoundListener = AddOnDPDevicesFoundListener(env,
1048 GetDirectPairedCallback getDirectPairedCallback =
1049 [onDPDevsFoundListener](PairedDevices pairingDevList)
1051 onDPDevsFoundListener->directPairingDevicesCallback(pairingDevList,
1052 DPFunc::FIND_DIRECT_PAIRED_DEV_LIST);
1057 OCStackResult result = OCPlatform::findDirectPairingDevices(jTimeout,
1058 getDirectPairedCallback);
1059 if (OC_STACK_OK != result)
1061 ThrowOcException(result, "OCPlatform::findDirectPairingDevices has failed");
1065 catch (OCException& e)
1067 LOGE("%s", e.reason().c_str());
1068 ThrowOcException(e.code(), e.reason().c_str());
1073 * Class: org_iotivity_base_OcPlatform
1074 * Method: getDirectPairedDevices
1075 * Signature: (Lorg/iotivity/base/OcDirectPairDevice/GetDirectPairedListener;)V
1077 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDirectPairedDevices
1078 (JNIEnv *env, jclass jclazz, jobject jListener)
1080 LOGD("OcPlatform_getDirectPairedDevices");
1084 ThrowOcException(OC_STACK_INVALID_PARAM, "getPairedDevList Callback cannot be null");
1087 JniOnDPDevicesFoundListener *onGetPairedDevicesListener = AddOnDPDevicesFoundListener(env,
1090 GetDirectPairedCallback getDirectPairedCallback =
1091 [onGetPairedDevicesListener](PairedDevices pairedDevList)
1093 onGetPairedDevicesListener->directPairingDevicesCallback(pairedDevList,
1094 DPFunc::GET_PAIRED_DEV_LIST);
1099 OCStackResult result = OCPlatform::getDirectPairedDevices(getDirectPairedCallback);
1100 if (OC_STACK_OK != result)
1102 ThrowOcException(result, "OcDirectPairDevice_getDirectPairedDevices");
1106 catch (OCException& e)
1108 LOGE("%s", e.reason().c_str());
1109 ThrowOcException(e.code(), e.reason().c_str());
1114 * Class: org_iotivity_base_OcPlatform
1115 * Method: doDirectPairing
1116 * Signature: (Lorg/iotivity/base/OcDirectPairDevice;Lorg/iotivity/base/OcPrmType;
1117 * Ljava/lang/String;Lorg/iotivity/base/OcDirectPairDevice/DirectPairingListener;)V
1119 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_doDirectPairing0
1120 (JNIEnv *env, jclass clazz, jobject jpeer, jint jprmType, jstring jpin, jobject jListener)
1122 LOGD("OcPlatform_doDirectPairing");
1126 ThrowOcException(OC_STACK_INVALID_PARAM, "doDirectPairing Callback cannot be null");
1131 ThrowOcException(OC_STACK_INVALID_PARAM, "Peer cannot be null");
1135 JniOnDirectPairingListener *onDirectPairingListener = AddOnDirectPairingListener(env,
1138 DirectPairingCallback DirectPairingCB =
1139 [onDirectPairingListener](std::shared_ptr<OCDirectPairing> dpDev, OCStackResult result)
1141 onDirectPairingListener->doDirectPairingCB(dpDev, result);
1144 JniOcDirectPairDevice *dev = JniOcDirectPairDevice::getJniOcDirectPairDevicePtr(env, jpeer);
1150 std::string pin = env->GetStringUTFChars(jpin, 0);
1154 OCStackResult result = OCPlatform::doDirectPairing(dev->getPtr(), (OCPrm_t)jprmType,
1155 pin, DirectPairingCB);
1156 if (OC_STACK_OK != result)
1158 ThrowOcException(result, "OcPlatform_oDirectPairing");
1162 catch (OCException& e)
1164 LOGE("%s", e.reason().c_str());
1165 ThrowOcException(e.code(), e.reason().c_str());
1170 * Class: org_iotivity_base_OcPlatform
1171 * Method: getDeviceInfo0
1172 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
1174 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0(
1178 jstring jResourceUri,
1179 jint jConnectivityType,
1182 LOGD("OcPlatform_getDeviceInfo0");
1186 host = env->GetStringUTFChars(jHost, nullptr);
1188 std::string resourceUri;
1191 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1195 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
1198 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
1200 FindDeviceCallback findDeviceCallback =
1201 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
1203 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
1208 OCStackResult result = OCPlatform::getDeviceInfo(
1211 static_cast<OCConnectivityType>(jConnectivityType),
1212 findDeviceCallback);
1214 if (OC_STACK_OK != result)
1216 ThrowOcException(result, "Find device has failed");
1219 catch (OCException& e)
1221 LOGE("%s", e.reason().c_str());
1222 ThrowOcException(e.code(), e.reason().c_str());
1227 * Class: org_iotivity_base_OcPlatform
1228 * Method: getDeviceInfo1
1229 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
1231 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1(
1235 jstring jResourceUri,
1236 jint jConnectivityType,
1240 LOGD("OcPlatform_getDeviceInfo1");
1244 host = env->GetStringUTFChars(jHost, nullptr);
1246 std::string resourceUri;
1249 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1253 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
1256 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
1258 FindDeviceCallback findDeviceCallback =
1259 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
1261 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
1266 OCStackResult result = OCPlatform::getDeviceInfo(
1269 static_cast<OCConnectivityType>(jConnectivityType),
1271 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1273 if (OC_STACK_OK != result)
1275 ThrowOcException(result, "Find device has failed");
1278 catch (OCException& e)
1280 LOGE("%s", e.reason().c_str());
1281 ThrowOcException(e.code(), e.reason().c_str());
1286 * Class: org_iotivity_base_OcPlatform
1287 * Method: getPlatformInfo0
1288 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
1290 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0(
1294 jstring jResourceUri,
1295 jint jConnectivityType,
1298 LOGD("OcPlatform_getPlatformInfo0");
1302 host = env->GetStringUTFChars(jHost, nullptr);
1304 std::string resourceUri;
1307 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1311 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
1314 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
1316 FindPlatformCallback findPlatformCallback =
1317 [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
1319 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
1324 OCStackResult result = OCPlatform::getPlatformInfo(
1327 static_cast<OCConnectivityType>(jConnectivityType),
1328 findPlatformCallback);
1330 if (OC_STACK_OK != result)
1332 ThrowOcException(result, "Find platform has failed");
1335 catch (OCException& e)
1337 LOGE("%s", e.reason().c_str());
1338 ThrowOcException(e.code(), e.reason().c_str());
1343 * Class: org_iotivity_base_OcPlatform
1344 * Method: getPlatformInfo1
1345 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
1347 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1(
1351 jstring jResourceUri,
1352 jint jConnectivityType,
1356 LOGD("OcPlatform_getPlatformInfo1");
1360 host = env->GetStringUTFChars(jHost, nullptr);
1362 std::string resourceUri;
1365 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1369 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
1372 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
1374 FindDeviceCallback findDeviceCallback =
1375 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
1377 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
1382 OCStackResult result = OCPlatform::getPlatformInfo(
1385 static_cast<OCConnectivityType>(jConnectivityType),
1387 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1389 if (OC_STACK_OK != result)
1391 ThrowOcException(result, "Find platform has failed");
1394 catch (OCException& e)
1396 LOGE("%s", e.reason().c_str());
1397 ThrowOcException(e.code(), e.reason().c_str());
1402 * Class: org_iotivity_base_OcPlatform
1403 * Method: registerResource0
1404 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
1406 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0(
1407 JNIEnv *env, jclass clazz, jobject jResource)
1409 LOGD("OcPlatform_registerResource");
1412 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
1415 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
1421 OCResourceHandle resourceHandle;
1424 OCStackResult result = OCPlatform::registerResource(
1426 resource->getOCResource());
1428 if (OC_STACK_OK != result)
1430 ThrowOcException(result, "register resource");
1433 catch (OCException& e)
1435 LOGE("%s", e.reason().c_str());
1436 ThrowOcException(e.code(), e.reason().c_str());
1439 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1440 jlong handle = reinterpret_cast<jlong>(jniHandle);
1441 jobject jResourceHandle =
1442 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1444 if (!jResourceHandle)
1446 LOGE("Failed to create OcResourceHandle");
1449 return jResourceHandle;
1453 * Class: org_iotivity_base_OcPlatform
1454 * Method: registerResource1
1455 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
1457 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1(
1460 jstring jResourceUri,
1461 jstring jResourceTypeName,
1462 jstring jResourceInterface,
1463 jobject jListener, jint jResourceProperty)
1465 LOGI("OcPlatform_registerResource1");
1466 std::string resourceUri;
1469 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1471 std::string resourceTypeName;
1472 if (jResourceTypeName)
1474 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1476 std::string resourceInterface;
1477 if (jResourceInterface)
1479 resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
1481 JniEntityHandler* entityHandler = NULL;
1482 EntityHandler handleEntityCallback = NULL;
1485 entityHandler = new JniEntityHandler(env, jListener);
1486 handleEntityCallback =
1487 [entityHandler](const std::shared_ptr<OCResourceRequest> request) -> OCEntityHandlerResult
1489 return entityHandler->handleEntity(request);
1493 OCResourceHandle resourceHandle;
1496 OCStackResult result = OCPlatform::registerResource(
1501 handleEntityCallback,
1502 static_cast<int>(jResourceProperty));
1504 if (OC_STACK_OK != result)
1506 delete entityHandler;
1507 ThrowOcException(result, "register resource");
1511 catch (OCException& e)
1513 LOGE("%s", e.reason().c_str());
1514 delete entityHandler;
1515 ThrowOcException(e.code(), e.reason().c_str());
1519 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1520 jlong handle = reinterpret_cast<jlong>(jniHandle);
1521 jobject jResourceHandle =
1522 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1523 if (!jResourceHandle)
1525 LOGE("Failed to create OcResourceHandle");
1529 return jResourceHandle;
1533 * Class: org_iotivity_base_OcPlatform
1534 * Method: registerDeviceInfo0
1535 * 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
1537 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0(
1540 jstring jDeviceName,
1541 jobjectArray jDeviceTypes)
1543 LOGI("OcPlatform_registerDeviceInfo");
1547 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceName cannot be null");
1553 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceTypes cannot be null");
1557 OCDeviceInfo deviceInfo;
1560 DuplicateString(&deviceInfo.deviceName, env->GetStringUTFChars(jDeviceName, nullptr));
1561 deviceInfo.types = NULL;
1563 jsize len = env->GetArrayLength(jDeviceTypes);
1564 for (jsize i = 0; i < len; ++i)
1566 jstring jStr = (jstring)env->GetObjectArrayElement(jDeviceTypes, i);
1569 delete deviceInfo.deviceName;
1570 ThrowOcException(OC_STACK_INVALID_PARAM, "device type cannot be null");
1574 OCResourcePayloadAddStringLL(&deviceInfo.types, env->GetStringUTFChars(jStr, nullptr));
1575 if (env->ExceptionCheck())
1577 delete deviceInfo.deviceName;
1581 env->DeleteLocalRef(jStr);
1584 catch (std::exception &e)
1586 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1592 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1594 delete deviceInfo.deviceName;
1596 if (OC_STACK_OK != result)
1598 ThrowOcException(result, "Failed to register device info");
1602 catch (OCException& e)
1604 LOGE("%s", e.reason().c_str());
1605 ThrowOcException(e.code(), e.reason().c_str());
1610 * Class: org_iotivity_base_OcPlatform
1611 * Method: registerPlatformInfo0
1612 * 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;)V
1614 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0(
1617 jstring jPlatformID,
1618 jstring jManufacturerName,
1619 jstring jManufacturerUrl,
1620 jstring jModelNumber,
1621 jstring jDateOfManufacture,
1622 jstring jPlatformVersion,
1623 jstring jOperatingSystemVersion,
1624 jstring jHardwareVersion,
1625 jstring jFirmwareVersion,
1626 jstring jSupportUrl,
1627 jstring jSystemTime)
1629 LOGI("OcPlatform_registerPlatformInfo");
1632 std::string platformID;
1633 std::string manufacturerName;
1634 std::string manufacturerUrl;
1635 std::string modelNumber;
1636 std::string dateOfManufacture;
1637 std::string platformVersion;
1638 std::string operatingSystemVersion;
1639 std::string hardwareVersion;
1640 std::string firmwareVersion;
1641 std::string supportUrl;
1642 std::string systemTime;
1646 platformID = env->GetStringUTFChars(jPlatformID, nullptr);
1648 if (jManufacturerName)
1650 manufacturerName = env->GetStringUTFChars(jManufacturerName, nullptr);
1652 if (jManufacturerUrl)
1654 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, nullptr);
1658 modelNumber = env->GetStringUTFChars(jModelNumber, nullptr);
1660 if (jDateOfManufacture)
1662 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, nullptr);
1664 if (jPlatformVersion)
1666 platformVersion = env->GetStringUTFChars(jPlatformVersion, nullptr);
1668 if (jOperatingSystemVersion)
1670 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, nullptr);
1672 if (jHardwareVersion)
1674 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, nullptr);
1676 if (jFirmwareVersion)
1678 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, nullptr);
1682 supportUrl = env->GetStringUTFChars(jSupportUrl, nullptr);
1686 systemTime = env->GetStringUTFChars(jSystemTime, nullptr);
1689 OCPlatformInfo platformInfo;
1692 DuplicateString(&platformInfo.platformID, platformID);
1693 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1694 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1695 DuplicateString(&platformInfo.modelNumber, modelNumber);
1696 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1697 DuplicateString(&platformInfo.platformVersion, platformVersion);
1698 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1699 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1700 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1701 DuplicateString(&platformInfo.supportUrl, supportUrl);
1702 DuplicateString(&platformInfo.systemTime, systemTime);
1704 catch (std::exception &e)
1706 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1710 // __android_log_print(ANDROID_LOG_INFO, "Rahul", "platformID = %s", platformID);
1713 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1715 delete platformInfo.platformID;
1716 delete platformInfo.manufacturerName;
1717 delete platformInfo.manufacturerUrl;
1718 delete platformInfo.modelNumber;
1719 delete platformInfo.dateOfManufacture;
1720 delete platformInfo.platformVersion;
1721 delete platformInfo.operatingSystemVersion;
1722 delete platformInfo.hardwareVersion;
1723 delete platformInfo.firmwareVersion;
1724 delete platformInfo.supportUrl;
1725 delete platformInfo.systemTime;
1727 if (OC_STACK_OK != result)
1729 ThrowOcException(result, "Failed to register platform info");
1733 catch (OCException& e)
1735 LOGE("Error is due to %s", e.reason().c_str());
1736 ThrowOcException(e.code(), e.reason().c_str());
1741 * Class: org_iotivity_base_OcPlatform
1742 * Method: unregisterResource0
1743 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1745 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0(
1746 JNIEnv *env, jclass clazz, jobject jResourceHandle)
1748 LOGI("OcPlatform_unregisterResource");
1749 if (!jResourceHandle)
1751 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1754 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1755 env, jResourceHandle);
1756 if (!jniOcResourceHandle)
1763 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1764 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1765 if (OC_STACK_OK != result)
1767 ThrowOcException(result, "Failed to unregister resource");
1770 catch (OCException& e)
1772 LOGE("%s", e.reason().c_str());
1773 ThrowOcException(e.code(), e.reason().c_str());
1778 * Class: org_iotivity_base_OcPlatform
1779 * Method: bindResource0
1780 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1782 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1783 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1785 LOGI("OcPlatform_bindResource");
1786 if (!jResourceCollectionHandle)
1788 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1791 if (!jResourceHandle)
1793 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1796 JniOcResourceHandle* jniOcResourceCollectionHandle =
1797 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1798 if (!jniOcResourceCollectionHandle)
1803 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1804 env, jResourceHandle);
1805 if (!jniOcResourceHandle)
1812 OCStackResult result = OCPlatform::bindResource(
1813 jniOcResourceCollectionHandle->getOCResourceHandle(),
1814 jniOcResourceHandle->getOCResourceHandle()
1817 if (OC_STACK_OK != result)
1819 ThrowOcException(result, "Failed to bind resource");
1822 catch (OCException& e)
1824 LOGE("%s", e.reason().c_str());
1825 ThrowOcException(e.code(), e.reason().c_str());
1830 * Class: org_iotivity_base_OcPlatform
1831 * Method: bindResources0
1832 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1834 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0(
1837 jobject jResourceCollectionHandle,
1838 jobjectArray jResourceHandleArray)
1840 LOGI("OcPlatform_bindResources");
1842 if (!jResourceCollectionHandle)
1844 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1847 if (!jResourceHandleArray)
1849 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1853 JniOcResourceHandle* jniOcResourceCollectionHandle =
1854 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1855 if (!jniOcResourceCollectionHandle)
1860 std::vector<OCResourceHandle> resourceHandleList;
1861 int len = env->GetArrayLength(jResourceHandleArray);
1862 for (int i = 0; i < len; ++i)
1864 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1865 if (!jResourceHandle)
1867 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1871 JniOcResourceHandle* jniOcResourceHandle =
1872 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1873 if (!jniOcResourceHandle)
1878 resourceHandleList.push_back(
1879 jniOcResourceHandle->getOCResourceHandle());
1884 OCStackResult result = OCPlatform::bindResources(
1885 jniOcResourceCollectionHandle->getOCResourceHandle(),
1889 if (OC_STACK_OK != result)
1891 ThrowOcException(result, "Failed to bind resources");
1894 catch (OCException& e)
1896 LOGE("%s", e.reason().c_str());
1897 ThrowOcException(e.code(), e.reason().c_str());
1902 * Class: org_iotivity_base_OcPlatform
1903 * Method: unbindResource0
1904 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1906 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0(
1909 jobject jResourceCollectionHandle,
1910 jobject jResourceHandle)
1912 LOGI("OcPlatform_unbindResource");
1913 if (!jResourceCollectionHandle)
1915 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1918 if (!jResourceHandle)
1920 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1924 JniOcResourceHandle* jniOcResourceCollectionHandle =
1925 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1926 if (!jniOcResourceCollectionHandle)
1931 JniOcResourceHandle* jniOcResourceHandle =
1932 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1933 if (!jniOcResourceHandle)
1940 OCStackResult result = OCPlatform::unbindResource(
1941 jniOcResourceCollectionHandle->getOCResourceHandle(),
1942 jniOcResourceHandle->getOCResourceHandle());
1944 if (OC_STACK_OK != result)
1946 ThrowOcException(result, "Failed to unbind resource");
1949 catch (OCException& e)
1951 LOGE("%s", e.reason().c_str());
1952 ThrowOcException(e.code(), e.reason().c_str());
1957 * Class: org_iotivity_base_OcPlatform
1958 * Method: unbindResources0
1959 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1961 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0(
1964 jobject jResourceCollectionHandle,
1965 jobjectArray jResourceHandleArray)
1967 LOGI("OcPlatform_unbindResources");
1968 if (!jResourceCollectionHandle)
1970 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1973 if (!jResourceHandleArray)
1975 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1979 JniOcResourceHandle* jniOcResourceCollectionHandle =
1980 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1981 if (!jniOcResourceCollectionHandle)
1986 std::vector<OCResourceHandle> resourceHandleList;
1987 int len = env->GetArrayLength(jResourceHandleArray);
1988 for (int i = 0; i < len; ++i)
1990 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1991 if (!jResourceHandle)
1993 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1997 JniOcResourceHandle* jniOcResourceHandle =
1998 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1999 if (!jniOcResourceHandle)
2004 resourceHandleList.push_back(
2005 jniOcResourceHandle->getOCResourceHandle());
2010 OCStackResult result = OCPlatform::unbindResources(
2011 jniOcResourceCollectionHandle->getOCResourceHandle(),
2015 if (OC_STACK_OK != result)
2017 ThrowOcException(result, "Failed to unbind resources");
2020 catch (OCException& e)
2022 LOGE("%s", e.reason().c_str());
2023 ThrowOcException(e.code(), e.reason().c_str());
2028 * Class: org_iotivity_base_OcPlatform
2029 * Method: bindTypeToResource0
2030 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
2032 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0(
2035 jobject jResourceHandle,
2036 jstring jResourceTypeName)
2038 LOGI("OcPlatform_bindTypeToResource");
2039 if (!jResourceHandle)
2041 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
2044 std::string typeName;
2045 if (jResourceTypeName)
2047 typeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
2050 JniOcResourceHandle* jniOcResourceHandle =
2051 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2052 if (!jniOcResourceHandle)
2059 OCStackResult result = OCPlatform::bindTypeToResource(
2060 jniOcResourceHandle->getOCResourceHandle(),
2064 if (OC_STACK_OK != result)
2066 ThrowOcException(result, "Failed to bind type to resource");
2069 catch (OCException& e)
2071 LOGE("%s", e.reason().c_str());
2072 ThrowOcException(e.code(), e.reason().c_str());
2077 * Class: org_iotivity_base_OcPlatform
2078 * Method: bindInterfaceToResource0
2079 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
2081 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
2082 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
2084 LOGI("OcPlatform_bindInterfaceToResource");
2085 if (!jResourceHandle)
2087 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
2090 std::string interfaceName;
2091 if (jResourceInterfaceName)
2093 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, nullptr);
2096 JniOcResourceHandle* jniOcResourceHandle =
2097 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2098 if (!jniOcResourceHandle)
2105 OCStackResult result = OCPlatform::bindInterfaceToResource(
2106 jniOcResourceHandle->getOCResourceHandle(),
2110 if (OC_STACK_OK != result)
2112 ThrowOcException(result, "Failed to bind interface to resource");
2115 catch (OCException& e)
2117 LOGE("%s", e.reason().c_str());
2118 ThrowOcException(e.code(), e.reason().c_str());
2123 * Class: org_iotivity_base_OcPlatform
2124 * Method: startPresence0
2127 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0(
2128 JNIEnv *env, jclass clazz, jint ttl)
2130 LOGI("OcPlatform_startPresence");
2134 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
2136 if (OC_STACK_OK != result)
2138 ThrowOcException(result, "Failed to start presence");
2141 catch (OCException& e)
2143 LOGE("%s", e.reason().c_str());
2144 ThrowOcException(e.code(), e.reason().c_str());
2149 * Class: org_iotivity_base_OcPlatform
2150 * Method: stopPresence0
2153 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0(
2154 JNIEnv *env, jclass clazz)
2156 LOGI("OcPlatform_stopPresence");
2160 OCStackResult result = OCPlatform::stopPresence();
2162 if (OC_STACK_OK != result)
2164 ThrowOcException(result, "Failed to stop presence");
2167 catch (OCException& e)
2169 LOGE("%s", e.reason().c_str());
2170 ThrowOcException(e.code(), e.reason().c_str());
2175 * Class: org_iotivity_base_OcPlatform
2176 * Method: subscribePresence0
2177 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
2179 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0(
2183 jint jConnectivityType,
2186 LOGD("OcPlatform_subscribePresence");
2190 host = env->GetStringUTFChars(jHost, nullptr);
2194 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
2198 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
2200 SubscribeCallback subscribeCallback =
2201 [onPresenceListener](OCStackResult result,
2202 const unsigned int nonce,
2203 const std::string& hostAddress)
2205 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
2208 OCPlatform::OCPresenceHandle presenceHandle;
2211 OCStackResult result = OCPlatform::subscribePresence(
2214 static_cast<OCConnectivityType>(jConnectivityType),
2217 if (OC_STACK_OK != result)
2219 ThrowOcException(result, "subscribe presence has failed");
2222 catch (OCException& e)
2224 LOGE("%s", e.reason().c_str());
2225 ThrowOcException(e.code(), e.reason().c_str());
2229 JniOcPresenceHandle* jniPresenceHandle =
2230 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
2231 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
2232 jobject jPresenceHandle =
2233 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
2234 if (!jPresenceHandle)
2236 LOGE("Failed to create OcPresenceHandle");
2237 delete jniPresenceHandle;
2239 return jPresenceHandle;
2243 * Class: org_iotivity_base_OcPlatform
2244 * Method: subscribePresence1
2245 * Signature: (Ljava/lang/String;Ljava/lang/String;I
2246 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
2248 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1(
2252 jstring jResourceType,
2253 jint jConnectivityType,
2256 LOGD("OcPlatform_subscribePresence1");
2260 host = env->GetStringUTFChars(jHost, nullptr);
2262 std::string resourceType;
2265 resourceType = env->GetStringUTFChars(jResourceType, nullptr);
2269 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
2273 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
2275 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
2276 const unsigned int nonce, const std::string& hostAddress)
2278 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
2281 OCPlatform::OCPresenceHandle presenceHandle;
2284 OCStackResult result = OCPlatform::subscribePresence(
2288 static_cast<OCConnectivityType>(jConnectivityType),
2291 if (OC_STACK_OK != result)
2293 ThrowOcException(result, "subscribe presence has failed");
2296 catch (OCException& e)
2298 LOGE("%s", e.reason().c_str());
2299 ThrowOcException(e.code(), e.reason().c_str());
2303 JniOcPresenceHandle* jniPresenceHandle =
2304 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
2305 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
2306 jobject jPresenceHandle =
2307 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
2308 if (!jPresenceHandle)
2310 LOGE("Failed to create OcPresenceHandle");
2311 delete jniPresenceHandle;
2313 return jPresenceHandle;
2317 * Class: org_iotivity_base_OcPlatform
2318 * Method: unsubscribePresence0
2319 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
2321 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0(
2322 JNIEnv *env, jclass clazz, jobject jPresenceHandle)
2324 LOGD("OcPlatform_unsubscribePresence");
2325 if (!jPresenceHandle)
2327 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
2330 JniOcPresenceHandle* jniPresenceHandle =
2331 JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
2332 if (!jniPresenceHandle)
2337 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
2341 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
2343 if (OC_STACK_OK != result)
2345 ThrowOcException(result, "unsubscribe presence has failed");
2348 jweak jwOnPresenceListener =
2349 jniPresenceHandle->getJniOnPresenceListener()->getJWListener();
2350 if (jwOnPresenceListener)
2352 RemoveOnPresenceListener(env, jwOnPresenceListener);
2355 catch (OCException& e)
2357 LOGE("%s", e.reason().c_str());
2358 ThrowOcException(e.code(), e.reason().c_str());
2363 * Class: org_iotivity_base_OcPlatform
2364 * Method: constructResourceObject0
2365 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
2366 Lorg/iotivity/base/OcResource;
2368 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0(
2373 jint jConnectivityType,
2374 jboolean jIsObservable,
2375 jobjectArray jResourceTypeArray,
2376 jobjectArray jInterfaceArray)
2378 LOGD("OcPlatform_constructResourceObject");
2382 host = env->GetStringUTFChars(jHost, nullptr);
2387 uri = env->GetStringUTFChars(jUri, nullptr);
2389 if (!jResourceTypeArray)
2391 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
2394 if (!jInterfaceArray)
2396 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
2400 std::vector<std::string> resourceTypes;
2401 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
2403 std::vector<std::string> interfaces;
2404 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
2406 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
2409 static_cast<OCConnectivityType>(jConnectivityType),
2410 static_cast<bool>(jIsObservable),
2416 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
2420 JniOcResource *jniOcResource = new JniOcResource(resource);
2421 jlong handle = reinterpret_cast<jlong>(jniOcResource);
2423 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
2426 delete jniOcResource;
2429 SetHandle<JniOcResource>(env, jResource, jniOcResource);
2430 if (env->ExceptionCheck())
2432 delete jniOcResource;
2439 * Class: org_iotivity_base_OcPlatform
2440 * Method: sendResponse0
2441 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
2443 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0(
2444 JNIEnv *env, jclass clazz, jobject jResourceResponse)
2446 LOGD("OcPlatform_sendResponse");
2447 if (!jResourceResponse)
2449 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
2453 JniOcResourceResponse *jniResponse =
2454 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
2462 OCStackResult result =
2463 OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
2465 if (OC_STACK_OK != result)
2467 ThrowOcException(result, "failed to send response");
2470 catch (OCException& e)
2472 LOGE("%s", e.reason().c_str());
2473 ThrowOcException(e.code(), e.reason().c_str());
2478 * Class: org_iotivity_base_OcPlatform
2479 * Method: publishResourceToRD0
2480 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V
2482 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD0(
2486 jint jConnectivityType,
2490 LOGD("OcPlatform_publishResourceToRD");
2495 host = env->GetStringUTFChars(jHost, nullptr);
2499 ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null");
2502 JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener);
2504 PublishResourceCallback pubResCallback = [onPubResListener](
2505 const OCRepresentation& ocRepresentation,
2508 onPubResListener->onPublishResourceCallback(ocRepresentation, eCode);
2513 OCStackResult result = OCPlatform::publishResourceToRD(
2515 static_cast<OCConnectivityType>(jConnectivityType),
2517 JniUtils::getQOS(env, static_cast<int>(jQoS)));
2519 if (OC_STACK_OK != result)
2521 ThrowOcException(result, "Publish resource has failed");
2525 catch (OCException& e)
2527 LOGE("%s", e.reason().c_str());
2528 ThrowOcException(e.code(), e.reason().c_str());
2531 ThrowOcException(OC_STACK_ERROR, "Publish resource has failed");
2537 * Class: org_iotivity_base_OcPlatform
2538 * Method: publishResourceToRD1
2539 * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcPlatform/OnPublishResourceListener;I)V
2541 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_publishResourceToRD1(
2545 jint jConnectivityType,
2546 jobjectArray jResourceHandleArray,
2550 LOGD("OcPlatform_publishResourceToRD");
2554 ThrowOcException(OC_STACK_INVALID_PARAM, "env is null");
2560 host = env->GetStringUTFChars(jHost, nullptr);
2564 ThrowOcException(OC_STACK_INVALID_PARAM, "onPublishResourceListener cannot be null");
2567 if (!jResourceHandleArray)
2569 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
2572 JniOnPublishResourceListener *onPubResListener = AddOnPublishResourceListener(env, jListener);
2574 PublishResourceCallback pubResCallback = [onPubResListener](
2575 const OCRepresentation& ocRepresentation,
2578 onPubResListener->onPublishResourceCallback(ocRepresentation, eCode);
2581 std::vector<OCResourceHandle> resourceHandleList;
2582 size_t len = env->GetArrayLength(jResourceHandleArray);
2583 for (size_t i = 0; i < len; ++i)
2585 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
2586 if (!jResourceHandle)
2588 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
2592 JniOcResourceHandle* jniOcResourceHandle =
2593 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2594 if (!jniOcResourceHandle)
2596 ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid");
2600 resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle());
2605 OCStackResult result = OCPlatform::publishResourceToRD(
2607 static_cast<OCConnectivityType>(jConnectivityType),
2610 JniUtils::getQOS(env, static_cast<int>(jQoS)));
2612 if (OC_STACK_OK != result)
2614 ThrowOcException(result, "Publish resource has failed");
2618 catch (OCException& e)
2620 LOGE("%s", e.reason().c_str());
2621 ThrowOcException(e.code(), e.reason().c_str());
2624 ThrowOcException(OC_STACK_ERROR, "Publish resource has failed");
2630 * Class: org_iotivity_base_OcPlatform
2631 * Method: deleteResourceFromRD0
2632 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V
2634 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD0(
2638 jint jConnectivityType,
2642 LOGD("OcPlatform_deleteResourceFromRD");
2647 host = env->GetStringUTFChars(jHost, nullptr);
2651 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null");
2654 JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener);
2656 DeleteResourceCallback delResCallback = [onDelResListener](const int eCode)
2658 onDelResListener->onDeleteResourceCallback(eCode);
2663 OCStackResult result = OCPlatform::deleteResourceFromRD(
2665 static_cast<OCConnectivityType>(jConnectivityType),
2667 JniUtils::getQOS(env, static_cast<int>(jQoS)));
2669 if (OC_STACK_OK != result)
2671 ThrowOcException(result, "Delete resource has failed");
2675 catch (OCException& e)
2677 LOGE("%s", e.reason().c_str());
2678 ThrowOcException(e.code(), e.reason().c_str());
2681 ThrowOcException(OC_STACK_ERROR, "Delete resource has failed");
2687 * Class: org_iotivity_base_OcPlatform
2688 * Method: deleteResourceFromRD1
2689 * Signature: (Ljava/lang/String;I[Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcPlatform/OnDeleteResourceListener;I)V
2691 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_deleteResourceFromRD1(
2695 jint jConnectivityType,
2696 jobjectArray jResourceHandleArray,
2700 LOGD("OcPlatform_deleteResourceFromRD");
2704 ThrowOcException(OC_STACK_INVALID_PARAM, "env is null");
2710 host = env->GetStringUTFChars(jHost, nullptr);
2714 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteResourceListener cannot be null");
2717 if (!jResourceHandleArray)
2719 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
2722 JniOnDeleteResourceListener *onDelResListener = AddOnDeleteResourceListener(env, jListener);
2724 DeleteResourceCallback delResCallback = [onDelResListener](const int eCode)
2726 onDelResListener->onDeleteResourceCallback(eCode);
2729 std::vector<OCResourceHandle> resourceHandleList;
2730 size_t len = env->GetArrayLength(jResourceHandleArray);
2731 for (size_t i = 0; i < len; ++i)
2733 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
2734 if (!jResourceHandle)
2736 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
2740 JniOcResourceHandle* jniOcResourceHandle =
2741 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2742 if (!jniOcResourceHandle)
2744 ThrowOcException(OC_STACK_INVALID_PARAM, "resource handle is invalid");
2748 resourceHandleList.push_back(jniOcResourceHandle->getOCResourceHandle());
2753 OCStackResult result = OCPlatform::deleteResourceFromRD(
2755 static_cast<OCConnectivityType>(jConnectivityType),
2758 JniUtils::getQOS(env, static_cast<int>(jQoS)));
2760 if (OC_STACK_OK != result)
2762 ThrowOcException(result, "Delete resource has failed");
2766 catch (OCException& e)
2768 LOGE("%s", e.reason().c_str());
2769 ThrowOcException(e.code(), e.reason().c_str());
2772 ThrowOcException(OC_STACK_ERROR, "Delete resource has failed");