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 "JniOcRepresentation.h"
28 #include "JniOcSecurity.h"
29 #include "JniOcDirectPairDevice.h"
31 #include "ocpayload.h"
35 #include "JniOcAccountManager.h"
38 #define AES_KEY_SIZE 32
42 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
44 JniOnResourceFoundListener *onResourceFoundListener = nullptr;
46 resourceFoundMapLock.lock();
48 for (auto it = onResourceFoundListenerMap.begin();
49 it != onResourceFoundListenerMap.end();
52 if (env->IsSameObject(jListener, it->first))
54 auto refPair = it->second;
55 onResourceFoundListener = refPair.first;
58 onResourceFoundListenerMap.insert(*it);
59 LOGD("OnResourceFoundListener: ref. count incremented");
64 if (!onResourceFoundListener)
66 onResourceFoundListener =
67 new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
68 jobject jgListener = env->NewGlobalRef(jListener);
70 onResourceFoundListenerMap.insert(
72 std::pair<JniOnResourceFoundListener*, int >>(
74 std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener,
76 LOGD("OnResourceFoundListener: new listener");
78 resourceFoundMapLock.unlock();
79 return onResourceFoundListener;
82 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
84 resourceFoundMapLock.lock();
86 for (auto it = onResourceFoundListenerMap.begin();
87 it != onResourceFoundListenerMap.end();
90 if (env->IsSameObject(jListener, it->first))
92 auto refPair = it->second;
93 if (refPair.second > 1)
97 onResourceFoundListenerMap.insert(*it);
98 LOGI("OnResourceFoundListener: ref. count decremented");
102 env->DeleteGlobalRef(it->first);
103 JniOnResourceFoundListener* listener = refPair.first;
105 onResourceFoundListenerMap.erase(it);
106 LOGI("OnResourceFoundListener removed");
111 resourceFoundMapLock.unlock();
114 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
116 JniOnDeviceInfoListener *onDeviceInfoListener = nullptr;
118 deviceInfoMapLock.lock();
120 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
122 if (env->IsSameObject(jListener, it->first))
124 auto refPair = it->second;
125 onDeviceInfoListener = refPair.first;
127 it->second = refPair;
128 onDeviceInfoListenerMap.insert(*it);
129 LOGD("OnDeviceInfoListener: ref. count incremented");
134 if (!onDeviceInfoListener)
136 onDeviceInfoListener =
137 new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
138 jobject jgListener = env->NewGlobalRef(jListener);
140 onDeviceInfoListenerMap.insert(
142 std::pair<JniOnDeviceInfoListener*, int>>(
144 std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
145 LOGI("OnDeviceInfoListener: new listener");
148 deviceInfoMapLock.unlock();
149 return onDeviceInfoListener;
152 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
154 deviceInfoMapLock.lock();
155 bool isFound = false;
156 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
158 if (env->IsSameObject(jListener, it->first))
160 auto refPair = it->second;
161 if (refPair.second > 1)
164 it->second = refPair;
165 onDeviceInfoListenerMap.insert(*it);
166 LOGI("OnDeviceInfoListener: ref. count decremented");
170 env->DeleteGlobalRef(it->first);
171 JniOnDeviceInfoListener* listener = refPair.first;
173 onDeviceInfoListenerMap.erase(it);
175 LOGI("OnDeviceInfoListener removed");
185 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
187 deviceInfoMapLock.unlock();
190 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
192 JniOnPlatformInfoListener *onPlatformInfoListener = nullptr;
194 platformInfoMapLock.lock();
196 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
198 if (env->IsSameObject(jListener, it->first))
200 auto refPair = it->second;
201 onPlatformInfoListener = refPair.first;
203 it->second = refPair;
204 onPlatformInfoListenerMap.insert(*it);
205 LOGD("OnPlatformInfoListener: ref. count incremented");
210 if (!onPlatformInfoListener)
212 onPlatformInfoListener =
213 new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
214 jobject jgListener = env->NewGlobalRef(jListener);
216 onPlatformInfoListenerMap.insert(
217 std::pair<jobject, std::pair<JniOnPlatformInfoListener*, int>>(
219 std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
220 LOGI("OnPlatformInfoListener: new listener");
223 platformInfoMapLock.unlock();
224 return onPlatformInfoListener;
227 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
229 platformInfoMapLock.lock();
230 bool isFound = false;
231 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
233 if (env->IsSameObject(jListener, it->first))
235 auto refPair = it->second;
236 if (refPair.second > 1)
239 it->second = refPair;
240 onPlatformInfoListenerMap.insert(*it);
241 LOGI("OnPlatformInfoListener: ref. count decremented");
245 env->DeleteGlobalRef(it->first);
246 JniOnPlatformInfoListener* listener = refPair.first;
248 onPlatformInfoListenerMap.erase(it);
250 LOGI("OnPlatformInfoListener removed");
260 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
262 platformInfoMapLock.unlock();
265 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
267 JniOnPresenceListener *onPresenceListener = nullptr;
269 presenceMapLock.lock();
271 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
273 if (env->IsSameObject(jListener, it->first))
275 auto refPair = it->second;
276 onPresenceListener = refPair.first;
278 it->second = refPair;
279 onPresenceListenerMap.insert(*it);
280 LOGD("OnPresenceListener: ref. count incremented");
284 if (!onPresenceListener)
286 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
287 jobject jgListener = env->NewGlobalRef(jListener);
288 onPresenceListenerMap.insert(
289 std::pair<jobject, std::pair<JniOnPresenceListener*, int>>(
291 std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
292 LOGI("OnPresenceListener: new listener");
294 presenceMapLock.unlock();
295 return onPresenceListener;
298 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
300 presenceMapLock.lock();
301 bool isFound = false;
302 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
304 if (env->IsSameObject(jListener, it->first))
306 auto refPair = it->second;
307 if (refPair.second > 1)
310 it->second = refPair;
311 onPresenceListenerMap.insert(*it);
312 LOGI("OnPresenceListener: ref. count decremented");
316 env->DeleteGlobalRef(it->first);
317 JniOnPresenceListener* listener = refPair.first;
319 onPresenceListenerMap.erase(it);
320 LOGI("OnPresenceListener is removed");
328 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
330 presenceMapLock.unlock();
333 JniOnObserveListener* AddOnObserveListener(JNIEnv* env, jobject jListener)
335 JniOnObserveListener *onObserveListener = nullptr;
337 observeMapLock.lock();
339 for (auto it = onObserveListenerMap.begin(); it != onObserveListenerMap.end(); ++it)
341 if (env->IsSameObject(jListener, it->first))
343 auto refPair = it->second;
344 onObserveListener = refPair.first;
346 it->second = refPair;
347 onObserveListenerMap.insert(*it);
348 LOGD("OnObserveListener: ref. count incremented");
352 if (!onObserveListener)
354 onObserveListener = new JniOnObserveListener(env, jListener, nullptr);
355 jobject jgListener = env->NewGlobalRef(jListener);
356 onObserveListenerMap.insert(
357 std::pair<jobject, std::pair<JniOnObserveListener*, int>>(
359 std::pair<JniOnObserveListener*, int>(onObserveListener, 1)));
360 LOGI("OnObserveListener: new listener");
362 observeMapLock.unlock();
363 return onObserveListener;
366 void RemoveOnObserveListener(JNIEnv* env, jobject jListener)
368 observeMapLock.lock();
369 bool isFound = false;
370 for (auto it = onObserveListenerMap.begin(); it != onObserveListenerMap.end(); ++it)
372 if (env->IsSameObject(jListener, it->first))
374 auto refPair = it->second;
375 if (refPair.second > 1)
378 it->second = refPair;
379 onObserveListenerMap.insert(*it);
380 LOGI("OnObserveListener: ref. count decremented");
384 env->DeleteGlobalRef(it->first);
385 JniOnObserveListener* listener = refPair.first;
387 onObserveListenerMap.erase(it);
388 LOGI("OnObserveListener is removed");
396 ThrowOcException(JNI_EXCEPTION, "OnObserveListener not found");
398 observeMapLock.unlock();
401 JniOnDPDevicesFoundListener* AddOnDPDevicesFoundListener(JNIEnv* env, jobject jListener)
403 JniOnDPDevicesFoundListener *onDPDeviceListener = nullptr;
405 dpDevicesFoundListenerMapLock.lock();
407 for (auto it = onDPDevicesFoundListenerMap.begin(); it !=
408 onDPDevicesFoundListenerMap.end(); ++it)
410 if (env->IsSameObject(jListener, it->first))
412 auto refPair = it->second;
413 onDPDeviceListener = refPair.first;
415 it->second = refPair;
416 onDPDevicesFoundListenerMap.insert(*it);
417 LOGD("onDPDeviceListener: ref. count incremented");
421 if (!onDPDeviceListener)
423 onDPDeviceListener = new JniOnDPDevicesFoundListener(env, jListener,
424 RemoveOnDPDevicesFoundListener);
425 jobject jgListener = env->NewGlobalRef(jListener);
426 onDPDevicesFoundListenerMap.insert(
427 std::pair<jobject, std::pair<JniOnDPDevicesFoundListener*, int>>(
429 std::pair<JniOnDPDevicesFoundListener*, int>(onDPDeviceListener, 1)));
430 LOGI("onDPDeviceListener: new listener");
432 dpDevicesFoundListenerMapLock.unlock();
433 return onDPDeviceListener;
436 void RemoveOnDPDevicesFoundListener(JNIEnv* env, jobject jListener)
438 dpDevicesFoundListenerMapLock.lock();
439 bool isFound = false;
440 for (auto it = onDPDevicesFoundListenerMap.begin(); it !=
441 onDPDevicesFoundListenerMap.end(); ++it)
443 if (env->IsSameObject(jListener, it->first))
445 auto refPair = it->second;
446 if (refPair.second > 1)
449 it->second = refPair;
450 onDPDevicesFoundListenerMap.insert(*it);
451 LOGI("onDPDeviceListener: ref. count decremented");
455 env->DeleteGlobalRef(it->first);
456 JniOnDPDevicesFoundListener* listener = refPair.first;
458 onDPDevicesFoundListenerMap.erase(it);
459 LOGI("onDPDeviceListener is removed");
467 ThrowOcException(JNI_EXCEPTION, "onDPDeviceListener not found");
469 dpDevicesFoundListenerMapLock.unlock();
472 JniOnDirectPairingListener* AddOnDirectPairingListener(JNIEnv* env, jobject jListener)
474 JniOnDirectPairingListener *onDirectPairingListener = nullptr;
476 directPairingListenerMapLock.lock();
478 for (auto it = directPairingListenerMap.begin(); it !=
479 directPairingListenerMap.end(); ++it)
481 if (env->IsSameObject(jListener, it->first))
483 auto refPair = it->second;
484 onDirectPairingListener = refPair.first;
486 it->second = refPair;
487 directPairingListenerMap.insert(*it);
488 LOGD("onDirectPairingListener: ref. count incremented");
492 if (!onDirectPairingListener)
494 onDirectPairingListener = new JniOnDirectPairingListener(env, jListener,
495 RemoveOnDirectPairingListener);
496 jobject jgListener = env->NewGlobalRef(jListener);
497 directPairingListenerMap.insert(
498 std::pair<jobject, std::pair<JniOnDirectPairingListener*, int>>(
500 std::pair<JniOnDirectPairingListener*, int>(onDirectPairingListener, 1)));
501 LOGI("onDirectPairingListener: new listener");
503 directPairingListenerMapLock.unlock();
504 return onDirectPairingListener;
507 void RemoveOnDirectPairingListener(JNIEnv* env, jobject jListener)
509 directPairingListenerMapLock.lock();
510 bool isFound = false;
511 for (auto it = directPairingListenerMap.begin(); it !=
512 directPairingListenerMap.end(); ++it)
514 if (env->IsSameObject(jListener, it->first))
516 auto refPair = it->second;
517 if (refPair.second > 1)
520 it->second = refPair;
521 directPairingListenerMap.insert(*it);
522 LOGI("onDirectPairingListener: ref. count decremented");
526 env->DeleteGlobalRef(it->first);
527 JniOnDirectPairingListener* listener = refPair.first;
529 directPairingListenerMap.erase(it);
530 LOGI("onDirectPairingListener is removed");
538 ThrowOcException(JNI_EXCEPTION, "onDirectPairingListener not found");
540 directPairingListenerMapLock.unlock();
544 JniKeepAliveListener* AddKeepAliveListener(JNIEnv* env, jobject jListener)
546 JniKeepAliveListener *KeepAliveListener = nullptr;
548 KeepAliveListenerMapLock.lock();
550 for (auto it = KeepAliveListenerMap.begin(); it !=
551 KeepAliveListenerMap.end(); ++it)
553 if (env->IsSameObject(jListener, it->first))
555 auto refPair = it->second;
556 KeepAliveListener = refPair.first;
558 it->second = refPair;
559 KeepAliveListenerMap.insert(*it);
560 LOGD("KeepAliveListener: ref. count incremented");
564 if (!KeepAliveListener)
566 KeepAliveListener = new JniKeepAliveListener(env, jListener, RemoveKeepAliveListener);
567 jobject jgListener = env->NewGlobalRef(jListener);
568 KeepAliveListenerMap.insert(std::pair<jobject, std::pair<JniKeepAliveListener*, int>>(
570 std::pair<JniKeepAliveListener*, int>(KeepAliveListener, 1)));
571 LOGI("KeepAliveListener: new listener");
573 KeepAliveListenerMapLock.unlock();
574 return KeepAliveListener;
578 void RemoveKeepAliveListener(JNIEnv* env, jobject jListener)
580 KeepAliveListenerMapLock.lock();
581 bool isFound = false;
582 for (auto it = KeepAliveListenerMap.begin(); it !=
583 KeepAliveListenerMap.end(); ++it)
585 if (env->IsSameObject(jListener, it->first))
587 auto refPair = it->second;
588 if (refPair.second > 1)
591 it->second = refPair;
592 KeepAliveListenerMap.insert(*it);
593 LOGI("KeepAliveListener: ref.count decremented");
597 env->DeleteGlobalRef(it->first);
598 JniKeepAliveListener* listener = refPair.first;
600 KeepAliveListenerMap.erase(it);
601 LOGI("KeepAliveListener is removed");
609 ThrowOcException(JNI_EXCEPTION, "KeepAliveListener not found");
611 KeepAliveListenerMapLock.unlock();
615 * Class: org_iotivity_base_OcPlatform
617 * Signature: (IILjava/lang/String;IILjava/lang/String;I)V
619 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
620 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort,
621 jint jQOS, jstring jDbPath, jstring jDbPathDefault , jstring jRescueDBPath, jint jkeySize,
622 jbyteArray data, jint jTransport)
624 LOGI("OcPlatform_configure");
626 std::string ipAddress;
627 std::string dbfile, defaultPath, rescuePath;
628 static unsigned char *aesKey = NULL;
631 ipAddress = env->GetStringUTFChars(jIpAddress, nullptr);
635 dbfile = env->GetStringUTFChars(jDbPath, nullptr);
636 JniOcSecurity::StoreDbPath(dbfile);
638 //Either we have both paths or neither of them.
639 if ((jDbPathDefault && !jRescueDBPath) || (!jDbPathDefault && jRescueDBPath))
641 ThrowOcException(OC_STACK_INVALID_PARAM, "path cannot be null");
645 if (!jDbPathDefault && !jRescueDBPath)
647 LOGI("Secure SVR DB feature not enable!!");
651 aesKey = (unsigned char*)calloc(1, sizeof(unsigned char) * AES_KEY_SIZE);
652 defaultPath = env->GetStringUTFChars(jDbPathDefault, nullptr);
653 rescuePath = env->GetStringUTFChars(jRescueDBPath, nullptr);
654 OC::JniOcSecurity::StoreDefault_DbPath(defaultPath, rescuePath, (int)jkeySize);
656 jbyte* key = env->GetByteArrayElements(data, 0);
657 jsize arrayLength = env->GetArrayLength(data);
658 if(arrayLength != AES_KEY_SIZE)
660 ThrowOcException(OC_STACK_INVALID_PARAM, "key size mismatch");
664 for(int i=0;i < AES_KEY_SIZE; i++)
666 aesKey[i]=(jbyte)key[i];
674 port = static_cast<uint16_t>(jPort);
678 JniUtils::getServiceType(env, jServiceType),
679 JniUtils::getModeType(env, jModeType),
682 JniUtils::getOCTransportAdapter(jTransport),
683 JniUtils::getQOS(env, static_cast<int>(jQOS)),
685 JniOcSecurity::getOCPersistentStorage(),
686 JniOcSecurity::getOCPersistentStorageEnc(),
687 JniOcSecurity::getOCPersistentStorageRescue()
690 OCPlatform::Configure(cfg);
695 * Class: org_iotivity_base_OcPlatform
699 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stop
700 (JNIEnv *env, jclass clazz)
702 LOGI("OcPlatform.stop");
705 OCStackResult result = OCPlatform::stop();
706 if (OC_STACK_OK != result)
708 ThrowOcException(result, "Failed to stop ocplatform");
712 catch (OCException& e)
714 LOGE("%s", e.reason().c_str());
715 ThrowOcException(e.code(), e.reason().c_str());
720 * Class: org_iotivity_base_OcPlatform
724 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_start
725 (JNIEnv *env, jclass clazz)
727 LOGI("OcPlatform.start");
730 OCStackResult result = OCPlatform::start();
731 if (OC_STACK_OK != result)
733 ThrowOcException(result, "Failed to start ocplatform");
737 catch (OCException& e)
739 LOGE("%s", e.reason().c_str());
740 ThrowOcException(e.code(), e.reason().c_str());
745 * Class: org_iotivity_base_OcPlatform
746 * Method: notifyAllObservers0
747 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
749 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
750 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
752 LOGI("OcPlatform_notifyAllObservers");
753 if (!jResourceHandle)
755 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
759 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
760 env, jResourceHandle);
761 if (!jniOcResourceHandle)
768 OCStackResult result =
769 OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
771 if (OC_STACK_OK != result)
773 ThrowOcException(result, "Failed to notify all observers");
777 catch (OCException& e)
779 LOGE("%s", e.reason().c_str());
780 ThrowOcException(e.code(), e.reason().c_str());
785 * Class: org_iotivity_base_OcPlatform
786 * Method: notifyAllObservers1
787 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
789 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
790 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
792 LOGI("OcPlatform_notifyAllObservers1");
794 if (!jResourceHandle)
796 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
800 JniOcResourceHandle* jniOcResourceHandle =
801 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
802 if (!jniOcResourceHandle)
808 OCStackResult result = OCPlatform::notifyAllObservers(
809 jniOcResourceHandle->getOCResourceHandle(),
810 JniUtils::getQOS(env, static_cast<int>(jQoS)));
812 if (OC_STACK_OK != result)
814 ThrowOcException(result, "Failed to notify all observers");
818 catch (OCException& e)
820 LOGE("%s", e.reason().c_str());
821 ThrowOcException(e.code(), e.reason().c_str());
826 * Class: org_iotivity_base_OcPlatform
827 * Method: notifyListOfObservers2
828 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
830 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2(
833 jobject jResourceHandle,
834 jbyteArray jObservationIdArr,
835 jobject jResourceResponse)
837 LOGD("OcPlatform_notifyListOfObservers2");
838 if (!jResourceHandle)
840 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
843 if (!jObservationIdArr)
845 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
848 if (!jResourceResponse)
850 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
854 JniOcResourceHandle* jniOcResourceHandle =
855 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
856 if (!jniOcResourceHandle)
861 JniOcResourceResponse* jniOcResourceResponse =
862 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
863 if (!jniOcResourceResponse)
868 int len = env->GetArrayLength(jObservationIdArr);
869 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
871 ObservationIds observationIds;
872 for (int i = 0; i < len; ++i)
874 observationIds.push_back(bArr[i]);
877 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
881 OCStackResult result = OCPlatform::notifyListOfObservers(
882 jniOcResourceHandle->getOCResourceHandle(),
884 jniOcResourceResponse->getOCResourceResponse());
886 if (OC_STACK_OK != result)
888 ThrowOcException(result, "Failed to notify all observers");
891 catch (OCException& e)
893 LOGE("%s", e.reason().c_str());
894 ThrowOcException(e.code(), e.reason().c_str());
899 * Class: org_iotivity_base_OcPlatform
900 * Method: notifyListOfObservers3
901 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
903 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3(
906 jobject jResourceHandle,
907 jbyteArray jObservationIdArr,
908 jobject jResourceResponse,
911 LOGD("OcPlatform_notifyListOfObservers3");
912 if (!jResourceHandle)
914 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
917 if (!jObservationIdArr)
919 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
922 if (!jResourceResponse)
924 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
928 JniOcResourceHandle* jniOcResourceHandle =
929 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
930 if (!jniOcResourceHandle)
935 JniOcResourceResponse* jniOcResourceResponse =
936 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
937 if (!jniOcResourceResponse)
942 int len = env->GetArrayLength(jObservationIdArr);
943 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
945 ObservationIds observationIds;
946 for (int i = 0; i < len; ++i)
948 observationIds.push_back(bArr[i]);
951 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
955 OCStackResult result = OCPlatform::notifyListOfObservers(
956 jniOcResourceHandle->getOCResourceHandle(),
958 jniOcResourceResponse->getOCResourceResponse(),
959 JniUtils::getQOS(env, static_cast<int>(jQoS)));
961 if (OC_STACK_OK != result)
963 ThrowOcException(result, "Failed to notify all observers");
966 catch (OCException& e)
968 LOGE("%s", e.reason().c_str());
969 ThrowOcException(e.code(), e.reason().c_str());
974 * Class: org_iotivity_base_OcPlatform
975 * Method: findResource0
976 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
978 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0(
982 jstring jResourceUri,
983 jint jConnectivityType,
986 LOGD("OcPlatform_findResource");
990 host = env->GetStringUTFChars(jHost, nullptr);
992 std::string resourceUri;
995 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
999 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
1003 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
1005 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
1007 onResFoundListener->foundResourceCallback(resource);
1010 FindErrorCallback findErrorCallback = [onResFoundListener](const std::string& uri, const int eCode)
1012 onResFoundListener->findResourceErrorCallback(uri, eCode);
1017 OCStackResult result = OCPlatform::findResource(
1020 static_cast<OCConnectivityType>(jConnectivityType),
1024 if (OC_STACK_OK != result)
1026 ThrowOcException(result, "Find resource has failed");
1030 catch (OCException& e)
1032 LOGE("%s", e.reason().c_str());
1033 ThrowOcException(e.code(), e.reason().c_str());
1038 * Class: org_iotivity_base_OcPlatform
1039 * Method: findResource1
1040 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
1042 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1(
1046 jstring jResourceUri,
1047 jint jConnectivityType,
1051 LOGD("OcPlatform_findResource");
1055 host = env->GetStringUTFChars(jHost, nullptr);
1057 std::string resourceUri;
1060 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1064 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
1067 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
1069 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
1071 onResFoundListener->foundResourceCallback(resource);
1074 FindErrorCallback findErrorCallback = [onResFoundListener](const std::string& uri, const int eCode)
1076 onResFoundListener->findResourceErrorCallback(uri, eCode);
1081 OCStackResult result = OCPlatform::findResource(
1084 static_cast<OCConnectivityType>(jConnectivityType),
1087 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1089 if (OC_STACK_OK != result)
1091 ThrowOcException(result, "Find resource has failed");
1095 catch (OCException& e)
1097 LOGE("%s", e.reason().c_str());
1098 ThrowOcException(e.code(), e.reason().c_str());
1103 * Class: org_iotivity_base_OcPlatform
1104 * Method: findDirectPairingDevices
1105 * Signature: (ILorg/iotivity/base/OcPlatform/FindDirectPairingListener;)V
1107 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findDirectPairingDevices
1108 (JNIEnv * env, jclass clazz, jint jTimeout, jobject jListener)
1110 LOGD("OcPlatform_findDirectPairingDevices");
1114 ThrowOcException(OC_STACK_INVALID_PARAM, "onDPDevicesFoundListener cannot be null");
1117 JniOnDPDevicesFoundListener *onDPDevsFoundListener = AddOnDPDevicesFoundListener(env,
1120 GetDirectPairedCallback getDirectPairedCallback =
1121 [onDPDevsFoundListener](PairedDevices pairingDevList)
1123 onDPDevsFoundListener->directPairingDevicesCallback(pairingDevList,
1124 DPFunc::FIND_DIRECT_PAIRED_DEV_LIST);
1129 OCStackResult result = OCPlatform::findDirectPairingDevices(jTimeout,
1130 getDirectPairedCallback);
1131 if (OC_STACK_OK != result)
1133 ThrowOcException(result, "OCPlatform::findDirectPairingDevices has failed");
1137 catch (OCException& e)
1139 LOGE("%s", e.reason().c_str());
1140 ThrowOcException(e.code(), e.reason().c_str());
1145 * Class: org_iotivity_base_OcPlatform
1146 * Method: getDirectPairedDevices
1147 * Signature: (Lorg/iotivity/base/OcDirectPairDevice/GetDirectPairedListener;)V
1149 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDirectPairedDevices
1150 (JNIEnv *env, jclass jclazz, jobject jListener)
1152 LOGD("OcPlatform_getDirectPairedDevices");
1156 ThrowOcException(OC_STACK_INVALID_PARAM, "getPairedDevList Callback cannot be null");
1159 JniOnDPDevicesFoundListener *onGetPairedDevicesListener = AddOnDPDevicesFoundListener(env,
1162 GetDirectPairedCallback getDirectPairedCallback =
1163 [onGetPairedDevicesListener](PairedDevices pairedDevList)
1165 onGetPairedDevicesListener->directPairingDevicesCallback(pairedDevList,
1166 DPFunc::GET_PAIRED_DEV_LIST);
1171 OCStackResult result = OCPlatform::getDirectPairedDevices(getDirectPairedCallback);
1172 if (OC_STACK_OK != result)
1174 ThrowOcException(result, "OcDirectPairDevice_getDirectPairedDevices");
1178 catch (OCException& e)
1180 LOGE("%s", e.reason().c_str());
1181 ThrowOcException(e.code(), e.reason().c_str());
1186 * Class: org_iotivity_base_OcPlatform
1187 * Method: doDirectPairing
1188 * Signature: (Lorg/iotivity/base/OcDirectPairDevice;Lorg/iotivity/base/OcPrmType;
1189 * Ljava/lang/String;Lorg/iotivity/base/OcDirectPairDevice/DirectPairingListener;)V
1191 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_doDirectPairing0
1192 (JNIEnv *env, jclass clazz, jobject jpeer, jint jprmType, jstring jpin, jobject jListener)
1194 LOGD("OcPlatform_doDirectPairing");
1198 ThrowOcException(OC_STACK_INVALID_PARAM, "doDirectPairing Callback cannot be null");
1203 ThrowOcException(OC_STACK_INVALID_PARAM, "Peer cannot be null");
1207 JniOnDirectPairingListener *onDirectPairingListener = AddOnDirectPairingListener(env,
1210 DirectPairingCallback DirectPairingCB =
1211 [onDirectPairingListener](std::shared_ptr<OCDirectPairing> dpDev, OCStackResult result)
1213 onDirectPairingListener->doDirectPairingCB(dpDev, result);
1216 JniOcDirectPairDevice *dev = JniOcDirectPairDevice::getJniOcDirectPairDevicePtr(env, jpeer);
1222 std::string pin = env->GetStringUTFChars(jpin, 0);
1226 OCStackResult result = OCPlatform::doDirectPairing(dev->getPtr(), (OCPrm_t)jprmType,
1227 pin, DirectPairingCB);
1228 if (OC_STACK_OK != result)
1230 ThrowOcException(result, "OcPlatform_oDirectPairing");
1234 catch (OCException& e)
1236 LOGE("%s", e.reason().c_str());
1237 ThrowOcException(e.code(), e.reason().c_str());
1242 * Class: org_iotivity_base_OcPlatform
1243 * Method: getDeviceInfo0
1244 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
1246 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0(
1250 jstring jResourceUri,
1251 jint jConnectivityType,
1254 LOGD("OcPlatform_getDeviceInfo0");
1258 host = env->GetStringUTFChars(jHost, nullptr);
1260 std::string resourceUri;
1263 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1267 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
1270 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
1272 FindDeviceCallback findDeviceCallback =
1273 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
1275 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
1280 OCStackResult result = OCPlatform::getDeviceInfo(
1283 static_cast<OCConnectivityType>(jConnectivityType),
1284 findDeviceCallback);
1286 if (OC_STACK_OK != result)
1288 ThrowOcException(result, "Find device has failed");
1291 catch (OCException& e)
1293 LOGE("%s", e.reason().c_str());
1294 ThrowOcException(e.code(), e.reason().c_str());
1299 * Class: org_iotivity_base_OcPlatform
1300 * Method: getDeviceInfo1
1301 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
1303 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1(
1307 jstring jResourceUri,
1308 jint jConnectivityType,
1312 LOGD("OcPlatform_getDeviceInfo1");
1316 host = env->GetStringUTFChars(jHost, nullptr);
1318 std::string resourceUri;
1321 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1325 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
1328 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
1330 FindDeviceCallback findDeviceCallback =
1331 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
1333 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
1338 OCStackResult result = OCPlatform::getDeviceInfo(
1341 static_cast<OCConnectivityType>(jConnectivityType),
1343 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1345 if (OC_STACK_OK != result)
1347 ThrowOcException(result, "Find device has failed");
1350 catch (OCException& e)
1352 LOGE("%s", e.reason().c_str());
1353 ThrowOcException(e.code(), e.reason().c_str());
1358 * Class: org_iotivity_base_OcPlatform
1359 * Method: getPlatformInfo0
1360 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
1362 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0(
1366 jstring jResourceUri,
1367 jint jConnectivityType,
1370 LOGD("OcPlatform_getPlatformInfo0");
1374 host = env->GetStringUTFChars(jHost, nullptr);
1376 std::string resourceUri;
1379 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1383 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
1386 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
1388 FindPlatformCallback findPlatformCallback =
1389 [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
1391 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
1396 OCStackResult result = OCPlatform::getPlatformInfo(
1399 static_cast<OCConnectivityType>(jConnectivityType),
1400 findPlatformCallback);
1402 if (OC_STACK_OK != result)
1404 ThrowOcException(result, "Find platform has failed");
1407 catch (OCException& e)
1409 LOGE("%s", e.reason().c_str());
1410 ThrowOcException(e.code(), e.reason().c_str());
1415 * Class: org_iotivity_base_OcPlatform
1416 * Method: getPlatformInfo1
1417 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
1419 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1(
1423 jstring jResourceUri,
1424 jint jConnectivityType,
1428 LOGD("OcPlatform_getPlatformInfo1");
1432 host = env->GetStringUTFChars(jHost, nullptr);
1434 std::string resourceUri;
1437 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1441 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
1444 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
1446 FindPlatformCallback findPlatformCallback =
1447 [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
1449 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
1454 OCStackResult result = OCPlatform::getPlatformInfo(
1457 static_cast<OCConnectivityType>(jConnectivityType),
1458 findPlatformCallback,
1459 JniUtils::getQOS(env, static_cast<int>(jQoS)));
1461 if (OC_STACK_OK != result)
1463 ThrowOcException(result, "Find platform has failed");
1466 catch (OCException& e)
1468 LOGE("%s", e.reason().c_str());
1469 ThrowOcException(e.code(), e.reason().c_str());
1474 * Class: org_iotivity_base_OcPlatform
1475 * Method: registerResource0
1476 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
1478 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0(
1479 JNIEnv *env, jclass clazz, jobject jResource)
1481 LOGD("OcPlatform_registerResource");
1484 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
1487 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
1493 OCResourceHandle resourceHandle;
1496 OCStackResult result = OCPlatform::registerResource(
1498 resource->getOCResource());
1500 if (OC_STACK_OK != result)
1502 ThrowOcException(result, "register resource");
1505 catch (OCException& e)
1507 LOGE("%s", e.reason().c_str());
1508 ThrowOcException(e.code(), e.reason().c_str());
1511 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1512 jlong handle = reinterpret_cast<jlong>(jniHandle);
1513 jobject jResourceHandle =
1514 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1516 if (!jResourceHandle)
1518 LOGE("Failed to create OcResourceHandle");
1521 return jResourceHandle;
1525 * Class: org_iotivity_base_OcPlatform
1526 * Method: registerResource1
1527 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
1529 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1(
1532 jstring jResourceUri,
1533 jstring jResourceTypeName,
1534 jstring jResourceInterface,
1535 jobject jListener, jint jResourceProperty)
1537 LOGI("OcPlatform_registerResource1");
1538 std::string resourceUri;
1541 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1543 std::string resourceTypeName;
1544 if (jResourceTypeName)
1546 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1548 std::string resourceInterface;
1549 if (jResourceInterface)
1551 resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
1553 JniEntityHandler* entityHandler = NULL;
1554 EntityHandler handleEntityCallback = NULL;
1557 entityHandler = new JniEntityHandler(env, jListener);
1558 handleEntityCallback =
1559 [entityHandler](const std::shared_ptr<OCResourceRequest> request) -> OCEntityHandlerResult
1561 return entityHandler->handleEntity(request);
1565 OCResourceHandle resourceHandle;
1568 OCStackResult result = OCPlatform::registerResource(
1573 handleEntityCallback,
1574 static_cast<int>(jResourceProperty));
1576 if (OC_STACK_OK != result)
1578 delete entityHandler;
1579 ThrowOcException(result, "register resource");
1583 catch (OCException& e)
1585 LOGE("%s", e.reason().c_str());
1586 delete entityHandler;
1587 ThrowOcException(e.code(), e.reason().c_str());
1591 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1592 jlong handle = reinterpret_cast<jlong>(jniHandle);
1593 jobject jResourceHandle =
1594 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1595 if (!jResourceHandle)
1597 LOGE("Failed to create OcResourceHandle");
1601 return jResourceHandle;
1605 * Class: org_iotivity_base_OcPlatform
1606 * Method: registerDeviceInfo0
1607 * 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
1609 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0(
1612 jstring jDeviceName,
1613 jobjectArray jDeviceTypes)
1615 LOGI("OcPlatform_registerDeviceInfo");
1619 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceName cannot be null");
1625 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceTypes cannot be null");
1629 OCDeviceInfo deviceInfo;
1630 memset(&deviceInfo, 0, sizeof(deviceInfo));
1633 DuplicateString(&deviceInfo.deviceName, env->GetStringUTFChars(jDeviceName, nullptr));
1635 jsize len = env->GetArrayLength(jDeviceTypes);
1636 for (jsize i = 0; i < len; ++i)
1638 jstring jStr = (jstring)env->GetObjectArrayElement(jDeviceTypes, i);
1641 delete[] deviceInfo.deviceName;
1642 ThrowOcException(OC_STACK_INVALID_PARAM, "device type cannot be null");
1646 OCResourcePayloadAddStringLL(&deviceInfo.types, env->GetStringUTFChars(jStr, nullptr));
1647 if (env->ExceptionCheck())
1649 delete[] deviceInfo.deviceName;
1653 env->DeleteLocalRef(jStr);
1656 catch (std::exception &e)
1658 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1664 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1666 delete[] deviceInfo.deviceName;
1668 if (OC_STACK_OK != result)
1670 ThrowOcException(result, "Failed to register device info");
1674 catch (OCException& e)
1676 LOGE("%s", e.reason().c_str());
1677 ThrowOcException(e.code(), e.reason().c_str());
1682 * Class: org_iotivity_base_OcPlatform
1683 * Method: registerPlatformInfo0
1684 * 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
1686 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0(
1689 jstring jPlatformID,
1690 jstring jManufacturerName,
1691 jstring jManufacturerUrl,
1692 jstring jModelNumber,
1693 jstring jDateOfManufacture,
1694 jstring jPlatformVersion,
1695 jstring jOperatingSystemVersion,
1696 jstring jHardwareVersion,
1697 jstring jFirmwareVersion,
1698 jstring jSupportUrl,
1699 jstring jSystemTime)
1701 LOGI("OcPlatform_registerPlatformInfo");
1704 std::string platformID;
1705 std::string manufacturerName;
1706 std::string manufacturerUrl;
1707 std::string modelNumber;
1708 std::string dateOfManufacture;
1709 std::string platformVersion;
1710 std::string operatingSystemVersion;
1711 std::string hardwareVersion;
1712 std::string firmwareVersion;
1713 std::string supportUrl;
1714 std::string systemTime;
1718 platformID = env->GetStringUTFChars(jPlatformID, nullptr);
1720 if (jManufacturerName)
1722 manufacturerName = env->GetStringUTFChars(jManufacturerName, nullptr);
1724 if (jManufacturerUrl)
1726 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, nullptr);
1730 modelNumber = env->GetStringUTFChars(jModelNumber, nullptr);
1732 if (jDateOfManufacture)
1734 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, nullptr);
1736 if (jPlatformVersion)
1738 platformVersion = env->GetStringUTFChars(jPlatformVersion, nullptr);
1740 if (jOperatingSystemVersion)
1742 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, nullptr);
1744 if (jHardwareVersion)
1746 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, nullptr);
1748 if (jFirmwareVersion)
1750 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, nullptr);
1754 supportUrl = env->GetStringUTFChars(jSupportUrl, nullptr);
1758 systemTime = env->GetStringUTFChars(jSystemTime, nullptr);
1761 OCPlatformInfo platformInfo;
1764 DuplicateString(&platformInfo.platformID, platformID);
1765 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1766 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1767 DuplicateString(&platformInfo.modelNumber, modelNumber);
1768 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1769 DuplicateString(&platformInfo.platformVersion, platformVersion);
1770 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1771 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1772 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1773 DuplicateString(&platformInfo.supportUrl, supportUrl);
1774 DuplicateString(&platformInfo.systemTime, systemTime);
1776 catch (std::exception &e)
1778 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1782 // __android_log_print(ANDROID_LOG_INFO, "Rahul", "platformID = %s", platformID);
1785 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1787 delete[] platformInfo.platformID;
1788 delete[] platformInfo.manufacturerName;
1789 delete[] platformInfo.manufacturerUrl;
1790 delete[] platformInfo.modelNumber;
1791 delete[] platformInfo.dateOfManufacture;
1792 delete[] platformInfo.platformVersion;
1793 delete[] platformInfo.operatingSystemVersion;
1794 delete[] platformInfo.hardwareVersion;
1795 delete[] platformInfo.firmwareVersion;
1796 delete[] platformInfo.supportUrl;
1797 delete[] platformInfo.systemTime;
1799 if (OC_STACK_OK != result)
1801 ThrowOcException(result, "Failed to register platform info");
1805 catch (OCException& e)
1807 LOGE("Error is due to %s", e.reason().c_str());
1808 ThrowOcException(e.code(), e.reason().c_str());
1812 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_setPropertyValue0
1813 (JNIEnv *env, jclass clazz, jint jType, jstring jPropName, jobjectArray jPropValue)
1817 OCPayloadType type = (OCPayloadType)jType;
1818 std::string propName;
1819 std::vector<std::string> propValue;
1822 propName = env->GetStringUTFChars(jPropName, nullptr);
1826 JniUtils::convertJavaStrArrToStrVector(env, jPropValue, propValue);
1828 OCStackResult result = OCPlatform::setPropertyValue(type, propName, propValue);
1829 if (OC_STACK_OK != result)
1831 ThrowOcException(result, "Failed to set property");
1835 catch (OCException& e)
1837 LOGE("Error is due to %s", e.reason().c_str());
1838 ThrowOcException(e.code(), e.reason().c_str());
1844 * Class: org_iotivity_base_OcPlatform
1845 * Method: setPropertyValue0
1846 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
1848 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_setPropertyValue1
1849 (JNIEnv *env, jclass clazz, jint jType, jstring jPropName, jstring jPropValue)
1853 OCPayloadType type = (OCPayloadType)jType;
1854 std::string propName;
1855 std::string propValue;
1858 propName = env->GetStringUTFChars(jPropName, nullptr);
1862 propValue = env->GetStringUTFChars(jPropValue, nullptr);
1864 OCStackResult result = OCPlatform::setPropertyValue(type, propName, propValue);
1865 if (OC_STACK_OK != result)
1867 ThrowOcException(result, "Failed to set property");
1871 catch (OCException& e)
1873 LOGE("Error is due to %s", e.reason().c_str());
1874 ThrowOcException(e.code(), e.reason().c_str());
1879 * Class: org_iotivity_base_OcPlatform
1880 * Method: getPropertyValue
1881 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
1883 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPropertyValue0
1884 (JNIEnv *env, jclass clazz, jint jType, jstring jPropName, jstring jPropValue)
1888 OCPayloadType type = (OCPayloadType) jType;
1889 std::string propName;
1890 std::string propValue;
1894 propName = env->GetStringUTFChars(jPropName, nullptr);
1896 OCStackResult result = OCPlatform::getPropertyValue(type, propName, propValue);
1897 if (OC_STACK_OK != result)
1899 ThrowOcException(result, "Failed to get property value.");
1903 catch (OCException& e)
1905 LOGE("Error is due to %s", e.reason().c_str());
1906 ThrowOcException(e.code(), e.reason().c_str());
1911 * Class: org_iotivity_base_OcPlatform
1912 * Method: unregisterResource0
1913 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1915 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0(
1916 JNIEnv *env, jclass clazz, jobject jResourceHandle)
1918 LOGI("OcPlatform_unregisterResource");
1919 if (!jResourceHandle)
1921 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1924 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1925 env, jResourceHandle);
1926 if (!jniOcResourceHandle)
1933 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1934 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1935 if (OC_STACK_OK != result)
1937 ThrowOcException(result, "Failed to unregister resource");
1940 catch (OCException& e)
1942 LOGE("%s", e.reason().c_str());
1943 ThrowOcException(e.code(), e.reason().c_str());
1948 * Class: org_iotivity_base_OcPlatform
1949 * Method: bindResource0
1950 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1952 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1953 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1955 LOGI("OcPlatform_bindResource");
1956 if (!jResourceCollectionHandle)
1958 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1961 if (!jResourceHandle)
1963 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1966 JniOcResourceHandle* jniOcResourceCollectionHandle =
1967 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1968 if (!jniOcResourceCollectionHandle)
1973 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1974 env, jResourceHandle);
1975 if (!jniOcResourceHandle)
1982 OCStackResult result = OCPlatform::bindResource(
1983 jniOcResourceCollectionHandle->getOCResourceHandle(),
1984 jniOcResourceHandle->getOCResourceHandle()
1987 if (OC_STACK_OK != result)
1989 ThrowOcException(result, "Failed to bind resource");
1992 catch (OCException& e)
1994 LOGE("%s", e.reason().c_str());
1995 ThrowOcException(e.code(), e.reason().c_str());
2000 * Class: org_iotivity_base_OcPlatform
2001 * Method: bindResources0
2002 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
2004 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0(
2007 jobject jResourceCollectionHandle,
2008 jobjectArray jResourceHandleArray)
2010 LOGI("OcPlatform_bindResources");
2012 if (!jResourceCollectionHandle)
2014 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
2017 if (!jResourceHandleArray)
2019 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
2023 JniOcResourceHandle* jniOcResourceCollectionHandle =
2024 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
2025 if (!jniOcResourceCollectionHandle)
2030 std::vector<OCResourceHandle> resourceHandleList;
2031 int len = env->GetArrayLength(jResourceHandleArray);
2032 for (int i = 0; i < len; ++i)
2034 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
2035 if (!jResourceHandle)
2037 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
2041 JniOcResourceHandle* jniOcResourceHandle =
2042 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2043 if (!jniOcResourceHandle)
2048 resourceHandleList.push_back(
2049 jniOcResourceHandle->getOCResourceHandle());
2054 OCStackResult result = OCPlatform::bindResources(
2055 jniOcResourceCollectionHandle->getOCResourceHandle(),
2059 if (OC_STACK_OK != result)
2061 ThrowOcException(result, "Failed to bind resources");
2064 catch (OCException& e)
2066 LOGE("%s", e.reason().c_str());
2067 ThrowOcException(e.code(), e.reason().c_str());
2072 * Class: org_iotivity_base_OcPlatform
2073 * Method: unbindResource0
2074 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
2076 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0(
2079 jobject jResourceCollectionHandle,
2080 jobject jResourceHandle)
2082 LOGI("OcPlatform_unbindResource");
2083 if (!jResourceCollectionHandle)
2085 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
2088 if (!jResourceHandle)
2090 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
2094 JniOcResourceHandle* jniOcResourceCollectionHandle =
2095 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
2096 if (!jniOcResourceCollectionHandle)
2101 JniOcResourceHandle* jniOcResourceHandle =
2102 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2103 if (!jniOcResourceHandle)
2110 OCStackResult result = OCPlatform::unbindResource(
2111 jniOcResourceCollectionHandle->getOCResourceHandle(),
2112 jniOcResourceHandle->getOCResourceHandle());
2114 if (OC_STACK_OK != result)
2116 ThrowOcException(result, "Failed to unbind resource");
2119 catch (OCException& e)
2121 LOGE("%s", e.reason().c_str());
2122 ThrowOcException(e.code(), e.reason().c_str());
2127 * Class: org_iotivity_base_OcPlatform
2128 * Method: unbindResources0
2129 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
2131 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0(
2134 jobject jResourceCollectionHandle,
2135 jobjectArray jResourceHandleArray)
2137 LOGI("OcPlatform_unbindResources");
2138 if (!jResourceCollectionHandle)
2140 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
2143 if (!jResourceHandleArray)
2145 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
2149 JniOcResourceHandle* jniOcResourceCollectionHandle =
2150 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
2151 if (!jniOcResourceCollectionHandle)
2156 std::vector<OCResourceHandle> resourceHandleList;
2157 int len = env->GetArrayLength(jResourceHandleArray);
2158 for (int i = 0; i < len; ++i)
2160 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
2161 if (!jResourceHandle)
2163 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
2167 JniOcResourceHandle* jniOcResourceHandle =
2168 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2169 if (!jniOcResourceHandle)
2174 resourceHandleList.push_back(
2175 jniOcResourceHandle->getOCResourceHandle());
2180 OCStackResult result = OCPlatform::unbindResources(
2181 jniOcResourceCollectionHandle->getOCResourceHandle(),
2185 if (OC_STACK_OK != result)
2187 ThrowOcException(result, "Failed to unbind resources");
2190 catch (OCException& e)
2192 LOGE("%s", e.reason().c_str());
2193 ThrowOcException(e.code(), e.reason().c_str());
2198 * Class: org_iotivity_base_OcPlatform
2199 * Method: bindTypeToResource0
2200 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
2202 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0(
2205 jobject jResourceHandle,
2206 jstring jResourceTypeName)
2208 LOGI("OcPlatform_bindTypeToResource");
2209 if (!jResourceHandle)
2211 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
2214 std::string typeName;
2215 if (jResourceTypeName)
2217 typeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
2220 JniOcResourceHandle* jniOcResourceHandle =
2221 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2222 if (!jniOcResourceHandle)
2229 OCStackResult result = OCPlatform::bindTypeToResource(
2230 jniOcResourceHandle->getOCResourceHandle(),
2234 if (OC_STACK_OK != result)
2236 ThrowOcException(result, "Failed to bind type to resource");
2239 catch (OCException& e)
2241 LOGE("%s", e.reason().c_str());
2242 ThrowOcException(e.code(), e.reason().c_str());
2247 * Class: org_iotivity_base_OcPlatform
2248 * Method: bindInterfaceToResource0
2249 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
2251 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
2252 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
2254 LOGI("OcPlatform_bindInterfaceToResource");
2255 if (!jResourceHandle)
2257 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
2260 std::string interfaceName;
2261 if (jResourceInterfaceName)
2263 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, nullptr);
2266 JniOcResourceHandle* jniOcResourceHandle =
2267 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
2268 if (!jniOcResourceHandle)
2275 OCStackResult result = OCPlatform::bindInterfaceToResource(
2276 jniOcResourceHandle->getOCResourceHandle(),
2280 if (OC_STACK_OK != result)
2282 ThrowOcException(result, "Failed to bind interface to resource");
2285 catch (OCException& e)
2287 LOGE("%s", e.reason().c_str());
2288 ThrowOcException(e.code(), e.reason().c_str());
2293 * Class: org_iotivity_base_OcPlatform
2294 * Method: startPresence0
2297 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0(
2298 JNIEnv *env, jclass clazz, jint ttl)
2300 LOGI("OcPlatform_startPresence");
2304 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
2306 if (OC_STACK_OK != result)
2308 ThrowOcException(result, "Failed to start presence");
2311 catch (OCException& e)
2313 LOGE("%s", e.reason().c_str());
2314 ThrowOcException(e.code(), e.reason().c_str());
2319 * Class: org_iotivity_base_OcPlatform
2320 * Method: stopPresence0
2323 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0(
2324 JNIEnv *env, jclass clazz)
2326 LOGI("OcPlatform_stopPresence");
2330 OCStackResult result = OCPlatform::stopPresence();
2332 if (OC_STACK_OK != result)
2334 ThrowOcException(result, "Failed to stop presence");
2337 catch (OCException& e)
2339 LOGE("%s", e.reason().c_str());
2340 ThrowOcException(e.code(), e.reason().c_str());
2345 * Class: org_iotivity_base_OcPlatform
2346 * Method: subscribePresence0
2347 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
2349 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0(
2353 jint jConnectivityType,
2356 LOGD("OcPlatform_subscribePresence");
2360 host = env->GetStringUTFChars(jHost, nullptr);
2364 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
2368 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
2370 SubscribeCallback subscribeCallback =
2371 [onPresenceListener](OCStackResult result,
2372 const unsigned int nonce,
2373 const std::string& hostAddress)
2375 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
2378 OCPlatform::OCPresenceHandle presenceHandle;
2381 OCStackResult result = OCPlatform::subscribePresence(
2384 static_cast<OCConnectivityType>(jConnectivityType),
2387 if (OC_STACK_OK != result)
2389 ThrowOcException(result, "subscribe presence has failed");
2392 catch (OCException& e)
2394 LOGE("%s", e.reason().c_str());
2395 ThrowOcException(e.code(), e.reason().c_str());
2399 JniOcPresenceHandle* jniPresenceHandle =
2400 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
2401 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
2402 jobject jPresenceHandle =
2403 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
2404 if (!jPresenceHandle)
2406 LOGE("Failed to create OcPresenceHandle");
2407 delete jniPresenceHandle;
2409 return jPresenceHandle;
2413 * Class: org_iotivity_base_OcPlatform
2414 * Method: subscribePresence1
2415 * Signature: (Ljava/lang/String;Ljava/lang/String;I
2416 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
2418 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1(
2422 jstring jResourceType,
2423 jint jConnectivityType,
2426 LOGD("OcPlatform_subscribePresence1");
2430 host = env->GetStringUTFChars(jHost, nullptr);
2432 std::string resourceType;
2435 resourceType = env->GetStringUTFChars(jResourceType, nullptr);
2439 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
2443 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
2445 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
2446 const unsigned int nonce, const std::string& hostAddress)
2448 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
2451 OCPlatform::OCPresenceHandle presenceHandle;
2454 OCStackResult result = OCPlatform::subscribePresence(
2458 static_cast<OCConnectivityType>(jConnectivityType),
2461 if (OC_STACK_OK != result)
2463 ThrowOcException(result, "subscribe presence has failed");
2466 catch (OCException& e)
2468 LOGE("%s", e.reason().c_str());
2469 ThrowOcException(e.code(), e.reason().c_str());
2473 JniOcPresenceHandle* jniPresenceHandle =
2474 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
2475 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
2476 jobject jPresenceHandle =
2477 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
2478 if (!jPresenceHandle)
2480 LOGE("Failed to create OcPresenceHandle");
2481 delete jniPresenceHandle;
2483 return jPresenceHandle;
2487 * Class: org_iotivity_base_OcPlatform
2488 * Method: unsubscribePresence0
2489 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
2491 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0(
2492 JNIEnv *env, jclass clazz, jobject jPresenceHandle)
2494 LOGD("OcPlatform_unsubscribePresence");
2495 if (!jPresenceHandle)
2497 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
2500 JniOcPresenceHandle* jniPresenceHandle =
2501 JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
2502 if (!jniPresenceHandle)
2507 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
2511 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
2513 if (OC_STACK_OK != result)
2515 ThrowOcException(result, "unsubscribe presence has failed");
2519 JniOnPresenceListener* jniPresenceListener = jniPresenceHandle->getJniOnPresenceListener();
2520 if (jniPresenceListener)
2522 jweak jwOnPresenceListener = jniPresenceListener->getJWListener();
2523 if (jwOnPresenceListener)
2525 RemoveOnPresenceListener(env, jwOnPresenceListener);
2529 catch (OCException& e)
2531 LOGE("%s", e.reason().c_str());
2532 ThrowOcException(e.code(), e.reason().c_str());
2537 * Class: org_iotivity_base_OcPlatform
2538 * Method: subscribeDevicePresence0
2539 * Signature: (Ljava/lang/String;[Ljava/lang/String;I
2540 Lorg/iotivity/base/OcResource/OnObserveListener;)Lorg/iotivity/base/OcPresenceHandle;
2542 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribeDevicePresence0(
2546 jobjectArray jDiArray,
2547 jint jConnectivityType,
2550 LOGD("OcPlatform_subscribeDevicePresence0");
2555 host = env->GetStringUTFChars(jHost, nullptr);
2560 ThrowOcException(OC_STACK_INVALID_PARAM, "device id List cannot be null");
2564 std::vector<std::string> di;
2565 JniUtils::convertJavaStrArrToStrVector(env, jDiArray, di);
2569 ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");
2573 JniOnObserveListener *onObserveListener = AddOnObserveListener(env, jListener);
2575 ObserveCallback observeCallback = [onObserveListener](const HeaderOptions& opts,
2576 const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)
2578 onObserveListener->onObserveCallback(opts, rep, eCode, sequenceNumber);
2581 OCPlatform::OCPresenceHandle presenceHandle;
2584 OCStackResult result = OCPlatform::subscribeDevicePresence(
2588 static_cast<OCConnectivityType>(jConnectivityType),
2591 if (OC_STACK_OK != result)
2593 ThrowOcException(result, "subscribe device presence has failed");
2596 catch (OCException& e)
2598 LOGE("%s", e.reason().c_str());
2599 ThrowOcException(e.code(), e.reason().c_str());
2603 JniOcPresenceHandle* jniPresenceHandle =
2604 new JniOcPresenceHandle(onObserveListener, presenceHandle);
2605 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
2606 jobject jPresenceHandle =
2607 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
2608 if (!jPresenceHandle)
2610 LOGE("Failed to create OcPresenceHandle");
2611 delete jniPresenceHandle;
2613 return jPresenceHandle;
2615 ThrowOcException(JNI_NO_SUPPORT, "Not supported");
2621 * Class: org_iotivity_base_OcPlatform
2622 * Method: constructResourceObject0
2623 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
2624 Lorg/iotivity/base/OcResource;
2626 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0(
2631 jint jConnectivityType,
2632 jboolean jIsObservable,
2633 jobjectArray jResourceTypeArray,
2634 jobjectArray jInterfaceArray)
2636 LOGD("OcPlatform_constructResourceObject");
2640 host = env->GetStringUTFChars(jHost, nullptr);
2645 uri = env->GetStringUTFChars(jUri, nullptr);
2647 if (!jResourceTypeArray)
2649 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
2652 if (!jInterfaceArray)
2654 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
2658 std::vector<std::string> resourceTypes;
2659 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
2661 std::vector<std::string> interfaces;
2662 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
2664 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
2667 static_cast<OCConnectivityType>(jConnectivityType),
2668 static_cast<bool>(jIsObservable),
2674 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
2678 JniOcResource *jniOcResource = new JniOcResource(resource);
2680 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
2683 delete jniOcResource;
2686 SetHandle<JniOcResource>(env, jResource, jniOcResource);
2687 if (env->ExceptionCheck())
2689 delete jniOcResource;
2696 * Class: org_iotivity_base_OcPlatform
2697 * Method: sendResponse0
2698 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
2700 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0(
2701 JNIEnv *env, jclass clazz, jobject jResourceResponse)
2703 LOGD("OcPlatform_sendResponse");
2704 if (!jResourceResponse)
2706 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
2710 JniOcResourceResponse *jniResponse =
2711 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
2719 OCStackResult result =
2720 OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
2722 if (OC_STACK_OK != result)
2724 ThrowOcException(result, "failed to send response");
2727 catch (OCException& e)
2729 LOGE("%s", e.reason().c_str());
2730 ThrowOcException(e.code(), e.reason().c_str());
2735 * Class: org_iotivity_base_OcPlatform
2736 * Method: constructAccountManagerObject0
2737 * Signature: (Ljava/lang/String;I)Lorg/iotivity/base/OcAccountManager;
2739 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructAccountManagerObject0(
2743 jint jConnectivityType)
2746 ThrowOcException(OC_STACK_ERROR,
2747 "OCAccountManager is not supported. (Please build with WITH_CLOUD=1 option)");
2750 LOGD("OcPlatform_constructAccountManagerObject");
2753 ThrowOcException(OC_STACK_INVALID_PARAM, "host cannot be null");
2757 const char* charHost = env->GetStringUTFChars(jHost, nullptr);
2760 ThrowOcException(JNI_EXCEPTION, "charHost is null");
2763 std::string host(charHost);
2764 env->ReleaseStringUTFChars(jHost, charHost);
2766 std::shared_ptr<OCAccountManager> accountManager = OCPlatform::constructAccountManagerObject(
2768 static_cast<OCConnectivityType>(jConnectivityType));
2770 if (!accountManager)
2772 ThrowOcException(OC_STACK_ERROR, "Failed to create OCAccountManager");
2776 JniOcAccountManager *jniOcAccountManager = new JniOcAccountManager(accountManager);
2778 jobject jAccountManager = env->NewObject(g_cls_OcAccountManager, g_mid_OcAccountManager_ctor);
2779 if (!jAccountManager)
2781 delete jniOcAccountManager;
2784 SetHandle<JniOcAccountManager>(env, jAccountManager, jniOcAccountManager);
2785 if (env->ExceptionCheck())
2787 delete jniOcAccountManager;
2790 return jAccountManager;
2795 * Class: org_iotivity_base_OcPlatform
2796 * Method: getDeviceId
2799 JNIEXPORT jbyteArray JNICALL Java_org_iotivity_base_OcPlatform_getDeviceId
2800 (JNIEnv *env, jobject thiz)
2802 LOGD("OcPlatform_getDeviceId");
2803 OCUUIdentity deviceId;
2805 jbyteArray ret = env->NewByteArray(UUID_IDENTITY_SIZE);
2806 jbyte uuid[UUID_IDENTITY_SIZE];
2810 OCStackResult result = OCPlatform::getDeviceId(&deviceId);
2811 LOGD("OcPlatform_getDeviceId return from CPP");
2812 if (OC_STACK_OK != result)
2814 ThrowOcException(result, "Error while getting my device Id");
2818 for(int i=0;i < UUID_IDENTITY_SIZE; i++)
2820 uuid[i] =(jbyte) deviceId.id[i];
2825 catch (OCException& e)
2827 LOGE("%s", e.reason().c_str());
2828 ThrowOcException(e.code(), e.reason().c_str());
2831 env->SetByteArrayRegion(ret, 0, UUID_IDENTITY_SIZE, uuid);
2837 * Class: org_iotivity_base_OcPlatform
2838 * Method: setDeviceId
2839 * Signature: (Ljava/lang/byte;)V
2841 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_setDeviceId(
2842 JNIEnv *env, jobject thiz, jbyteArray data)
2844 LOGI("OcPlatform_setDeviceId");
2845 OCUUIdentity deviceId;
2848 OCStackResult result;
2849 jbyte* uuid = env->GetByteArrayElements(data, 0);
2850 jsize arrayLength = env->GetArrayLength(data);
2851 if(arrayLength!=UUID_IDENTITY_SIZE)
2853 ThrowOcException(OC_STACK_INVALID_PARAM, "Byte length not equal to UUID_IDENTITY_SIZE");
2857 for(int i=0;i < UUID_IDENTITY_SIZE; i++)
2859 deviceId.id[i]=(jchar)uuid[i];
2861 result = OCPlatform::setDeviceId(&deviceId);
2862 if (OC_STACK_OK != result)
2864 ThrowOcException(result, "Failed to set DeviceId");
2868 catch (OCException& e)
2870 LOGE("%s", e.reason().c_str());
2871 ThrowOcException(e.code(), e.reason().c_str());
2876 * Class: org_iotivity_base_OcPlatform
2877 * Method: findKeepAliveResourceImpl
2878 * Signature: (Ljava/lang/String;Lorg/iotivity/base/OcPlatform/KeepAliveListener;)V
2880 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findKeepAliveResourceImpl(
2881 JNIEnv *env, jclass clazz, jstring jHost, jobject jListener)
2884 ThrowOcException(OC_STACK_ERROR,
2885 "findKeepAliveResource is not supported. (Please build with WITH_TCP=1 option)");
2888 LOGI("OcPlatform_findKeepAliveResource");
2892 ThrowOcException(OC_STACK_INVALID_PARAM, "host cannot be null");
2897 host = env->GetStringUTFChars(jHost, nullptr);
2902 ThrowOcException(OC_STACK_INVALID_PARAM, "onKeepAliveFoundListener cannot be null");
2906 JniKeepAliveListener *onKeepAliveFoundListener = AddKeepAliveListener(env, jListener);
2908 KeepAliveCallback KeepAliveCallback = [onKeepAliveFoundListener](const int ret,
2909 const OCRepresentation& rep)
2911 onKeepAliveFoundListener->onKeepAliveListener(ret, rep);
2916 OCStackResult result = OCPlatform::findKeepAliveResource(host, KeepAliveCallback);
2918 if (OC_STACK_OK != result)
2920 ThrowOcException(result, "findKeepAliveResource has failed");
2923 catch (OCException& e)
2925 LOGE("%s", e.reason().c_str());
2926 ThrowOcException(e.code(), e.reason().c_str());
2933 * Class: org_iotivity_base_OcPlatform
2934 * Method: sendKeepAliveRequestImpl
2935 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/KeepAliveListener;)V
2937 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendKeepAliveRequestImpl(
2938 JNIEnv *env, jclass clazz, jstring jHost, jobject jRep, jobject jListener)
2941 ThrowOcException(OC_STACK_ERROR,
2942 "sendKeepAlive is not supported. (Please build with WITH_TCP=1 option)");
2945 LOGI("OcPlatform_sendKeepAliveRequest");
2949 ThrowOcException(OC_STACK_INVALID_PARAM, "host cannot be null");
2954 host = env->GetStringUTFChars(jHost, nullptr);
2959 ThrowOcException(OC_STACK_INVALID_PARAM, "keepAliveResponseListener cannot be null");
2963 JniKeepAliveListener *KeepAliveResponseListener = AddKeepAliveListener(env, jListener);
2965 KeepAliveCallback KeepAliveCallback = [KeepAliveResponseListener](const int ret,
2966 const OCRepresentation& rep)
2968 KeepAliveResponseListener->onKeepAliveListener(ret, rep);
2973 OCRepresentation *rep = JniOcRepresentation::getOCRepresentationPtr(env, jRep);
2974 OCStackResult result = OCPlatform::sendKeepAliveRequest(host, *rep, KeepAliveCallback);
2976 if (OC_STACK_OK != result)
2978 ThrowOcException(result, "sendKeepAliveRequest has failed");
2981 catch (OCException& e)
2983 LOGE("%s", e.reason().c_str());
2984 ThrowOcException(e.code(), e.reason().c_str());