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"
29 #include "ocpayload.h"
33 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
35 JniOnResourceFoundListener *onResourceFoundListener = nullptr;
37 resourceFoundMapLock.lock();
39 for (auto it = onResourceFoundListenerMap.begin();
40 it != onResourceFoundListenerMap.end();
43 if (env->IsSameObject(jListener, it->first))
45 auto refPair = it->second;
46 onResourceFoundListener = refPair.first;
49 onResourceFoundListenerMap.insert(*it);
50 LOGD("OnResourceFoundListener: ref. count incremented");
55 if (!onResourceFoundListener)
57 onResourceFoundListener =
58 new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
59 jobject jgListener = env->NewGlobalRef(jListener);
61 onResourceFoundListenerMap.insert(
63 std::pair<JniOnResourceFoundListener*, int >>(
65 std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener,
67 LOGD("OnResourceFoundListener: new listener");
69 resourceFoundMapLock.unlock();
70 return onResourceFoundListener;
73 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
75 resourceFoundMapLock.lock();
77 for (auto it = onResourceFoundListenerMap.begin();
78 it != onResourceFoundListenerMap.end();
81 if (env->IsSameObject(jListener, it->first))
83 auto refPair = it->second;
84 if (refPair.second > 1)
88 onResourceFoundListenerMap.insert(*it);
89 LOGI("OnResourceFoundListener: ref. count decremented");
93 env->DeleteGlobalRef(it->first);
94 JniOnResourceFoundListener* listener = refPair.first;
96 onResourceFoundListenerMap.erase(it);
97 LOGI("OnResourceFoundListener removed");
102 resourceFoundMapLock.unlock();
105 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
107 JniOnDeviceInfoListener *onDeviceInfoListener = nullptr;
109 deviceInfoMapLock.lock();
111 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
113 if (env->IsSameObject(jListener, it->first))
115 auto refPair = it->second;
116 onDeviceInfoListener = refPair.first;
118 it->second = refPair;
119 onDeviceInfoListenerMap.insert(*it);
120 LOGD("OnDeviceInfoListener: ref. count incremented");
125 if (!onDeviceInfoListener)
127 onDeviceInfoListener =
128 new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
129 jobject jgListener = env->NewGlobalRef(jListener);
131 onDeviceInfoListenerMap.insert(
133 std::pair<JniOnDeviceInfoListener*, int>>(
135 std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
136 LOGI("OnDeviceInfoListener: new listener");
139 deviceInfoMapLock.unlock();
140 return onDeviceInfoListener;
143 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
145 deviceInfoMapLock.lock();
146 bool isFound = false;
147 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
149 if (env->IsSameObject(jListener, it->first))
151 auto refPair = it->second;
152 if (refPair.second > 1)
155 it->second = refPair;
156 onDeviceInfoListenerMap.insert(*it);
157 LOGI("OnDeviceInfoListener: ref. count decremented");
161 env->DeleteGlobalRef(it->first);
162 JniOnDeviceInfoListener* listener = refPair.first;
164 onDeviceInfoListenerMap.erase(it);
166 LOGI("OnDeviceInfoListener removed");
176 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
178 deviceInfoMapLock.unlock();
181 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
183 JniOnPlatformInfoListener *onPlatformInfoListener = nullptr;
185 platformInfoMapLock.lock();
187 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
189 if (env->IsSameObject(jListener, it->first))
191 auto refPair = it->second;
192 onPlatformInfoListener = refPair.first;
194 it->second = refPair;
195 onPlatformInfoListenerMap.insert(*it);
196 LOGD("OnPlatformInfoListener: ref. count incremented");
201 if (!onPlatformInfoListener)
203 onPlatformInfoListener =
204 new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
205 jobject jgListener = env->NewGlobalRef(jListener);
207 onPlatformInfoListenerMap.insert(
208 std::pair<jobject, std::pair<JniOnPlatformInfoListener*, int>>(
210 std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
211 LOGI("OnPlatformInfoListener: new listener");
214 platformInfoMapLock.unlock();
215 return onPlatformInfoListener;
218 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
220 platformInfoMapLock.lock();
221 bool isFound = false;
222 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
224 if (env->IsSameObject(jListener, it->first))
226 auto refPair = it->second;
227 if (refPair.second > 1)
230 it->second = refPair;
231 onPlatformInfoListenerMap.insert(*it);
232 LOGI("OnPlatformInfoListener: ref. count decremented");
236 env->DeleteGlobalRef(it->first);
237 JniOnPlatformInfoListener* listener = refPair.first;
239 onPlatformInfoListenerMap.erase(it);
241 LOGI("OnPlatformInfoListener removed");
251 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
253 platformInfoMapLock.unlock();
256 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
258 JniOnPresenceListener *onPresenceListener = nullptr;
260 presenceMapLock.lock();
262 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
264 if (env->IsSameObject(jListener, it->first))
266 auto refPair = it->second;
267 onPresenceListener = refPair.first;
269 it->second = refPair;
270 onPresenceListenerMap.insert(*it);
271 LOGD("OnPresenceListener: ref. count incremented");
275 if (!onPresenceListener)
277 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
278 jobject jgListener = env->NewGlobalRef(jListener);
279 onPresenceListenerMap.insert(
280 std::pair<jobject, std::pair<JniOnPresenceListener*, int>>(
282 std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
283 LOGI("OnPresenceListener: new listener");
285 presenceMapLock.unlock();
286 return onPresenceListener;
289 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
291 presenceMapLock.lock();
292 bool isFound = false;
293 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
295 if (env->IsSameObject(jListener, it->first))
297 auto refPair = it->second;
298 if (refPair.second > 1)
301 it->second = refPair;
302 onPresenceListenerMap.insert(*it);
303 LOGI("OnPresenceListener: ref. count decremented");
307 env->DeleteGlobalRef(it->first);
308 JniOnPresenceListener* listener = refPair.first;
310 onPresenceListenerMap.erase(it);
311 LOGI("OnPresenceListener is removed");
319 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
321 presenceMapLock.unlock();
325 * Class: org_iotivity_base_OcPlatform
327 * Signature: (IILjava/lang/String;II)V
329 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
330 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort,
331 jint jQOS, jstring jDbPath)
333 LOGI("OcPlatform_configure");
335 std::string ipAddress;
339 ipAddress = env->GetStringUTFChars(jIpAddress, nullptr);
343 dbfile = env->GetStringUTFChars(jDbPath, nullptr);
344 JniOcSecurity::StoreDbPath(dbfile);
349 port = static_cast<uint16_t>(jPort);
353 JniUtils::getServiceType(env, jServiceType),
354 JniUtils::getModeType(env, jModeType),
357 JniUtils::getQOS(env, static_cast<int>(jQOS)),
358 JniOcSecurity::getOCPersistentStorage()
360 OCPlatform::Configure(cfg);
364 * Class: org_iotivity_base_OcPlatform
365 * Method: notifyAllObservers0
366 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
368 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
369 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
371 LOGI("OcPlatform_notifyAllObservers");
372 if (!jResourceHandle)
374 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
378 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
379 env, jResourceHandle);
380 if (!jniOcResourceHandle) return;
384 OCStackResult result =
385 OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
387 if (OC_STACK_OK != result)
389 ThrowOcException(result, "Failed to notify all observers");
393 catch (OCException& e)
395 LOGE("%s", e.reason().c_str());
396 ThrowOcException(e.code(), e.reason().c_str());
401 * Class: org_iotivity_base_OcPlatform
402 * Method: notifyAllObservers1
403 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
405 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
406 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
408 LOGI("OcPlatform_notifyAllObservers1");
410 if (!jResourceHandle)
412 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
416 JniOcResourceHandle* jniOcResourceHandle =
417 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
418 if (!jniOcResourceHandle)
424 OCStackResult result = OCPlatform::notifyAllObservers(
425 jniOcResourceHandle->getOCResourceHandle(),
426 JniUtils::getQOS(env, static_cast<int>(jQoS)));
428 if (OC_STACK_OK != result)
430 ThrowOcException(result, "Failed to notify all observers");
434 catch (OCException& e)
436 LOGE("%s", e.reason().c_str());
437 ThrowOcException(e.code(), e.reason().c_str());
442 * Class: org_iotivity_base_OcPlatform
443 * Method: notifyListOfObservers2
444 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
446 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2(
449 jobject jResourceHandle,
450 jbyteArray jObservationIdArr,
451 jobject jResourceResponse)
453 LOGD("OcPlatform_notifyListOfObservers2");
454 if (!jResourceHandle)
456 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
459 if (!jObservationIdArr)
461 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
464 if (!jResourceResponse)
466 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
470 JniOcResourceHandle* jniOcResourceHandle =
471 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
472 if (!jniOcResourceHandle)
477 JniOcResourceResponse* jniOcResourceResponse =
478 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
479 if (!jniOcResourceResponse)
484 int len = env->GetArrayLength(jObservationIdArr);
485 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
487 ObservationIds observationIds;
488 for (int i = 0; i < len; ++i)
490 observationIds.push_back(bArr[i]);
493 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
497 OCStackResult result = OCPlatform::notifyListOfObservers(
498 jniOcResourceHandle->getOCResourceHandle(),
500 jniOcResourceResponse->getOCResourceResponse());
502 if (OC_STACK_OK != result)
504 ThrowOcException(result, "Failed to notify all observers");
507 catch (OCException& e)
509 LOGE("%s", e.reason().c_str());
510 ThrowOcException(e.code(), e.reason().c_str());
515 * Class: org_iotivity_base_OcPlatform
516 * Method: notifyListOfObservers3
517 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
519 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3(
522 jobject jResourceHandle,
523 jbyteArray jObservationIdArr,
524 jobject jResourceResponse,
527 LOGD("OcPlatform_notifyListOfObservers3");
528 if (!jResourceHandle)
530 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
533 if (!jObservationIdArr)
535 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
538 if (!jResourceResponse)
540 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
544 JniOcResourceHandle* jniOcResourceHandle =
545 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
546 if (!jniOcResourceHandle)
551 JniOcResourceResponse* jniOcResourceResponse =
552 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
553 if (!jniOcResourceResponse)
558 int len = env->GetArrayLength(jObservationIdArr);
559 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
561 ObservationIds observationIds;
562 for (int i = 0; i < len; ++i)
564 observationIds.push_back(bArr[i]);
567 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
571 OCStackResult result = OCPlatform::notifyListOfObservers(
572 jniOcResourceHandle->getOCResourceHandle(),
574 jniOcResourceResponse->getOCResourceResponse(),
575 JniUtils::getQOS(env, static_cast<int>(jQoS)));
577 if (OC_STACK_OK != result)
579 ThrowOcException(result, "Failed to notify all observers");
582 catch (OCException& e)
584 LOGE("%s", e.reason().c_str());
585 ThrowOcException(e.code(), e.reason().c_str());
590 * Class: org_iotivity_base_OcPlatform
591 * Method: findResource0
592 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
594 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0(
598 jstring jResourceUri,
599 jint jConnectivityType,
602 LOGD("OcPlatform_findResource");
606 host = env->GetStringUTFChars(jHost, nullptr);
608 std::string resourceUri;
611 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
615 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
619 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
621 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
623 onResFoundListener->foundResourceCallback(resource);
628 OCStackResult result = OCPlatform::findResource(
631 static_cast<OCConnectivityType>(jConnectivityType),
634 if (OC_STACK_OK != result)
636 ThrowOcException(result, "Find resource has failed");
640 catch (OCException& e)
642 LOGE("%s", e.reason().c_str());
643 ThrowOcException(e.code(), e.reason().c_str());
648 * Class: org_iotivity_base_OcPlatform
649 * Method: findResource1
650 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
652 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1(
656 jstring jResourceUri,
657 jint jConnectivityType,
661 LOGD("OcPlatform_findResource");
665 host = env->GetStringUTFChars(jHost, nullptr);
667 std::string resourceUri;
670 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
674 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
677 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
679 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
681 onResFoundListener->foundResourceCallback(resource);
686 OCStackResult result = OCPlatform::findResource(
689 static_cast<OCConnectivityType>(jConnectivityType),
691 JniUtils::getQOS(env, static_cast<int>(jQoS)));
693 if (OC_STACK_OK != result)
695 ThrowOcException(result, "Find resource has failed");
699 catch (OCException& e)
701 LOGE("%s", e.reason().c_str());
702 ThrowOcException(e.code(), e.reason().c_str());
707 * Class: org_iotivity_base_OcPlatform
708 * Method: getDeviceInfo0
709 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
711 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0(
715 jstring jResourceUri,
716 jint jConnectivityType,
719 LOGD("OcPlatform_getDeviceInfo0");
723 host = env->GetStringUTFChars(jHost, nullptr);
725 std::string resourceUri;
728 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
732 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
735 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
737 FindDeviceCallback findDeviceCallback =
738 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
740 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
745 OCStackResult result = OCPlatform::getDeviceInfo(
748 static_cast<OCConnectivityType>(jConnectivityType),
751 if (OC_STACK_OK != result)
753 ThrowOcException(result, "Find device has failed");
756 catch (OCException& e)
758 LOGE("%s", e.reason().c_str());
759 ThrowOcException(e.code(), e.reason().c_str());
764 * Class: org_iotivity_base_OcPlatform
765 * Method: getDeviceInfo1
766 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
768 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1(
772 jstring jResourceUri,
773 jint jConnectivityType,
777 LOGD("OcPlatform_getDeviceInfo1");
781 host = env->GetStringUTFChars(jHost, nullptr);
783 std::string resourceUri;
786 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
790 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
793 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
795 FindDeviceCallback findDeviceCallback =
796 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
798 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
803 OCStackResult result = OCPlatform::getDeviceInfo(
806 static_cast<OCConnectivityType>(jConnectivityType),
808 JniUtils::getQOS(env, static_cast<int>(jQoS)));
810 if (OC_STACK_OK != result)
812 ThrowOcException(result, "Find device has failed");
815 catch (OCException& e)
817 LOGE("%s", e.reason().c_str());
818 ThrowOcException(e.code(), e.reason().c_str());
823 * Class: org_iotivity_base_OcPlatform
824 * Method: getPlatformInfo0
825 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
827 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0(
831 jstring jResourceUri,
832 jint jConnectivityType,
835 LOGD("OcPlatform_getPlatformInfo0");
839 host = env->GetStringUTFChars(jHost, nullptr);
841 std::string resourceUri;
844 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
848 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
851 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
853 FindPlatformCallback findPlatformCallback =
854 [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
856 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
861 OCStackResult result = OCPlatform::getPlatformInfo(
864 static_cast<OCConnectivityType>(jConnectivityType),
865 findPlatformCallback);
867 if (OC_STACK_OK != result)
869 ThrowOcException(result, "Find platform has failed");
872 catch (OCException& e)
874 LOGE("%s", e.reason().c_str());
875 ThrowOcException(e.code(), e.reason().c_str());
880 * Class: org_iotivity_base_OcPlatform
881 * Method: getPlatformInfo1
882 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
884 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1(
888 jstring jResourceUri,
889 jint jConnectivityType,
893 LOGD("OcPlatform_getPlatformInfo1");
897 host = env->GetStringUTFChars(jHost, nullptr);
899 std::string resourceUri;
902 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
906 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
909 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
911 FindDeviceCallback findDeviceCallback =
912 [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
914 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
919 OCStackResult result = OCPlatform::getPlatformInfo(
922 static_cast<OCConnectivityType>(jConnectivityType),
924 JniUtils::getQOS(env, static_cast<int>(jQoS)));
926 if (OC_STACK_OK != result)
928 ThrowOcException(result, "Find platform has failed");
931 catch (OCException& e)
933 LOGE("%s", e.reason().c_str());
934 ThrowOcException(e.code(), e.reason().c_str());
939 * Class: org_iotivity_base_OcPlatform
940 * Method: registerResource0
941 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
943 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0(
944 JNIEnv *env, jclass clazz, jobject jResource)
946 LOGD("OcPlatform_registerResource");
949 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
952 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
953 if (!resource) return nullptr;
955 OCResourceHandle resourceHandle;
958 OCStackResult result = OCPlatform::registerResource(
960 resource->getOCResource());
962 if (OC_STACK_OK != result)
964 ThrowOcException(result, "register resource");
967 catch (OCException& e)
969 LOGE("%s", e.reason().c_str());
970 ThrowOcException(e.code(), e.reason().c_str());
973 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
974 jlong handle = reinterpret_cast<jlong>(jniHandle);
975 jobject jResourceHandle =
976 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
978 if (!jResourceHandle)
980 LOGE("Failed to create OcResourceHandle");
983 return jResourceHandle;
987 * Class: org_iotivity_base_OcPlatform
988 * Method: registerResource1
989 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
991 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1(
994 jstring jResourceUri,
995 jstring jResourceTypeName,
996 jstring jResourceInterface,
997 jobject jListener, jint jResourceProperty)
999 LOGI("OcPlatform_registerResource1");
1000 std::string resourceUri;
1003 resourceUri = env->GetStringUTFChars(jResourceUri, nullptr);
1005 std::string resourceTypeName;
1006 if (jResourceTypeName)
1008 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1010 std::string resourceInterface;
1011 if (jResourceInterface)
1013 resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
1015 JniEntityHandler* entityHandler = NULL;
1016 EntityHandler handleEntityCallback = NULL;
1019 entityHandler = new JniEntityHandler(env, jListener);
1020 handleEntityCallback =
1021 [entityHandler](const std::shared_ptr<OCResourceRequest> request) -> OCEntityHandlerResult
1023 return entityHandler->handleEntity(request);
1027 OCResourceHandle resourceHandle;
1030 OCStackResult result = OCPlatform::registerResource(
1035 handleEntityCallback,
1036 static_cast<int>(jResourceProperty));
1038 if (OC_STACK_OK != result)
1040 delete entityHandler;
1041 ThrowOcException(result, "register resource");
1045 catch (OCException& e)
1047 LOGE("%s", e.reason().c_str());
1048 delete entityHandler;
1049 ThrowOcException(e.code(), e.reason().c_str());
1053 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
1054 jlong handle = reinterpret_cast<jlong>(jniHandle);
1055 jobject jResourceHandle =
1056 env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
1057 if (!jResourceHandle)
1059 LOGE("Failed to create OcResourceHandle");
1063 return jResourceHandle;
1067 * Class: org_iotivity_base_OcPlatform
1068 * Method: registerDeviceInfo0
1069 * 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
1071 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0(
1074 jstring jDeviceName,
1075 jobjectArray jDeviceTypes)
1077 LOGI("OcPlatform_registerDeviceInfo");
1081 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceName cannot be null");
1087 ThrowOcException(OC_STACK_INVALID_PARAM, "deviceTypes cannot be null");
1091 OCDeviceInfo deviceInfo;
1094 DuplicateString(&deviceInfo.deviceName, env->GetStringUTFChars(jDeviceName, nullptr));
1095 deviceInfo.types = NULL;
1097 jsize len = env->GetArrayLength(jDeviceTypes);
1098 for (jsize i = 0; i < len; ++i)
1100 jstring jStr = (jstring)env->GetObjectArrayElement(jDeviceTypes, i);
1103 ThrowOcException(OC_STACK_INVALID_PARAM, "device type cannot be null");
1107 OCResourcePayloadAddStringLL(&deviceInfo.types, env->GetStringUTFChars(jStr, nullptr));
1108 if (env->ExceptionCheck()) return;
1110 env->DeleteLocalRef(jStr);
1113 catch (std::exception &e)
1115 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1121 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1123 delete deviceInfo.deviceName;
1125 if (OC_STACK_OK != result)
1127 ThrowOcException(result, "Failed to register device info");
1131 catch (OCException& e)
1133 LOGE("%s", e.reason().c_str());
1134 ThrowOcException(e.code(), e.reason().c_str());
1139 * Class: org_iotivity_base_OcPlatform
1140 * Method: registerPlatformInfo0
1141 * 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
1143 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0(
1146 jstring jPlatformID,
1147 jstring jManufacturerName,
1148 jstring jManufacturerUrl,
1149 jstring jModelNumber,
1150 jstring jDateOfManufacture,
1151 jstring jPlatformVersion,
1152 jstring jOperatingSystemVersion,
1153 jstring jHardwareVersion,
1154 jstring jFirmwareVersion,
1155 jstring jSupportUrl,
1156 jstring jSystemTime)
1158 LOGI("OcPlatform_registerPlatformInfo");
1161 std::string platformID;
1162 std::string manufacturerName;
1163 std::string manufacturerUrl;
1164 std::string modelNumber;
1165 std::string dateOfManufacture;
1166 std::string platformVersion;
1167 std::string operatingSystemVersion;
1168 std::string hardwareVersion;
1169 std::string firmwareVersion;
1170 std::string supportUrl;
1171 std::string systemTime;
1175 platformID = env->GetStringUTFChars(jPlatformID, nullptr);
1177 if (jManufacturerName)
1179 manufacturerName = env->GetStringUTFChars(jManufacturerName, nullptr);
1181 if (jManufacturerUrl)
1183 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, nullptr);
1187 modelNumber = env->GetStringUTFChars(jModelNumber, nullptr);
1189 if (jDateOfManufacture)
1191 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, nullptr);
1193 if (jPlatformVersion)
1195 platformVersion = env->GetStringUTFChars(jPlatformVersion, nullptr);
1197 if (jOperatingSystemVersion)
1199 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, nullptr);
1201 if (jHardwareVersion)
1203 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, nullptr);
1205 if (jFirmwareVersion)
1207 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, nullptr);
1211 supportUrl = env->GetStringUTFChars(jSupportUrl, nullptr);
1215 systemTime = env->GetStringUTFChars(jSystemTime, nullptr);
1218 OCPlatformInfo platformInfo;
1221 DuplicateString(&platformInfo.platformID, platformID);
1222 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1223 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1224 DuplicateString(&platformInfo.modelNumber, modelNumber);
1225 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1226 DuplicateString(&platformInfo.platformVersion, platformVersion);
1227 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1228 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1229 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1230 DuplicateString(&platformInfo.supportUrl, supportUrl);
1231 DuplicateString(&platformInfo.systemTime, systemTime);
1233 catch (std::exception &e)
1235 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1239 // __android_log_print(ANDROID_LOG_INFO, "Rahul", "platformID = %s", platformID);
1242 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1244 delete platformInfo.platformID;
1245 delete platformInfo.manufacturerName;
1246 delete platformInfo.manufacturerUrl;
1247 delete platformInfo.modelNumber;
1248 delete platformInfo.dateOfManufacture;
1249 delete platformInfo.platformVersion;
1250 delete platformInfo.operatingSystemVersion;
1251 delete platformInfo.hardwareVersion;
1252 delete platformInfo.firmwareVersion;
1253 delete platformInfo.supportUrl;
1254 delete platformInfo.systemTime;
1256 if (OC_STACK_OK != result)
1258 ThrowOcException(result, "Failed to register platform info");
1262 catch (OCException& e)
1264 LOGE("Error is due to %s", e.reason().c_str());
1265 ThrowOcException(e.code(), e.reason().c_str());
1270 * Class: org_iotivity_base_OcPlatform
1271 * Method: unregisterResource0
1272 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1274 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0(
1275 JNIEnv *env, jclass clazz, jobject jResourceHandle)
1277 LOGI("OcPlatform_unregisterResource");
1278 if (!jResourceHandle)
1280 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1283 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1284 env, jResourceHandle);
1285 if (!jniOcResourceHandle)
1292 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1293 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1294 if (OC_STACK_OK != result)
1296 ThrowOcException(result, "Failed to unregister resource");
1299 catch (OCException& e)
1301 LOGE("%s", e.reason().c_str());
1302 ThrowOcException(e.code(), e.reason().c_str());
1307 * Class: org_iotivity_base_OcPlatform
1308 * Method: bindResource0
1309 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1311 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1312 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1314 LOGI("OcPlatform_bindResource");
1315 if (!jResourceCollectionHandle)
1317 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1320 if (!jResourceHandle)
1322 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1325 JniOcResourceHandle* jniOcResourceCollectionHandle =
1326 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1327 if (!jniOcResourceCollectionHandle) return;
1329 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1330 env, jResourceHandle);
1331 if (!jniOcResourceHandle)
1338 OCStackResult result = OCPlatform::bindResource(
1339 jniOcResourceCollectionHandle->getOCResourceHandle(),
1340 jniOcResourceHandle->getOCResourceHandle()
1343 if (OC_STACK_OK != result)
1345 ThrowOcException(result, "Failed to bind resource");
1348 catch (OCException& e)
1350 LOGE("%s", e.reason().c_str());
1351 ThrowOcException(e.code(), e.reason().c_str());
1356 * Class: org_iotivity_base_OcPlatform
1357 * Method: bindResources0
1358 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1360 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0(
1363 jobject jResourceCollectionHandle,
1364 jobjectArray jResourceHandleArray)
1366 LOGI("OcPlatform_bindResources");
1368 if (!jResourceCollectionHandle)
1370 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1373 if (!jResourceHandleArray)
1375 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1379 JniOcResourceHandle* jniOcResourceCollectionHandle =
1380 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1381 if (!jniOcResourceCollectionHandle)
1386 std::vector<OCResourceHandle> resourceHandleList;
1387 int len = env->GetArrayLength(jResourceHandleArray);
1388 for (int i = 0; i < len; ++i)
1390 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1391 if (!jResourceHandle)
1393 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1397 JniOcResourceHandle* jniOcResourceHandle =
1398 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1399 if (!jniOcResourceHandle)
1404 resourceHandleList.push_back(
1405 jniOcResourceHandle->getOCResourceHandle());
1410 OCStackResult result = OCPlatform::bindResources(
1411 jniOcResourceCollectionHandle->getOCResourceHandle(),
1415 if (OC_STACK_OK != result)
1417 ThrowOcException(result, "Failed to bind resources");
1420 catch (OCException& e)
1422 LOGE("%s", e.reason().c_str());
1423 ThrowOcException(e.code(), e.reason().c_str());
1428 * Class: org_iotivity_base_OcPlatform
1429 * Method: unbindResource0
1430 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1432 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0(
1435 jobject jResourceCollectionHandle,
1436 jobject jResourceHandle)
1438 LOGI("OcPlatform_unbindResource");
1439 if (!jResourceCollectionHandle)
1441 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1444 if (!jResourceHandle)
1446 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1450 JniOcResourceHandle* jniOcResourceCollectionHandle =
1451 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1452 if (!jniOcResourceCollectionHandle)
1457 JniOcResourceHandle* jniOcResourceHandle =
1458 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1459 if (!jniOcResourceHandle)
1466 OCStackResult result = OCPlatform::unbindResource(
1467 jniOcResourceCollectionHandle->getOCResourceHandle(),
1468 jniOcResourceHandle->getOCResourceHandle());
1470 if (OC_STACK_OK != result)
1472 ThrowOcException(result, "Failed to unbind resource");
1475 catch (OCException& e)
1477 LOGE("%s", e.reason().c_str());
1478 ThrowOcException(e.code(), e.reason().c_str());
1483 * Class: org_iotivity_base_OcPlatform
1484 * Method: unbindResources0
1485 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1487 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0(
1490 jobject jResourceCollectionHandle,
1491 jobjectArray jResourceHandleArray)
1493 LOGI("OcPlatform_unbindResources");
1494 if (!jResourceCollectionHandle)
1496 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1499 if (!jResourceHandleArray)
1501 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1505 JniOcResourceHandle* jniOcResourceCollectionHandle =
1506 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceCollectionHandle);
1507 if (!jniOcResourceCollectionHandle)
1512 std::vector<OCResourceHandle> resourceHandleList;
1513 int len = env->GetArrayLength(jResourceHandleArray);
1514 for (int i = 0; i < len; ++i)
1516 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1517 if (!jResourceHandle)
1519 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1523 JniOcResourceHandle* jniOcResourceHandle =
1524 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1525 if (!jniOcResourceHandle)
1530 resourceHandleList.push_back(
1531 jniOcResourceHandle->getOCResourceHandle());
1536 OCStackResult result = OCPlatform::unbindResources(
1537 jniOcResourceCollectionHandle->getOCResourceHandle(),
1541 if (OC_STACK_OK != result)
1543 ThrowOcException(result, "Failed to unbind resources");
1546 catch (OCException& e)
1548 LOGE("%s", e.reason().c_str());
1549 ThrowOcException(e.code(), e.reason().c_str());
1554 * Class: org_iotivity_base_OcPlatform
1555 * Method: bindTypeToResource0
1556 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1558 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0(
1561 jobject jResourceHandle,
1562 jstring jResourceTypeName)
1564 LOGI("OcPlatform_bindTypeToResource");
1565 if (!jResourceHandle)
1567 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1570 std::string typeName;
1571 if (jResourceTypeName)
1573 typeName = env->GetStringUTFChars(jResourceTypeName, nullptr);
1576 JniOcResourceHandle* jniOcResourceHandle =
1577 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1578 if (!jniOcResourceHandle) return;
1582 OCStackResult result = OCPlatform::bindTypeToResource(
1583 jniOcResourceHandle->getOCResourceHandle(),
1587 if (OC_STACK_OK != result)
1589 ThrowOcException(result, "Failed to bind type to resource");
1592 catch (OCException& e)
1594 LOGE("%s", e.reason().c_str());
1595 ThrowOcException(e.code(), e.reason().c_str());
1600 * Class: org_iotivity_base_OcPlatform
1601 * Method: bindInterfaceToResource0
1602 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1604 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
1605 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
1607 LOGI("OcPlatform_bindInterfaceToResource");
1608 if (!jResourceHandle)
1610 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1613 std::string interfaceName;
1614 if (jResourceInterfaceName)
1616 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, nullptr);
1619 JniOcResourceHandle* jniOcResourceHandle =
1620 JniOcResourceHandle::getJniOcResourceHandlePtr(env, jResourceHandle);
1621 if (!jniOcResourceHandle)
1628 OCStackResult result = OCPlatform::bindInterfaceToResource(
1629 jniOcResourceHandle->getOCResourceHandle(),
1633 if (OC_STACK_OK != result)
1635 ThrowOcException(result, "Failed to bind interface to resource");
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: startPresence0
1650 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0(
1651 JNIEnv *env, jclass clazz, jint ttl)
1653 LOGI("OcPlatform_startPresence");
1657 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
1659 if (OC_STACK_OK != result)
1661 ThrowOcException(result, "Failed to start 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: stopPresence0
1676 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0(
1677 JNIEnv *env, jclass clazz)
1679 LOGI("OcPlatform_stopPresence");
1683 OCStackResult result = OCPlatform::stopPresence();
1685 if (OC_STACK_OK != result)
1687 ThrowOcException(result, "Failed to stop presence");
1690 catch (OCException& e)
1692 LOGE("%s", e.reason().c_str());
1693 ThrowOcException(e.code(), e.reason().c_str());
1698 * Class: org_iotivity_base_OcPlatform
1699 * Method: subscribePresence0
1700 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1702 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0(
1706 jint jConnectivityType,
1709 LOGD("OcPlatform_subscribePresence");
1713 host = env->GetStringUTFChars(jHost, nullptr);
1717 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1721 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1723 SubscribeCallback subscribeCallback =
1724 [onPresenceListener](OCStackResult result,
1725 const unsigned int nonce,
1726 const std::string& hostAddress)
1728 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1731 OCPlatform::OCPresenceHandle presenceHandle;
1734 OCStackResult result = OCPlatform::subscribePresence(
1737 static_cast<OCConnectivityType>(jConnectivityType),
1740 if (OC_STACK_OK != result)
1742 ThrowOcException(result, "subscribe presence has failed");
1745 catch (OCException& e)
1747 LOGE("%s", e.reason().c_str());
1748 ThrowOcException(e.code(), e.reason().c_str());
1752 JniOcPresenceHandle* jniPresenceHandle =
1753 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1754 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1755 jobject jPresenceHandle =
1756 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1757 if (!jPresenceHandle)
1759 LOGE("Failed to create OcPresenceHandle");
1760 delete jniPresenceHandle;
1762 return jPresenceHandle;
1766 * Class: org_iotivity_base_OcPlatform
1767 * Method: subscribePresence1
1768 * Signature: (Ljava/lang/String;Ljava/lang/String;I
1769 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1771 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1(
1775 jstring jResourceType,
1776 jint jConnectivityType,
1779 LOGD("OcPlatform_subscribePresence1");
1783 host = env->GetStringUTFChars(jHost, nullptr);
1785 std::string resourceType;
1788 resourceType = env->GetStringUTFChars(jResourceType, nullptr);
1792 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1796 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1798 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
1799 const unsigned int nonce, const std::string& hostAddress)
1801 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1804 OCPlatform::OCPresenceHandle presenceHandle;
1807 OCStackResult result = OCPlatform::subscribePresence(
1811 static_cast<OCConnectivityType>(jConnectivityType),
1814 if (OC_STACK_OK != result)
1816 ThrowOcException(result, "subscribe presence has failed");
1819 catch (OCException& e)
1821 LOGE("%s", e.reason().c_str());
1822 ThrowOcException(e.code(), e.reason().c_str());
1826 JniOcPresenceHandle* jniPresenceHandle =
1827 new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1828 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1829 jobject jPresenceHandle =
1830 env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1831 if (!jPresenceHandle)
1833 LOGE("Failed to create OcPresenceHandle");
1834 delete jniPresenceHandle;
1836 return jPresenceHandle;
1840 * Class: org_iotivity_base_OcPlatform
1841 * Method: unsubscribePresence0
1842 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
1844 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0(
1845 JNIEnv *env, jclass clazz, jobject jPresenceHandle)
1847 LOGD("OcPlatform_unsubscribePresence");
1848 if (!jPresenceHandle)
1850 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
1853 JniOcPresenceHandle* jniPresenceHandle =
1854 JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
1855 if (!jniPresenceHandle)
1860 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
1864 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
1866 if (OC_STACK_OK != result)
1868 ThrowOcException(result, "unsubscribe presence has failed");
1871 jweak jwOnPresenceListener =
1872 jniPresenceHandle->getJniOnPresenceListener()->getJWListener();
1873 if (jwOnPresenceListener)
1875 RemoveOnPresenceListener(env, jwOnPresenceListener);
1878 catch (OCException& e)
1880 LOGE("%s", e.reason().c_str());
1881 ThrowOcException(e.code(), e.reason().c_str());
1886 * Class: org_iotivity_base_OcPlatform
1887 * Method: constructResourceObject0
1888 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
1889 Lorg/iotivity/base/OcResource;
1891 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0(
1896 jint jConnectivityType,
1897 jboolean jIsObservable,
1898 jobjectArray jResourceTypeArray,
1899 jobjectArray jInterfaceArray)
1901 LOGD("OcPlatform_constructResourceObject");
1905 host = env->GetStringUTFChars(jHost, nullptr);
1910 uri = env->GetStringUTFChars(jUri, nullptr);
1912 if (!jResourceTypeArray)
1914 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
1917 if (!jInterfaceArray)
1919 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
1923 std::vector<std::string> resourceTypes;
1924 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
1926 std::vector<std::string> interfaces;
1927 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
1929 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
1932 static_cast<OCConnectivityType>(jConnectivityType),
1933 static_cast<bool>(jIsObservable),
1939 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
1943 JniOcResource *jniOcResource = new JniOcResource(resource);
1944 jlong handle = reinterpret_cast<jlong>(jniOcResource);
1946 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
1949 delete jniOcResource;
1952 SetHandle<JniOcResource>(env, jResource, jniOcResource);
1953 if (env->ExceptionCheck())
1955 delete jniOcResource;
1962 * Class: org_iotivity_base_OcPlatform
1963 * Method: sendResponse0
1964 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
1966 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0(
1967 JNIEnv *env, jclass clazz, jobject jResourceResponse)
1969 LOGD("OcPlatform_sendResponse");
1970 if (!jResourceResponse)
1972 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
1976 JniOcResourceResponse *jniResponse =
1977 JniOcResourceResponse::getJniOcResourceResponsePtr(env, jResourceResponse);
1978 if (!jniResponse) return;
1982 OCStackResult result =
1983 OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
1985 if (OC_STACK_OK != result)
1987 ThrowOcException(result, "failed to send response");
1990 catch (OCException& e)
1992 LOGE("%s", e.reason().c_str());
1993 ThrowOcException(e.code(), e.reason().c_str());