2 * //******************************************************************
4 * // Copyright 2015 Intel Corporation.
6 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * // Licensed under the Apache License, Version 2.0 (the "License");
9 * // you may not use this file except in compliance with the License.
10 * // You may obtain a copy of the License at
12 * // http://www.apache.org/licenses/LICENSE-2.0
14 * // Unless required by applicable law or agreed to in writing, software
15 * // distributed under the License is distributed on an "AS IS" BASIS,
16 * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * // See the License for the specific language governing permissions and
18 * // limitations under the License.
20 * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include "JniOcPlatform.h"
23 #include "OCPlatform.h"
24 #include "JniOcResource.h"
25 #include "JniOcResourceHandle.h"
26 #include "JniOcPresenceHandle.h"
27 #include "JniOcResourceResponse.h"
32 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
34 JniOnResourceFoundListener *onResourceFoundListener = NULL;
36 resourceFoundMapLock.lock();
38 for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)
40 if (env->IsSameObject(jListener, it->first))
42 auto refPair = it->second;
43 onResourceFoundListener = refPair.first;
46 onResourceFoundListenerMap.insert(*it);
47 LOGD("OnResourceFoundListener: ref. count incremented");
52 if (!onResourceFoundListener)
54 onResourceFoundListener = new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
55 jobject jgListener = env->NewGlobalRef(jListener);
57 onResourceFoundListenerMap.insert(std::pair < jobject, std::pair < JniOnResourceFoundListener*,
58 int >> (jgListener, std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener, 1)));
59 LOGD("OnResourceFoundListener: new listener");
61 resourceFoundMapLock.unlock();
62 return onResourceFoundListener;
65 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
67 resourceFoundMapLock.lock();
69 for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)
71 if (env->IsSameObject(jListener, it->first))
73 auto refPair = it->second;
74 if (refPair.second > 1)
78 onResourceFoundListenerMap.insert(*it);
79 LOGI("OnResourceFoundListener: ref. count decremented");
83 env->DeleteGlobalRef(it->first);
84 JniOnResourceFoundListener* listener = refPair.first;
86 onResourceFoundListenerMap.erase(it);
87 LOGI("OnResourceFoundListener removed");
92 resourceFoundMapLock.unlock();
95 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
97 JniOnDeviceInfoListener *onDeviceInfoListener = NULL;
99 deviceInfoMapLock.lock();
101 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
103 if (env->IsSameObject(jListener, it->first))
105 auto refPair = it->second;
106 onDeviceInfoListener = refPair.first;
108 it->second = refPair;
109 onDeviceInfoListenerMap.insert(*it);
110 LOGD("OnDeviceInfoListener: ref. count incremented");
115 if (!onDeviceInfoListener)
117 onDeviceInfoListener = new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
118 jobject jgListener = env->NewGlobalRef(jListener);
120 onDeviceInfoListenerMap.insert(std::pair < jobject, std::pair < JniOnDeviceInfoListener*,
121 int >> (jgListener, std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
122 LOGI("OnDeviceInfoListener: new listener");
125 deviceInfoMapLock.unlock();
126 return onDeviceInfoListener;
129 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
131 deviceInfoMapLock.lock();
132 bool isFound = false;
133 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
135 if (env->IsSameObject(jListener, it->first))
137 auto refPair = it->second;
138 if (refPair.second > 1)
141 it->second = refPair;
142 onDeviceInfoListenerMap.insert(*it);
143 LOGI("OnDeviceInfoListener: ref. count decremented");
147 env->DeleteGlobalRef(it->first);
148 JniOnDeviceInfoListener* listener = refPair.first;
150 onDeviceInfoListenerMap.erase(it);
152 LOGI("OnDeviceInfoListener removed");
162 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
164 deviceInfoMapLock.unlock();
167 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
169 JniOnPlatformInfoListener *onPlatformInfoListener = NULL;
171 platformInfoMapLock.lock();
173 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
175 if (env->IsSameObject(jListener, it->first))
177 auto refPair = it->second;
178 onPlatformInfoListener = refPair.first;
180 it->second = refPair;
181 onPlatformInfoListenerMap.insert(*it);
182 LOGD("OnPlatformInfoListener: ref. count incremented");
187 if (!onPlatformInfoListener)
189 onPlatformInfoListener = new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
190 jobject jgListener = env->NewGlobalRef(jListener);
192 onPlatformInfoListenerMap.insert(std::pair < jobject, std::pair < JniOnPlatformInfoListener*,
193 int >> (jgListener, std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
194 LOGI("OnPlatformInfoListener: new listener");
197 platformInfoMapLock.unlock();
198 return onPlatformInfoListener;
201 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
203 platformInfoMapLock.lock();
204 bool isFound = false;
205 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
207 if (env->IsSameObject(jListener, it->first))
209 auto refPair = it->second;
210 if (refPair.second > 1)
213 it->second = refPair;
214 onPlatformInfoListenerMap.insert(*it);
215 LOGI("OnPlatformInfoListener: ref. count decremented");
219 env->DeleteGlobalRef(it->first);
220 JniOnPlatformInfoListener* listener = refPair.first;
222 onPlatformInfoListenerMap.erase(it);
224 LOGI("OnPlatformInfoListener removed");
234 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
236 platformInfoMapLock.unlock();
239 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
241 JniOnPresenceListener *onPresenceListener = NULL;
243 presenceMapLock.lock();
245 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
247 if (env->IsSameObject(jListener, it->first))
249 auto refPair = it->second;
250 onPresenceListener = refPair.first;
252 it->second = refPair;
253 onPresenceListenerMap.insert(*it);
254 LOGD("OnPresenceListener: ref. count incremented");
258 if (!onPresenceListener)
260 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
261 jobject jgListener = env->NewGlobalRef(jListener);
262 onPresenceListenerMap.insert(std::pair < jobject, std::pair < JniOnPresenceListener*,
263 int >> (jgListener, std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
264 LOGI("OnPresenceListener: new listener");
266 presenceMapLock.unlock();
267 return onPresenceListener;
270 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
272 presenceMapLock.lock();
273 bool isFound = false;
274 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
276 if (env->IsSameObject(jListener, it->first))
278 auto refPair = it->second;
279 if (refPair.second > 1)
282 it->second = refPair;
283 onPresenceListenerMap.insert(*it);
284 LOGI("OnPresenceListener: ref. count decremented");
288 env->DeleteGlobalRef(it->first);
289 JniOnPresenceListener* listener = refPair.first;
291 onPresenceListenerMap.erase(it);
292 LOGI("OnPresenceListener is removed");
300 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
302 presenceMapLock.unlock();
306 * Class: org_iotivity_base_OcPlatform
308 * Signature: (IILjava/lang/String;II)V
310 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
311 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort, jint jQOS)
313 LOGI("OcPlatform_configure");
315 std::string ipAddress;
318 ipAddress = env->GetStringUTFChars(jIpAddress, NULL);
323 port = static_cast<uint16_t>(jPort);
326 JniUtils::getServiceType(env, jServiceType),
327 JniUtils::getModeType(env, jModeType),
330 JniUtils::getQOS(env, static_cast<int>(jQOS))
333 OCPlatform::Configure(cfg);
337 * Class: org_iotivity_base_OcPlatform
338 * Method: notifyAllObservers0
339 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
341 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
342 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
344 LOGI("OcPlatform_notifyAllObservers");
345 if (!jResourceHandle)
347 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
351 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
352 env, jResourceHandle);
353 if (!jniOcResourceHandle) return;
357 OCStackResult result = OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
359 if (OC_STACK_OK != result)
361 ThrowOcException(result, "Failed to notify all observers");
365 catch (OCException& e)
367 LOGE("%s", e.reason().c_str());
368 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
373 * Class: org_iotivity_base_OcPlatform
374 * Method: notifyAllObservers1
375 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
377 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
378 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
380 LOGI("OcPlatform_notifyAllObservers1");
382 if (!jResourceHandle)
384 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
388 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
389 env, jResourceHandle);
390 if (!jniOcResourceHandle) return;
393 OCStackResult result = OCPlatform::notifyAllObservers(
394 jniOcResourceHandle->getOCResourceHandle(),
395 JniUtils::getQOS(env, static_cast<int>(jQoS)));
397 if (OC_STACK_OK != result)
399 ThrowOcException(result, "Failed to notify all observers");
403 catch (OCException& e)
405 LOGE("%s", e.reason().c_str());
406 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
411 * Class: org_iotivity_base_OcPlatform
412 * Method: notifyListOfObservers2
413 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
415 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2
416 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse)
418 LOGD("OcPlatform_notifyListOfObservers2");
419 if (!jResourceHandle)
421 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
424 if (!jObservationIdArr)
426 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
429 if (!jResourceResponse)
431 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
435 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
436 env, jResourceHandle);
437 if (!jniOcResourceHandle) return;
439 JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
440 env, jResourceResponse);
441 if (!jniOcResourceResponse) return;
443 int len = env->GetArrayLength(jObservationIdArr);
444 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
446 ObservationIds observationIds;
447 for (int i = 0; i < len; ++i)
449 observationIds.push_back(bArr[i]);
452 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
455 OCStackResult result = OCPlatform::notifyListOfObservers(
456 jniOcResourceHandle->getOCResourceHandle(),
458 jniOcResourceResponse->getOCResourceResponse());
460 if (OC_STACK_OK != result)
462 ThrowOcException(result, "Failed to notify all observers");
465 catch (OCException& e)
467 LOGE("%s", e.reason().c_str());
468 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
473 * Class: org_iotivity_base_OcPlatform
474 * Method: notifyListOfObservers3
475 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
477 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3
478 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse, jint jQoS)
480 LOGD("OcPlatform_notifyListOfObservers3");
481 if (!jResourceHandle)
483 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
486 if (!jObservationIdArr)
488 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
491 if (!jResourceResponse)
493 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
497 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
498 env, jResourceHandle);
499 if (!jniOcResourceHandle) return;
501 JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
502 env, jResourceResponse);
503 if (!jniOcResourceResponse) return;
505 int len = env->GetArrayLength(jObservationIdArr);
506 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
508 ObservationIds observationIds;
509 for (int i = 0; i < len; ++i)
511 observationIds.push_back(bArr[i]);
514 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
517 OCStackResult result = OCPlatform::notifyListOfObservers(
518 jniOcResourceHandle->getOCResourceHandle(),
520 jniOcResourceResponse->getOCResourceResponse(),
521 JniUtils::getQOS(env, static_cast<int>(jQoS)));
523 if (OC_STACK_OK != result)
525 ThrowOcException(result, "Failed to notify all observers");
528 catch (OCException& e)
530 LOGE("%s", e.reason().c_str());
531 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
536 * Class: org_iotivity_base_OcPlatform
537 * Method: findResource0
538 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
540 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0
541 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
543 LOGD("OcPlatform_findResource");
547 host = env->GetStringUTFChars(jHost, NULL);
549 std::string resourceUri;
552 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
556 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
560 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
562 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
564 onResFoundListener->foundResourceCallback(resource);
569 OCStackResult result = OCPlatform::findResource(
572 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
575 if (OC_STACK_OK != result)
577 ThrowOcException(result, "Find resource has failed");
581 catch (OCException& e)
583 LOGE("%s", e.reason().c_str());
584 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
589 * Class: org_iotivity_base_OcPlatform
590 * Method: findResource1
591 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
593 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1
594 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
596 LOGD("OcPlatform_findResource");
600 host = env->GetStringUTFChars(jHost, NULL);
602 std::string resourceUri;
605 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
609 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
612 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
614 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
616 onResFoundListener->foundResourceCallback(resource);
621 OCStackResult result = OCPlatform::findResource(
624 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
626 JniUtils::getQOS(env, static_cast<int>(jQoS)));
628 if (OC_STACK_OK != result)
630 ThrowOcException(result, "Find resource has failed");
634 catch (OCException& e)
636 LOGE("%s", e.reason().c_str());
637 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
642 * Class: org_iotivity_base_OcPlatform
643 * Method: getDeviceInfo0
644 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
646 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0
647 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
649 LOGD("OcPlatform_getDeviceInfo0");
653 host = env->GetStringUTFChars(jHost, NULL);
655 std::string resourceUri;
658 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
662 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
665 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
667 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
669 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
674 OCStackResult result = OCPlatform::getDeviceInfo(
677 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
680 if (OC_STACK_OK != result)
682 ThrowOcException(result, "Find device has failed");
685 catch (OCException& e)
687 LOGE("%s", e.reason().c_str());
688 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
693 * Class: org_iotivity_base_OcPlatform
694 * Method: getDeviceInfo1
695 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
697 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1
698 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
700 LOGD("OcPlatform_getDeviceInfo1");
704 host = env->GetStringUTFChars(jHost, NULL);
706 std::string resourceUri;
709 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
713 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
716 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
718 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
720 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
725 OCStackResult result = OCPlatform::getDeviceInfo(
728 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
730 JniUtils::getQOS(env, static_cast<int>(jQoS)));
732 if (OC_STACK_OK != result)
734 ThrowOcException(result, "Find device has failed");
737 catch (OCException& e)
739 LOGE("%s", e.reason().c_str());
740 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
745 * Class: org_iotivity_base_OcPlatform
746 * Method: getPlatformInfo0
747 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
749 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0
750 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
752 LOGD("OcPlatform_getPlatformInfo0");
756 host = env->GetStringUTFChars(jHost, NULL);
758 std::string resourceUri;
761 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
765 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
768 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
770 FindPlatformCallback findPlatformCallback = [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
772 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
777 OCStackResult result = OCPlatform::getPlatformInfo(
780 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
781 findPlatformCallback);
783 if (OC_STACK_OK != result)
785 ThrowOcException(result, "Find platform has failed");
788 catch (OCException& e)
790 LOGE("%s", e.reason().c_str());
791 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
796 * Class: org_iotivity_base_OcPlatform
797 * Method: getPlatformInfo1
798 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
800 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1
801 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
803 LOGD("OcPlatform_getPlatformInfo1");
807 host = env->GetStringUTFChars(jHost, NULL);
809 std::string resourceUri;
812 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
816 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
819 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
821 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
823 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
828 OCStackResult result = OCPlatform::getPlatformInfo(
831 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
833 JniUtils::getQOS(env, static_cast<int>(jQoS)));
835 if (OC_STACK_OK != result)
837 ThrowOcException(result, "Find platform has failed");
840 catch (OCException& e)
842 LOGE("%s", e.reason().c_str());
843 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
848 * Class: org_iotivity_base_OcPlatform
849 * Method: registerResource0
850 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
852 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0
853 (JNIEnv *env, jclass clazz, jobject jResource)
855 LOGD("OcPlatform_registerResource");
858 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
861 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
862 if (!resource) return nullptr;
863 LOGD("OcPlatform_registerResource1");
864 OCResourceHandle resourceHandle;
867 LOGD("OcPlatform_registerResource2");
868 OCStackResult result = OCPlatform::registerResource(
870 resource->getOCResource());
871 LOGD("OcPlatform_registerResource3");
873 if (OC_STACK_OK != result)
875 ThrowOcException(result, "register resource");
878 catch (OCException& e)
880 LOGE("%s", e.reason().c_str());
881 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
884 LOGD("OcPlatform_registerResource4");
885 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
886 jlong handle = reinterpret_cast<jlong>(jniHandle);
887 jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
888 LOGD("OcPlatform_registerResource5");
889 if (!jResourceHandle)
891 LOGE("Failed to create OcResourceHandle");
894 return jResourceHandle;
898 * Class: org_iotivity_base_OcPlatform
899 * Method: registerResource1
900 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
902 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1
903 (JNIEnv *env, jclass clazz, jstring jResourceUri, jstring jResourceTypeName, jstring jResourceInterface,
904 jobject jListener, jint jResourceProperty)
906 LOGI("OcPlatform_registerResource1");
907 std::string resourceUri;
910 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
912 std::string resourceTypeName;
913 if (jResourceTypeName)
915 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, NULL);
917 std::string resourceInterface;
918 if (jResourceInterface)
920 resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);
924 ThrowOcException(OC_STACK_INVALID_PARAM, "entityHandler cannot be null");
927 JniEntityHandler* entityHandler = new JniEntityHandler(env, jListener);
928 EntityHandler handleEntityCallback = [entityHandler](const std::shared_ptr<OCResourceRequest> request) ->
929 OCEntityHandlerResult{
930 return entityHandler->handleEntity(request);
933 OCResourceHandle resourceHandle;
936 OCStackResult result = OCPlatform::registerResource(
941 handleEntityCallback,
942 static_cast<int>(jResourceProperty));
944 if (OC_STACK_OK != result)
946 delete entityHandler;
947 ThrowOcException(result, "register resource");
951 catch (OCException& e)
953 LOGE("%s", e.reason().c_str());
954 delete entityHandler;
955 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
959 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
960 jlong handle = reinterpret_cast<jlong>(jniHandle);
961 jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
962 if (!jResourceHandle)
964 LOGE("Failed to create OcResourceHandle");
968 return jResourceHandle;
972 * Class: org_iotivity_base_OcPlatform
973 * Method: registerDeviceInfo0
974 * 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
976 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0
981 LOGI("OcPlatform_registerDeviceInfo");
983 std::string deviceName;
986 deviceName = env->GetStringUTFChars(jDeviceName, NULL);
989 OCDeviceInfo deviceInfo;
992 DuplicateString(&deviceInfo.deviceName, deviceName);
994 catch (std::exception &e)
996 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1002 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1004 delete deviceInfo.deviceName;
1006 if (OC_STACK_OK != result)
1008 ThrowOcException(result, "Failed to register device info");
1012 catch (OCException& e)
1014 LOGE("%s", e.reason().c_str());
1015 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1020 * Class: org_iotivity_base_OcPlatform
1021 * Method: registerPlatformInfo0
1022 * 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
1024 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0
1027 jstring jPlatformID,
1028 jstring jManufacturerName,
1029 jstring jManufacturerUrl,
1030 jstring jModelNumber,
1031 jstring jDateOfManufacture,
1032 jstring jPlatformVersion,
1033 jstring jOperatingSystemVersion,
1034 jstring jHardwareVersion,
1035 jstring jFirmwareVersion,
1036 jstring jSupportUrl,
1037 jstring jSystemTime)
1039 LOGI("OcPlatform_registerPlatformInfo");
1042 std::string platformID;
1043 std::string manufacturerName;
1044 std::string manufacturerUrl;
1045 std::string modelNumber;
1046 std::string dateOfManufacture;
1047 std::string platformVersion;
1048 std::string operatingSystemVersion;
1049 std::string hardwareVersion;
1050 std::string firmwareVersion;
1051 std::string supportUrl;
1052 std::string systemTime;
1056 platformID = env->GetStringUTFChars(jPlatformID, NULL);
1058 if (jManufacturerName)
1060 manufacturerName = env->GetStringUTFChars(jManufacturerName, NULL);
1062 if (jManufacturerUrl)
1064 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, NULL);
1068 modelNumber = env->GetStringUTFChars(jModelNumber, NULL);
1070 if (jDateOfManufacture)
1072 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, NULL);
1074 if (jPlatformVersion)
1076 platformVersion = env->GetStringUTFChars(jPlatformVersion, NULL);
1078 if (jOperatingSystemVersion)
1080 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, NULL);
1082 if (jHardwareVersion)
1084 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, NULL);
1086 if (jFirmwareVersion)
1088 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, NULL);
1092 supportUrl = env->GetStringUTFChars(jSupportUrl, NULL);
1096 systemTime = env->GetStringUTFChars(jSystemTime, NULL);
1099 OCPlatformInfo platformInfo;
1102 DuplicateString(&platformInfo.platformID, platformID);
1103 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1104 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1105 DuplicateString(&platformInfo.modelNumber, modelNumber);
1106 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1107 DuplicateString(&platformInfo.platformVersion, platformVersion);
1108 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1109 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1110 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1111 DuplicateString(&platformInfo.supportUrl, supportUrl);
1112 DuplicateString(&platformInfo.systemTime, systemTime);
1114 catch (std::exception &e)
1116 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1120 // __android_log_print(ANDROID_LOG_INFO, "Rahul", "platformID = %s", platformID);
1123 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1125 delete platformInfo.platformID;
1126 delete platformInfo.manufacturerName;
1127 delete platformInfo.manufacturerUrl;
1128 delete platformInfo.modelNumber;
1129 delete platformInfo.dateOfManufacture;
1130 delete platformInfo.platformVersion;
1131 delete platformInfo.operatingSystemVersion;
1132 delete platformInfo.hardwareVersion;
1133 delete platformInfo.firmwareVersion;
1134 delete platformInfo.supportUrl;
1135 delete platformInfo.systemTime;
1137 if (OC_STACK_OK != result)
1139 ThrowOcException(result, "Failed to register platform info");
1143 catch (OCException& e)
1145 LOGE("Error is due to %s", e.reason().c_str());
1146 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1154 * Class: org_iotivity_base_OcPlatform
1155 * Method: unregisterResource0
1156 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1158 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0
1159 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
1161 LOGI("OcPlatform_unregisterResource");
1162 if (!jResourceHandle)
1164 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1167 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1168 env, jResourceHandle);
1169 if (!jniOcResourceHandle) return;
1173 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1174 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1175 if (OC_STACK_OK != result)
1177 ThrowOcException(result, "Failed to unregister resource");
1180 catch (OCException& e)
1182 LOGE("%s", e.reason().c_str());
1183 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1188 * Class: org_iotivity_base_OcPlatform
1189 * Method: bindResource0
1190 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1192 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1193 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1195 LOGI("OcPlatform_bindResource");
1196 if (!jResourceCollectionHandle)
1198 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1201 if (!jResourceHandle)
1203 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1206 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1207 env, jResourceCollectionHandle);
1208 if (!jniOcResourceCollectionHandle) return;
1210 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1211 env, jResourceHandle);
1212 if (!jniOcResourceHandle) return;
1216 OCStackResult result = OCPlatform::bindResource(
1217 jniOcResourceCollectionHandle->getOCResourceHandle(),
1218 jniOcResourceHandle->getOCResourceHandle()
1221 if (OC_STACK_OK != result)
1223 ThrowOcException(result, "Failed to bind resource");
1226 catch (OCException& e)
1228 LOGE("%s", e.reason().c_str());
1229 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1234 * Class: org_iotivity_base_OcPlatform
1235 * Method: bindResources0
1236 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1238 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0
1239 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)
1241 LOGI("OcPlatform_bindResources");
1243 if (!jResourceCollectionHandle)
1245 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1248 if (!jResourceHandleArray)
1250 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1254 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1255 env, jResourceCollectionHandle);
1256 if (!jniOcResourceCollectionHandle) return;
1258 std::vector<OCResourceHandle> resourceHandleList;
1259 int len = env->GetArrayLength(jResourceHandleArray);
1260 for (int i = 0; i < len; ++i)
1262 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1263 if (!jResourceHandle)
1265 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1269 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1270 env, jResourceHandle);
1271 if (!jniOcResourceHandle) return;
1273 resourceHandleList.push_back(
1274 jniOcResourceHandle->getOCResourceHandle());
1279 OCStackResult result = OCPlatform::bindResources(
1280 jniOcResourceCollectionHandle->getOCResourceHandle(),
1284 if (OC_STACK_OK != result)
1286 ThrowOcException(result, "Failed to bind resources");
1289 catch (OCException& e)
1291 LOGE("%s", e.reason().c_str());
1292 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1297 * Class: org_iotivity_base_OcPlatform
1298 * Method: unbindResource0
1299 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1301 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0
1302 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1304 LOGI("OcPlatform_unbindResource");
1305 if (!jResourceCollectionHandle)
1307 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1310 if (!jResourceHandle)
1312 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1316 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1317 env, jResourceCollectionHandle);
1318 if (!jniOcResourceCollectionHandle) return;
1320 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1321 env, jResourceHandle);
1322 if (!jniOcResourceHandle) return;
1326 OCStackResult result = OCPlatform::unbindResource(
1327 jniOcResourceCollectionHandle->getOCResourceHandle(),
1328 jniOcResourceHandle->getOCResourceHandle()
1331 if (OC_STACK_OK != result)
1333 ThrowOcException(result, "Failed to unbind resource");
1336 catch (OCException& e)
1338 LOGE("%s", e.reason().c_str());
1339 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1344 * Class: org_iotivity_base_OcPlatform
1345 * Method: unbindResources0
1346 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1348 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0
1349 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)
1351 LOGI("OcPlatform_unbindResources");
1352 if (!jResourceCollectionHandle)
1354 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1357 if (!jResourceHandleArray)
1359 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1363 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1364 env, jResourceCollectionHandle);
1365 if (!jniOcResourceCollectionHandle) return;
1367 std::vector<OCResourceHandle> resourceHandleList;
1368 int len = env->GetArrayLength(jResourceHandleArray);
1369 for (int i = 0; i < len; ++i)
1371 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1372 if (!jResourceHandle)
1374 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1378 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1379 env, jResourceHandle);
1380 if (!jniOcResourceHandle) return;
1382 resourceHandleList.push_back(
1383 jniOcResourceHandle->getOCResourceHandle());
1388 OCStackResult result = OCPlatform::unbindResources(
1389 jniOcResourceCollectionHandle->getOCResourceHandle(),
1393 if (OC_STACK_OK != result)
1395 ThrowOcException(result, "Failed to unbind resources");
1398 catch (OCException& e)
1400 LOGE("%s", e.reason().c_str());
1401 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1406 * Class: org_iotivity_base_OcPlatform
1407 * Method: bindTypeToResource0
1408 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1410 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0
1411 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceTypeName)
1413 LOGI("OcPlatform_bindTypeToResource");
1414 if (!jResourceHandle)
1416 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1419 std::string typeName;
1420 if (jResourceTypeName)
1422 typeName = env->GetStringUTFChars(jResourceTypeName, NULL);
1425 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1426 env, jResourceHandle);
1427 if (!jniOcResourceHandle) return;
1431 OCStackResult result = OCPlatform::bindTypeToResource(
1432 jniOcResourceHandle->getOCResourceHandle(),
1436 if (OC_STACK_OK != result)
1438 ThrowOcException(result, "Failed to bind type to resource");
1441 catch (OCException& e)
1443 LOGE("%s", e.reason().c_str());
1444 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1449 * Class: org_iotivity_base_OcPlatform
1450 * Method: bindInterfaceToResource0
1451 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1453 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
1454 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
1456 LOGI("OcPlatform_bindInterfaceToResource");
1457 if (!jResourceHandle)
1459 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1462 std::string interfaceName;
1463 if (jResourceInterfaceName)
1465 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, NULL);
1468 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1469 env, jResourceHandle);
1470 if (!jniOcResourceHandle) return;
1474 OCStackResult result = OCPlatform::bindInterfaceToResource(
1475 jniOcResourceHandle->getOCResourceHandle(),
1479 if (OC_STACK_OK != result)
1481 ThrowOcException(result, "Failed to bind interface to resource");
1484 catch (OCException& e)
1486 LOGE("%s", e.reason().c_str());
1487 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1492 * Class: org_iotivity_base_OcPlatform
1493 * Method: startPresence0
1496 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0
1497 (JNIEnv *env, jclass clazz, jint ttl)
1499 LOGI("OcPlatform_startPresence");
1503 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
1505 if (OC_STACK_OK != result)
1507 ThrowOcException(result, "Failed to start presence");
1510 catch (OCException& e)
1512 LOGE("%s", e.reason().c_str());
1513 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1518 * Class: org_iotivity_base_OcPlatform
1519 * Method: stopPresence0
1522 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0
1523 (JNIEnv *env, jclass clazz)
1525 LOGI("OcPlatform_stopPresence");
1529 OCStackResult result = OCPlatform::stopPresence();
1531 if (OC_STACK_OK != result)
1533 ThrowOcException(result, "Failed to stop presence");
1536 catch (OCException& e)
1538 LOGE("%s", e.reason().c_str());
1539 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1544 * Class: org_iotivity_base_OcPlatform
1545 * Method: subscribePresence0
1546 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1548 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0
1549 (JNIEnv *env, jclass clazz, jstring jHost, jint jConnectivityType, jobject jListener)
1551 LOGD("OcPlatform_subscribePresence");
1555 host = env->GetStringUTFChars(jHost, NULL);
1559 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1563 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1565 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result, const unsigned int nonce,
1566 const std::string& hostAddress)
1568 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1571 OCPlatform::OCPresenceHandle presenceHandle;
1574 OCStackResult result = OCPlatform::subscribePresence(
1577 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
1580 if (OC_STACK_OK != result)
1582 ThrowOcException(result, "subscribe presence has failed");
1585 catch (OCException& e)
1587 LOGE("%s", e.reason().c_str());
1588 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1592 JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1593 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1594 jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1595 if (!jPresenceHandle)
1597 LOGE("Failed to create OcPresenceHandle");
1598 delete jniPresenceHandle;
1600 return jPresenceHandle;
1604 * Class: org_iotivity_base_OcPlatform
1605 * Method: subscribePresence1
1606 * Signature: (Ljava/lang/String;Ljava/lang/String;I
1607 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1609 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1
1610 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceType, jint jConnectivityType, jobject jListener)
1612 LOGD("OcPlatform_subscribePresence1");
1616 host = env->GetStringUTFChars(jHost, NULL);
1618 std::string resourceType;
1621 resourceType = env->GetStringUTFChars(jResourceType, NULL);
1625 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1629 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1631 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
1632 const unsigned int nonce, const std::string& hostAddress)
1634 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1637 OCPlatform::OCPresenceHandle presenceHandle;
1640 OCStackResult result = OCPlatform::subscribePresence(
1644 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
1647 if (OC_STACK_OK != result)
1649 ThrowOcException(result, "subscribe presence has failed");
1652 catch (OCException& e)
1654 LOGE("%s", e.reason().c_str());
1655 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1659 JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1660 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1661 jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1662 if (!jPresenceHandle)
1664 LOGE("Failed to create OcPresenceHandle");
1665 delete jniPresenceHandle;
1667 return jPresenceHandle;
1671 * Class: org_iotivity_base_OcPlatform
1672 * Method: unsubscribePresence0
1673 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
1675 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0
1676 (JNIEnv *env, jclass clazz, jobject jPresenceHandle)
1678 LOGD("OcPlatform_unsubscribePresence");
1679 if (!jPresenceHandle)
1681 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
1684 JniOcPresenceHandle* jniPresenceHandle = JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
1685 if (!jniPresenceHandle) return;
1687 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
1691 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
1693 if (OC_STACK_OK != result)
1695 ThrowOcException(result, "unsubscribe presence has failed");
1698 jweak jwOnPresenceListener = jniPresenceHandle->getJniOnPresenceListener()->getJWListener();
1699 if (jwOnPresenceListener)
1701 RemoveOnPresenceListener(env, jwOnPresenceListener);
1704 catch (OCException& e)
1706 LOGE("%s", e.reason().c_str());
1707 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1712 * Class: org_iotivity_base_OcPlatform
1713 * Method: constructResourceObject0
1714 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
1715 Lorg/iotivity/base/OcResource;
1717 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0
1718 (JNIEnv *env, jclass clazz, jstring jHost, jstring jUri, jint jConnectivityType,
1719 jboolean jIsObservable, jobjectArray jResourceTypeArray, jobjectArray jInterfaceArray)
1721 LOGD("OcPlatform_constructResourceObject");
1725 host = env->GetStringUTFChars(jHost, NULL);
1730 uri = env->GetStringUTFChars(jUri, NULL);
1732 if (!jResourceTypeArray)
1734 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
1737 if (!jInterfaceArray)
1739 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
1743 std::vector<std::string> resourceTypes;
1744 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
1746 std::vector<std::string> interfaces;
1747 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
1749 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
1752 JniUtils::getConnectivityType(env, static_cast<int>(jConnectivityType)),
1753 static_cast<bool>(jIsObservable),
1759 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
1763 JniOcResource *jniOcResource = new JniOcResource(resource);
1764 jlong handle = reinterpret_cast<jlong>(jniOcResource);
1766 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
1769 delete jniOcResource;
1772 SetHandle<JniOcResource>(env, jResource, jniOcResource);
1773 if (env->ExceptionCheck())
1775 delete jniOcResource;
1782 * Class: org_iotivity_base_OcPlatform
1783 * Method: sendResponse0
1784 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
1786 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0
1787 (JNIEnv *env, jclass clazz, jobject jResourceResponse)
1789 LOGD("OcPlatform_sendResponse");
1790 if (!jResourceResponse)
1792 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
1796 JniOcResourceResponse *jniResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
1797 env, jResourceResponse);
1798 if (!jniResponse) return;
1802 OCStackResult result = OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
1804 if (OC_STACK_OK != result)
1806 ThrowOcException(result, "failed to send response");
1809 catch (OCException& e)
1811 LOGE("%s", e.reason().c_str());
1812 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());