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"
32 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
34 JniOnResourceFoundListener *onResourceFoundListener = nullptr;
36 resourceFoundMapLock.lock();
38 for (auto it = onResourceFoundListenerMap.begin();
39 it != onResourceFoundListenerMap.end();
42 if (env->IsSameObject(jListener, it->first))
44 auto refPair = it->second;
45 onResourceFoundListener = refPair.first;
48 onResourceFoundListenerMap.insert(*it);
49 LOGD("OnResourceFoundListener: ref. count incremented");
54 if (!onResourceFoundListener)
56 onResourceFoundListener =
57 new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
58 jobject jgListener = env->NewGlobalRef(jListener);
60 onResourceFoundListenerMap.insert(
62 std::pair<JniOnResourceFoundListener*, int >>(
64 std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener,
66 LOGD("OnResourceFoundListener: new listener");
68 resourceFoundMapLock.unlock();
69 return onResourceFoundListener;
72 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
74 resourceFoundMapLock.lock();
76 for (auto it = onResourceFoundListenerMap.begin();
77 it != onResourceFoundListenerMap.end();
80 if (env->IsSameObject(jListener, it->first))
82 auto refPair = it->second;
83 if (refPair.second > 1)
87 onResourceFoundListenerMap.insert(*it);
88 LOGI("OnResourceFoundListener: ref. count decremented");
92 env->DeleteGlobalRef(it->first);
93 JniOnResourceFoundListener* listener = refPair.first;
95 onResourceFoundListenerMap.erase(it);
96 LOGI("OnResourceFoundListener removed");
101 resourceFoundMapLock.unlock();
104 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
106 JniOnDeviceInfoListener *onDeviceInfoListener = nullptr;
108 deviceInfoMapLock.lock();
110 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
112 if (env->IsSameObject(jListener, it->first))
114 auto refPair = it->second;
115 onDeviceInfoListener = refPair.first;
117 it->second = refPair;
118 onDeviceInfoListenerMap.insert(*it);
119 LOGD("OnDeviceInfoListener: ref. count incremented");
124 if (!onDeviceInfoListener)
126 onDeviceInfoListener =
127 new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
128 jobject jgListener = env->NewGlobalRef(jListener);
130 onDeviceInfoListenerMap.insert(
132 std::pair<JniOnDeviceInfoListener*, int>>(
134 std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
135 LOGI("OnDeviceInfoListener: new listener");
138 deviceInfoMapLock.unlock();
139 return onDeviceInfoListener;
142 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
144 deviceInfoMapLock.lock();
145 bool isFound = false;
146 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
148 if (env->IsSameObject(jListener, it->first))
150 auto refPair = it->second;
151 if (refPair.second > 1)
154 it->second = refPair;
155 onDeviceInfoListenerMap.insert(*it);
156 LOGI("OnDeviceInfoListener: ref. count decremented");
160 env->DeleteGlobalRef(it->first);
161 JniOnDeviceInfoListener* listener = refPair.first;
163 onDeviceInfoListenerMap.erase(it);
165 LOGI("OnDeviceInfoListener removed");
175 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
177 deviceInfoMapLock.unlock();
180 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
182 JniOnPlatformInfoListener *onPlatformInfoListener = nullptr;
184 platformInfoMapLock.lock();
186 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
188 if (env->IsSameObject(jListener, it->first))
190 auto refPair = it->second;
191 onPlatformInfoListener = refPair.first;
193 it->second = refPair;
194 onPlatformInfoListenerMap.insert(*it);
195 LOGD("OnPlatformInfoListener: ref. count incremented");
200 if (!onPlatformInfoListener)
202 onPlatformInfoListener =
203 new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
204 jobject jgListener = env->NewGlobalRef(jListener);
206 onPlatformInfoListenerMap.insert(
207 std::pair<jobject, std::pair<JniOnPlatformInfoListener*, int>>(
209 std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
210 LOGI("OnPlatformInfoListener: new listener");
213 platformInfoMapLock.unlock();
214 return onPlatformInfoListener;
217 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
219 platformInfoMapLock.lock();
220 bool isFound = false;
221 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
223 if (env->IsSameObject(jListener, it->first))
225 auto refPair = it->second;
226 if (refPair.second > 1)
229 it->second = refPair;
230 onPlatformInfoListenerMap.insert(*it);
231 LOGI("OnPlatformInfoListener: ref. count decremented");
235 env->DeleteGlobalRef(it->first);
236 JniOnPlatformInfoListener* listener = refPair.first;
238 onPlatformInfoListenerMap.erase(it);
240 LOGI("OnPlatformInfoListener removed");
250 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
252 platformInfoMapLock.unlock();
255 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
257 JniOnPresenceListener *onPresenceListener = nullptr;
259 presenceMapLock.lock();
261 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
263 if (env->IsSameObject(jListener, it->first))
265 auto refPair = it->second;
266 onPresenceListener = refPair.first;
268 it->second = refPair;
269 onPresenceListenerMap.insert(*it);
270 LOGD("OnPresenceListener: ref. count incremented");
274 if (!onPresenceListener)
276 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
277 jobject jgListener = env->NewGlobalRef(jListener);
278 onPresenceListenerMap.insert(
279 std::pair<jobject, std::pair<JniOnPresenceListener*, int>>(
281 std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
282 LOGI("OnPresenceListener: new listener");
284 presenceMapLock.unlock();
285 return onPresenceListener;
288 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
290 presenceMapLock.lock();
291 bool isFound = false;
292 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
294 if (env->IsSameObject(jListener, it->first))
296 auto refPair = it->second;
297 if (refPair.second > 1)
300 it->second = refPair;
301 onPresenceListenerMap.insert(*it);
302 LOGI("OnPresenceListener: ref. count decremented");
306 env->DeleteGlobalRef(it->first);
307 JniOnPresenceListener* listener = refPair.first;
309 onPresenceListenerMap.erase(it);
310 LOGI("OnPresenceListener is removed");
318 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
320 presenceMapLock.unlock();
324 * Class: org_iotivity_base_OcPlatform
326 * Signature: (IILjava/lang/String;II)V
328 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
329 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort,
330 jint jQOS, jstring jDbPath)
332 LOGI("OcPlatform_configure");
334 std::string ipAddress;
338 ipAddress = env->GetStringUTFChars(jIpAddress, nullptr);
342 dbfile = env->GetStringUTFChars(jDbPath, nullptr);
343 JniOcSecurity::StoreDbPath(dbfile);
348 port = static_cast<uint16_t>(jPort);
352 JniUtils::getServiceType(env, jServiceType),
353 JniUtils::getModeType(env, jModeType),
356 JniUtils::getQOS(env, static_cast<int>(jQOS)),
357 JniOcSecurity::getOCPersistentStorage()
359 OCPlatform::Configure(cfg);
363 * Class: org_iotivity_base_OcPlatform
364 * Method: notifyAllObservers0
365 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
367 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
368 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
370 LOGI("OcPlatform_notifyAllObservers");
371 if (!jResourceHandle)
373 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
377 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
378 env, jResourceHandle);
379 if (!jniOcResourceHandle) return;
383 OCStackResult result =
384 OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
386 if (OC_STACK_OK != result)
388 ThrowOcException(result, "Failed to notify all observers");
392 catch (OCException& e)
394 LOGE("%s", e.reason().c_str());
395 ThrowOcException(e.code(), e.reason().c_str());
400 * Class: org_iotivity_base_OcPlatform
401 * Method: notifyAllObservers1
402 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
404 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
405 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
407 LOGI("OcPlatform_notifyAllObservers1");
409 if (!jResourceHandle)
411 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
415 JniOcResourceHandle* jniOcResourceHandle =
416 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
417 if (!jniOcResourceHandle)
423 OCStackResult result = OCPlatform::notifyAllObservers(
424 jniOcResourceHandle->getOCResourceHandle(),
425 JniUtils::getQOS(env, static_cast<int>(jQoS)));
427 if (OC_STACK_OK != result)
429 ThrowOcException(result, "Failed to notify all observers");
433 catch (OCException& e)
435 LOGE("%s", e.reason().c_str());
436 ThrowOcException(e.code(), e.reason().c_str());
441 * Class: org_iotivity_base_OcPlatform
442 * Method: notifyListOfObservers2
443 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
445 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2(
448 jobject jResourceHandle,
449 jbyteArray jObservationIdArr,
450 jobject jResourceResponse)
452 LOGD("OcPlatform_notifyListOfObservers2");
453 if (!jResourceHandle)
455 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
458 if (!jObservationIdArr)
460 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
463 if (!jResourceResponse)
465 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
469 JniOcResourceHandle* jniOcResourceHandle =
470 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
471 if (!jniOcResourceHandle)
476 JniOcResourceResponse* jniOcResourceResponse =
477 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
478 if (!jniOcResourceResponse)
483 int len = env->GetArrayLength(jObservationIdArr);
484 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
486 ObservationIds observationIds;
487 for (int i = 0; i < len; ++i)
489 observationIds.push_back(bArr[i]);
492 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
496 OCStackResult result = OCPlatform::notifyListOfObservers(
497 jniOcResourceHandle->getOCResourceHandle(),
499 jniOcResourceResponse->getOCResourceResponse());
501 if (OC_STACK_OK != result)
503 ThrowOcException(result, "Failed to notify all observers");
506 catch (OCException& e)
508 LOGE("%s", e.reason().c_str());
509 ThrowOcException(e.code(), e.reason().c_str());
514 * Class: org_iotivity_base_OcPlatform
515 * Method: notifyListOfObservers3
516 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
518 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3(
521 jobject jResourceHandle,
522 jbyteArray jObservationIdArr,
523 jobject jResourceResponse,
526 LOGD("OcPlatform_notifyListOfObservers3");
527 if (!jResourceHandle)
529 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
532 if (!jObservationIdArr)
534 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
537 if (!jResourceResponse)
539 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
543 JniOcResourceHandle* jniOcResourceHandle =
544 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
545 if (!jniOcResourceHandle)
550 JniOcResourceResponse* jniOcResourceResponse =
551 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
552 if (!jniOcResourceResponse)
557 int len = env->GetArrayLength(jObservationIdArr);
558 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
560 ObservationIds observationIds;
561 for (int i = 0; i < len; ++i)
563 observationIds.push_back(bArr[i]);
566 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
570 OCStackResult result = OCPlatform::notifyListOfObservers(
571 jniOcResourceHandle->getOCResourceHandle(),
573 jniOcResourceResponse->getOCResourceResponse(),
574 JniUtils::getQOS(env, static_cast<int>(jQoS)));
576 if (OC_STACK_OK != result)
578 ThrowOcException(result, "Failed to notify all observers");
581 catch (OCException& e)
583 LOGE("%s", e.reason().c_str());
584 ThrowOcException(e.code(), e.reason().c_str());
589 * Class: org_iotivity_base_OcPlatform
590 * Method: findResource0
591 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
593 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0(
597 jstring jResourceUri,
598 jint jConnectivityType,
601 LOGD("OcPlatform_findResource");
605 host = env->GetStringUTFChars(jHost, nullptr);
607 std::string resourceUri;
610 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
614 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
618 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
620 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
622 onResFoundListener->foundResourceCallback(resource);
627 OCStackResult result = OCPlatform::findResource(
630 static_cast<OCConnectivityType>(jConnectivityType),
633 if (OC_STACK_OK != result)
635 ThrowOcException(result, "Find resource has failed");
639 catch (OCException& e)
641 LOGE("%s", e.reason().c_str());
642 ThrowOcException(e.code(), e.reason().c_str());
647 * Class: org_iotivity_base_OcPlatform
648 * Method: findResource1
649 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
651 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1(
655 jstring jResourceUri,
656 jint jConnectivityType,
660 LOGD("OcPlatform_findResource");
664 host = env->GetStringUTFChars(jHost, nullptr);
666 std::string resourceUri;
669 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
673 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
676 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
678 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
680 onResFoundListener->foundResourceCallback(resource);
685 OCStackResult result = OCPlatform::findResource(
688 static_cast<OCConnectivityType>(jConnectivityType),
690 JniUtils::getQOS(env, static_cast<int>(jQoS)));
692 if (OC_STACK_OK != result)
694 ThrowOcException(result, "Find resource has failed");
698 catch (OCException& e)
700 LOGE("%s", e.reason().c_str());
701 ThrowOcException(e.code(), e.reason().c_str());
706 * Class: org_iotivity_base_OcPlatform
707 * Method: getDeviceInfo0
708 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
710 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0(
714 jstring jResourceUri,
715 jint jConnectivityType,
718 LOGD("OcPlatform_getDeviceInfo0");
722 host = env->GetStringUTFChars(jHost, nullptr);
724 std::string resourceUri;
727 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
731 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
734 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
736 FindDeviceCallback findDeviceCallback =
737 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
739 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
744 OCStackResult result = OCPlatform::getDeviceInfo(
747 static_cast<OCConnectivityType>(jConnectivityType),
750 if (OC_STACK_OK != result)
752 ThrowOcException(result, "Find device has failed");
755 catch (OCException& e)
757 LOGE("%s", e.reason().c_str());
758 ThrowOcException(e.code(), e.reason().c_str());
763 * Class: org_iotivity_base_OcPlatform
764 * Method: getDeviceInfo1
765 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
767 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1(
771 jstring jResourceUri,
772 jint jConnectivityType,
776 LOGD("OcPlatform_getDeviceInfo1");
780 host = env->GetStringUTFChars(jHost, nullptr);
782 std::string resourceUri;
785 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
789 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
792 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
794 FindDeviceCallback findDeviceCallback =
795 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
797 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
802 OCStackResult result = OCPlatform::getDeviceInfo(
805 static_cast<OCConnectivityType>(jConnectivityType),
807 JniUtils::getQOS(env, static_cast<int>(jQoS)));
809 if (OC_STACK_OK != result)
811 ThrowOcException(result, "Find device has failed");
814 catch (OCException& e)
816 LOGE("%s", e.reason().c_str());
817 ThrowOcException(e.code(), e.reason().c_str());
822 * Class: org_iotivity_base_OcPlatform
823 * Method: getPlatformInfo0
824 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
826 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0(
830 jstring jResourceUri,
831 jint jConnectivityType,
834 LOGD("OcPlatform_getPlatformInfo0");
838 host = env->GetStringUTFChars(jHost, nullptr);
840 std::string resourceUri;
843 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
847 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
850 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
852 FindPlatformCallback findPlatformCallback =
853 [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
855 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
860 OCStackResult result = OCPlatform::getPlatformInfo(
863 static_cast<OCConnectivityType>(jConnectivityType),
864 findPlatformCallback);
866 if (OC_STACK_OK != result)
868 ThrowOcException(result, "Find platform has failed");
871 catch (OCException& e)
873 LOGE("%s", e.reason().c_str());
874 ThrowOcException(e.code(), e.reason().c_str());
879 * Class: org_iotivity_base_OcPlatform
880 * Method: getPlatformInfo1
881 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
883 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1(
887 jstring jResourceUri,
888 jint jConnectivityType,
892 LOGD("OcPlatform_getPlatformInfo1");
896 host = env->GetStringUTFChars(jHost, nullptr);
898 std::string resourceUri;
901 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
905 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
908 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
910 FindDeviceCallback findDeviceCallback =
911 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
913 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
918 OCStackResult result = OCPlatform::getPlatformInfo(
921 static_cast<OCConnectivityType>(jConnectivityType),
923 JniUtils::getQOS(env, static_cast<int>(jQoS)));
925 if (OC_STACK_OK != result)
927 ThrowOcException(result, "Find platform has failed");
930 catch (OCException& e)
932 LOGE("%s", e.reason().c_str());
933 ThrowOcException(e.code(), e.reason().c_str());
938 * Class: org_iotivity_base_OcPlatform
939 * Method: registerResource0
940 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
942 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0(
943 JNIEnv *env, jclass clazz, jobject jResource)
945 LOGD("OcPlatform_registerResource");
948 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
951 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
952 if (!resource) return nullptr;
954 OCResourceHandle resourceHandle;
957 OCStackResult result = OCPlatform::registerResource(
959 resource->getOCResource());
961 if (OC_STACK_OK != result)
963 ThrowOcException(result, "register resource");
966 catch (OCException& e)
968 LOGE("%s", e.reason().c_str());
969 ThrowOcException(e.code(), e.reason().c_str());
972 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
973 jlong handle = reinterpret_cast<jlong>(jniHandle);
974 jobject jResourceHandle =
975 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
977 if (!jResourceHandle)
979 LOGE("Failed to create OcResourceHandle");
982 return jResourceHandle;
986 * Class: org_iotivity_base_OcPlatform
987 * Method: registerResource1
988 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
990 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1(
993 jstring jResourceUri,
994 jstring jResourceTypeName,
995 jstring jResourceInterface,
996 jobject jListener, jint jResourceProperty)
998 LOGI("OcPlatform_registerResource1");
999 std::string resourceUri;
1002 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1004 std::string resourceTypeName;
1005 if (jResourceTypeName)
1007 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1009 std::string resourceInterface;
1010 if (jResourceInterface)
1012 resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
1014 JniEntityHandler* entityHandler = NULL;
1015 EntityHandler handleEntityCallback = NULL;
1018 entityHandler = new JniEntityHandler(env, jListener);
1019 handleEntityCallback =
1020 [entityHandler](const std::shared_ptr<OCResourceRequest> request) -> OCEntityHandlerResult
1022 return entityHandler->handleEntity(request);
1026 OCResourceHandle resourceHandle;
1029 OCStackResult result = OCPlatform::registerResource(
1034 handleEntityCallback,
1035 static_cast<int>(jResourceProperty));
1037 if (OC_STACK_OK != result)
1039 delete entityHandler;
1040 ThrowOcException(result, "register resource");
1044 catch (OCException& e)
1046 LOGE("%s", e.reason().c_str());
1047 delete entityHandler;
1048 ThrowOcException(e.code(), e.reason().c_str());
1052 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1053 jlong handle = reinterpret_cast<jlong>(jniHandle);
1054 jobject jResourceHandle =
1055 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1056 if (!jResourceHandle)
1058 LOGE("Failed to create OcResourceHandle");
1062 return jResourceHandle;
1066 * Class: org_iotivity_base_OcPlatform
1067 * Method: registerDeviceInfo0
1068 * 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
1070 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0(
1073 jstring jDeviceName)
1075 LOGI("OcPlatform_registerDeviceInfo");
1077 std::string deviceName;
1080 deviceName = env->GetStringUTFChars(jDeviceName, nullptr);
1083 OCDeviceInfo deviceInfo;
1086 DuplicateString(&deviceInfo.deviceName, deviceName);
1088 catch (std::exception &e)
1090 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1096 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1098 delete deviceInfo.deviceName;
1100 if (OC_STACK_OK != result)
1102 ThrowOcException(result, "Failed to register device info");
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: registerPlatformInfo0
1116 * 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
1118 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0(
1121 jstring jPlatformID,
1122 jstring jManufacturerName,
1123 jstring jManufacturerUrl,
1124 jstring jModelNumber,
1125 jstring jDateOfManufacture,
1126 jstring jPlatformVersion,
1127 jstring jOperatingSystemVersion,
1128 jstring jHardwareVersion,
1129 jstring jFirmwareVersion,
1130 jstring jSupportUrl,
1131 jstring jSystemTime)
1133 LOGI("OcPlatform_registerPlatformInfo");
1136 std::string platformID;
1137 std::string manufacturerName;
1138 std::string manufacturerUrl;
1139 std::string modelNumber;
1140 std::string dateOfManufacture;
1141 std::string platformVersion;
1142 std::string operatingSystemVersion;
1143 std::string hardwareVersion;
1144 std::string firmwareVersion;
1145 std::string supportUrl;
1146 std::string systemTime;
1150 platformID = env->GetStringUTFChars(jPlatformID, nullptr);
1152 if (jManufacturerName)
1154 manufacturerName = env->GetStringUTFChars(jManufacturerName, nullptr);
1156 if (jManufacturerUrl)
1158 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, nullptr);
1162 modelNumber = env->GetStringUTFChars(jModelNumber, nullptr);
1164 if (jDateOfManufacture)
1166 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, nullptr);
1168 if (jPlatformVersion)
1170 platformVersion = env->GetStringUTFChars(jPlatformVersion, nullptr);
1172 if (jOperatingSystemVersion)
1174 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, nullptr);
1176 if (jHardwareVersion)
1178 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, nullptr);
1180 if (jFirmwareVersion)
1182 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, nullptr);
1186 supportUrl = env->GetStringUTFChars(jSupportUrl, nullptr);
1190 systemTime = env->GetStringUTFChars(jSystemTime, nullptr);
1193 OCPlatformInfo platformInfo;
1196 DuplicateString(&platformInfo.platformID, platformID);
1197 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1198 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1199 DuplicateString(&platformInfo.modelNumber, modelNumber);
1200 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1201 DuplicateString(&platformInfo.platformVersion, platformVersion);
1202 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1203 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1204 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1205 DuplicateString(&platformInfo.supportUrl, supportUrl);
1206 DuplicateString(&platformInfo.systemTime, systemTime);
1208 catch (std::exception &e)
1210 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1216 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1218 delete platformInfo.platformID;
1219 delete platformInfo.manufacturerName;
1220 delete platformInfo.manufacturerUrl;
1221 delete platformInfo.modelNumber;
1222 delete platformInfo.dateOfManufacture;
1223 delete platformInfo.platformVersion;
1224 delete platformInfo.operatingSystemVersion;
1225 delete platformInfo.hardwareVersion;
1226 delete platformInfo.firmwareVersion;
1227 delete platformInfo.supportUrl;
1228 delete platformInfo.systemTime;
1230 if (OC_STACK_OK != result)
1232 ThrowOcException(result, "Failed to register platform info");
1236 catch (OCException& e)
1238 LOGE("Error is due to %s", e.reason().c_str());
1239 ThrowOcException(e.code(), e.reason().c_str());
1244 * Class: org_iotivity_base_OcPlatform
1245 * Method: unregisterResource0
1246 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1248 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0(
1249 JNIEnv *env, jclass clazz, jobject jResourceHandle)
1251 LOGI("OcPlatform_unregisterResource");
1252 if (!jResourceHandle)
1254 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1257 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1258 env, jResourceHandle);
1259 if (!jniOcResourceHandle)
1266 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1267 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1268 if (OC_STACK_OK != result)
1270 ThrowOcException(result, "Failed to unregister resource");
1273 catch (OCException& e)
1275 LOGE("%s", e.reason().c_str());
1276 ThrowOcException(e.code(), e.reason().c_str());
1281 * Class: org_iotivity_base_OcPlatform
1282 * Method: bindResource0
1283 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1285 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1286 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1288 LOGI("OcPlatform_bindResource");
1289 if (!jResourceCollectionHandle)
1291 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1294 if (!jResourceHandle)
1296 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1299 JniOcResourceHandle* jniOcResourceCollectionHandle =
1300 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1301 if (!jniOcResourceCollectionHandle) return;
1303 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1304 env, jResourceHandle);
1305 if (!jniOcResourceHandle)
1312 OCStackResult result = OCPlatform::bindResource(
1313 jniOcResourceCollectionHandle->getOCResourceHandle(),
1314 jniOcResourceHandle->getOCResourceHandle()
1317 if (OC_STACK_OK != result)
1319 ThrowOcException(result, "Failed to bind resource");
1322 catch (OCException& e)
1324 LOGE("%s", e.reason().c_str());
1325 ThrowOcException(e.code(), e.reason().c_str());
1330 * Class: org_iotivity_base_OcPlatform
1331 * Method: bindResources0
1332 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1334 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0(
1337 jobject jResourceCollectionHandle,
1338 jobjectArray jResourceHandleArray)
1340 LOGI("OcPlatform_bindResources");
1342 if (!jResourceCollectionHandle)
1344 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1347 if (!jResourceHandleArray)
1349 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1353 JniOcResourceHandle* jniOcResourceCollectionHandle =
1354 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1355 if (!jniOcResourceCollectionHandle)
1360 std::vector<OCResourceHandle> resourceHandleList;
1361 int len = env->GetArrayLength(jResourceHandleArray);
1362 for (int i = 0; i < len; ++i)
1364 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1365 if (!jResourceHandle)
1367 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1371 JniOcResourceHandle* jniOcResourceHandle =
1372 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1373 if (!jniOcResourceHandle)
1378 resourceHandleList.push_back(
1379 jniOcResourceHandle->getOCResourceHandle());
1384 OCStackResult result = OCPlatform::bindResources(
1385 jniOcResourceCollectionHandle->getOCResourceHandle(),
1389 if (OC_STACK_OK != result)
1391 ThrowOcException(result, "Failed to bind resources");
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: unbindResource0
1404 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1406 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0(
1409 jobject jResourceCollectionHandle,
1410 jobject jResourceHandle)
1412 LOGI("OcPlatform_unbindResource");
1413 if (!jResourceCollectionHandle)
1415 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1418 if (!jResourceHandle)
1420 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1424 JniOcResourceHandle* jniOcResourceCollectionHandle =
1425 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1426 if (!jniOcResourceCollectionHandle)
1431 JniOcResourceHandle* jniOcResourceHandle =
1432 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1433 if (!jniOcResourceHandle)
1440 OCStackResult result = OCPlatform::unbindResource(
1441 jniOcResourceCollectionHandle->getOCResourceHandle(),
1442 jniOcResourceHandle->getOCResourceHandle());
1444 if (OC_STACK_OK != result)
1446 ThrowOcException(result, "Failed to unbind resource");
1449 catch (OCException& e)
1451 LOGE("%s", e.reason().c_str());
1452 ThrowOcException(e.code(), e.reason().c_str());
1457 * Class: org_iotivity_base_OcPlatform
1458 * Method: unbindResources0
1459 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1461 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0(
1464 jobject jResourceCollectionHandle,
1465 jobjectArray jResourceHandleArray)
1467 LOGI("OcPlatform_unbindResources");
1468 if (!jResourceCollectionHandle)
1470 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1473 if (!jResourceHandleArray)
1475 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1479 JniOcResourceHandle* jniOcResourceCollectionHandle =
1480 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1481 if (!jniOcResourceCollectionHandle)
1486 std::vector<OCResourceHandle> resourceHandleList;
1487 int len = env->GetArrayLength(jResourceHandleArray);
1488 for (int i = 0; i < len; ++i)
1490 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1491 if (!jResourceHandle)
1493 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1497 JniOcResourceHandle* jniOcResourceHandle =
1498 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1499 if (!jniOcResourceHandle)
1504 resourceHandleList.push_back(
1505 jniOcResourceHandle->getOCResourceHandle());
1510 OCStackResult result = OCPlatform::unbindResources(
1511 jniOcResourceCollectionHandle->getOCResourceHandle(),
1515 if (OC_STACK_OK != result)
1517 ThrowOcException(result, "Failed to unbind resources");
1520 catch (OCException& e)
1522 LOGE("%s", e.reason().c_str());
1523 ThrowOcException(e.code(), e.reason().c_str());
1528 * Class: org_iotivity_base_OcPlatform
1529 * Method: bindTypeToResource0
1530 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1532 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0(
1535 jobject jResourceHandle,
1536 jstring jResourceTypeName)
1538 LOGI("OcPlatform_bindTypeToResource");
1539 if (!jResourceHandle)
1541 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1544 std::string typeName;
1545 if (jResourceTypeName)
1547 typeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1550 JniOcResourceHandle* jniOcResourceHandle =
1551 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1552 if (!jniOcResourceHandle) return;
1556 OCStackResult result = OCPlatform::bindTypeToResource(
1557 jniOcResourceHandle->getOCResourceHandle(),
1561 if (OC_STACK_OK != result)
1563 ThrowOcException(result, "Failed to bind type to resource");
1566 catch (OCException& e)
1568 LOGE("%s", e.reason().c_str());
1569 ThrowOcException(e.code(), e.reason().c_str());
1574 * Class: org_iotivity_base_OcPlatform
1575 * Method: bindInterfaceToResource0
1576 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1578 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
1579 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
1581 LOGI("OcPlatform_bindInterfaceToResource");
1582 if (!jResourceHandle)
1584 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1587 std::string interfaceName;
1588 if (jResourceInterfaceName)
1590 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, nullptr);
1593 JniOcResourceHandle* jniOcResourceHandle =
1594 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1595 if (!jniOcResourceHandle)
1602 OCStackResult result = OCPlatform::bindInterfaceToResource(
1603 jniOcResourceHandle->getOCResourceHandle(),
1607 if (OC_STACK_OK != result)
1609 ThrowOcException(result, "Failed to bind interface to resource");
1612 catch (OCException& e)
1614 LOGE("%s", e.reason().c_str());
1615 ThrowOcException(e.code(), e.reason().c_str());
1620 * Class: org_iotivity_base_OcPlatform
1621 * Method: startPresence0
1624 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0(
1625 JNIEnv *env, jclass clazz, jint ttl)
1627 LOGI("OcPlatform_startPresence");
1631 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
1633 if (OC_STACK_OK != result)
1635 ThrowOcException(result, "Failed to start presence");
1638 catch (OCException& e)
1640 LOGE("%s", e.reason().c_str());
1641 ThrowOcException(e.code(), e.reason().c_str());
1646 * Class: org_iotivity_base_OcPlatform
1647 * Method: stopPresence0
1650 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0(
1651 JNIEnv *env, jclass clazz)
1653 LOGI("OcPlatform_stopPresence");
1657 OCStackResult result = OCPlatform::stopPresence();
1659 if (OC_STACK_OK != result)
1661 ThrowOcException(result, "Failed to stop presence");
1664 catch (OCException& e)
1666 LOGE("%s", e.reason().c_str());
1667 ThrowOcException(e.code(), e.reason().c_str());
1672 * Class: org_iotivity_base_OcPlatform
1673 * Method: subscribePresence0
1674 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1676 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0(
1680 jint jConnectivityType,
1683 LOGD("OcPlatform_subscribePresence");
1687 host = env->GetStringUTFChars(jHost, nullptr);
1691 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1695 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1697 SubscribeCallback subscribeCallback =
1698 [onPresenceListener](OCStackResult result,
1699 const unsigned int nonce,
1700 const std::string& hostAddress)
1702 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1705 OCPlatform::OCPresenceHandle presenceHandle;
1708 OCStackResult result = OCPlatform::subscribePresence(
1711 static_cast<OCConnectivityType>(jConnectivityType),
1714 if (OC_STACK_OK != result)
1716 ThrowOcException(result, "subscribe presence has failed");
1719 catch (OCException& e)
1721 LOGE("%s", e.reason().c_str());
1722 ThrowOcException(e.code(), e.reason().c_str());
1726 JniOcPresenceHandle* jniPresenceHandle =
1727 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1728 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1729 jobject jPresenceHandle =
1730 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1731 if (!jPresenceHandle)
1733 LOGE("Failed to create OcPresenceHandle");
1734 delete jniPresenceHandle;
1736 return jPresenceHandle;
1740 * Class: org_iotivity_base_OcPlatform
1741 * Method: subscribePresence1
1742 * Signature: (Ljava/lang/String;Ljava/lang/String;I
1743 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1745 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1(
1749 jstring jResourceType,
1750 jint jConnectivityType,
1753 LOGD("OcPlatform_subscribePresence1");
1757 host = env->GetStringUTFChars(jHost, nullptr);
1759 std::string resourceType;
1762 resourceType = env->GetStringUTFChars(jResourceType, nullptr);
1766 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1770 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1772 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
1773 const unsigned int nonce, const std::string& hostAddress)
1775 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1778 OCPlatform::OCPresenceHandle presenceHandle;
1781 OCStackResult result = OCPlatform::subscribePresence(
1785 static_cast<OCConnectivityType>(jConnectivityType),
1788 if (OC_STACK_OK != result)
1790 ThrowOcException(result, "subscribe presence has failed");
1793 catch (OCException& e)
1795 LOGE("%s", e.reason().c_str());
1796 ThrowOcException(e.code(), e.reason().c_str());
1800 JniOcPresenceHandle* jniPresenceHandle =
1801 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1802 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1803 jobject jPresenceHandle =
1804 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1805 if (!jPresenceHandle)
1807 LOGE("Failed to create OcPresenceHandle");
1808 delete jniPresenceHandle;
1810 return jPresenceHandle;
1814 * Class: org_iotivity_base_OcPlatform
1815 * Method: unsubscribePresence0
1816 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
1818 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0(
1819 JNIEnv *env, jclass clazz, jobject jPresenceHandle)
1821 LOGD("OcPlatform_unsubscribePresence");
1822 if (!jPresenceHandle)
1824 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
1827 JniOcPresenceHandle* jniPresenceHandle =
1828 JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
1829 if (!jniPresenceHandle)
1834 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
1838 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
1840 if (OC_STACK_OK != result)
1842 ThrowOcException(result, "unsubscribe presence has failed");
1845 jweak jwOnPresenceListener =
1846 jniPresenceHandle->getJniOnPresenceListener()->getJWListener();
1847 if (jwOnPresenceListener)
1849 RemoveOnPresenceListener(env, jwOnPresenceListener);
1852 catch (OCException& e)
1854 LOGE("%s", e.reason().c_str());
1855 ThrowOcException(e.code(), e.reason().c_str());
1860 * Class: org_iotivity_base_OcPlatform
1861 * Method: constructResourceObject0
1862 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
1863 Lorg/iotivity/base/OcResource;
1865 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0(
1870 jint jConnectivityType,
1871 jboolean jIsObservable,
1872 jobjectArray jResourceTypeArray,
1873 jobjectArray jInterfaceArray)
1875 LOGD("OcPlatform_constructResourceObject");
1879 host = env->GetStringUTFChars(jHost, nullptr);
1884 uri = env->GetStringUTFChars(jUri, nullptr);
1886 if (!jResourceTypeArray)
1888 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
1891 if (!jInterfaceArray)
1893 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
1897 std::vector<std::string> resourceTypes;
1898 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
1900 std::vector<std::string> interfaces;
1901 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
1903 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
1906 static_cast<OCConnectivityType>(jConnectivityType),
1907 static_cast<bool>(jIsObservable),
1913 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
1917 JniOcResource *jniOcResource = new JniOcResource(resource);
1919 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
1922 delete jniOcResource;
1925 SetHandle<JniOcResource>(env, jResource, jniOcResource);
1926 if (env->ExceptionCheck())
1928 delete jniOcResource;
1935 * Class: org_iotivity_base_OcPlatform
1936 * Method: sendResponse0
1937 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
1939 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0(
1940 JNIEnv *env, jclass clazz, jobject jResourceResponse)
1942 LOGD("OcPlatform_sendResponse");
1943 if (!jResourceResponse)
1945 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
1949 JniOcResourceResponse *jniResponse =
1950 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
1951 if (!jniResponse) return;
1955 OCStackResult result =
1956 OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
1958 if (OC_STACK_OK != result)
1960 ThrowOcException(result, "failed to send response");
1963 catch (OCException& e)
1965 LOGE("%s", e.reason().c_str());
1966 ThrowOcException(e.code(), e.reason().c_str());