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"
28 #include "JniOcSecurity.h"
33 JniOnResourceFoundListener* AddOnResourceFoundListener(JNIEnv* env, jobject jListener)
35 JniOnResourceFoundListener *onResourceFoundListener = NULL;
37 resourceFoundMapLock.lock();
39 for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)
41 if (env->IsSameObject(jListener, it->first))
43 auto refPair = it->second;
44 onResourceFoundListener = refPair.first;
47 onResourceFoundListenerMap.insert(*it);
48 LOGD("OnResourceFoundListener: ref. count incremented");
53 if (!onResourceFoundListener)
55 onResourceFoundListener = new JniOnResourceFoundListener(env, jListener, RemoveOnResourceFoundListener);
56 jobject jgListener = env->NewGlobalRef(jListener);
58 onResourceFoundListenerMap.insert(std::pair < jobject, std::pair < JniOnResourceFoundListener*,
59 int >> (jgListener, std::pair<JniOnResourceFoundListener*, int>(onResourceFoundListener, 1)));
60 LOGD("OnResourceFoundListener: new listener");
62 resourceFoundMapLock.unlock();
63 return onResourceFoundListener;
66 void RemoveOnResourceFoundListener(JNIEnv* env, jobject jListener)
68 resourceFoundMapLock.lock();
70 for (auto it = onResourceFoundListenerMap.begin(); it != onResourceFoundListenerMap.end(); ++it)
72 if (env->IsSameObject(jListener, it->first))
74 auto refPair = it->second;
75 if (refPair.second > 1)
79 onResourceFoundListenerMap.insert(*it);
80 LOGI("OnResourceFoundListener: ref. count decremented");
84 env->DeleteGlobalRef(it->first);
85 JniOnResourceFoundListener* listener = refPair.first;
87 onResourceFoundListenerMap.erase(it);
88 LOGI("OnResourceFoundListener removed");
93 resourceFoundMapLock.unlock();
96 JniOnDeviceInfoListener* AddOnDeviceInfoListener(JNIEnv* env, jobject jListener)
98 JniOnDeviceInfoListener *onDeviceInfoListener = NULL;
100 deviceInfoMapLock.lock();
102 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
104 if (env->IsSameObject(jListener, it->first))
106 auto refPair = it->second;
107 onDeviceInfoListener = refPair.first;
109 it->second = refPair;
110 onDeviceInfoListenerMap.insert(*it);
111 LOGD("OnDeviceInfoListener: ref. count incremented");
116 if (!onDeviceInfoListener)
118 onDeviceInfoListener = new JniOnDeviceInfoListener(env, jListener, RemoveOnDeviceInfoListener);
119 jobject jgListener = env->NewGlobalRef(jListener);
121 onDeviceInfoListenerMap.insert(std::pair < jobject, std::pair < JniOnDeviceInfoListener*,
122 int >> (jgListener, std::pair<JniOnDeviceInfoListener*, int>(onDeviceInfoListener, 1)));
123 LOGI("OnDeviceInfoListener: new listener");
126 deviceInfoMapLock.unlock();
127 return onDeviceInfoListener;
130 void RemoveOnDeviceInfoListener(JNIEnv* env, jobject jListener)
132 deviceInfoMapLock.lock();
133 bool isFound = false;
134 for (auto it = onDeviceInfoListenerMap.begin(); it != onDeviceInfoListenerMap.end(); ++it)
136 if (env->IsSameObject(jListener, it->first))
138 auto refPair = it->second;
139 if (refPair.second > 1)
142 it->second = refPair;
143 onDeviceInfoListenerMap.insert(*it);
144 LOGI("OnDeviceInfoListener: ref. count decremented");
148 env->DeleteGlobalRef(it->first);
149 JniOnDeviceInfoListener* listener = refPair.first;
151 onDeviceInfoListenerMap.erase(it);
153 LOGI("OnDeviceInfoListener removed");
163 ThrowOcException(JNI_EXCEPTION, "OnDeviceInfoListenet not found");
165 deviceInfoMapLock.unlock();
168 JniOnPlatformInfoListener* AddOnPlatformInfoListener(JNIEnv* env, jobject jListener)
170 JniOnPlatformInfoListener *onPlatformInfoListener = NULL;
172 platformInfoMapLock.lock();
174 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
176 if (env->IsSameObject(jListener, it->first))
178 auto refPair = it->second;
179 onPlatformInfoListener = refPair.first;
181 it->second = refPair;
182 onPlatformInfoListenerMap.insert(*it);
183 LOGD("OnPlatformInfoListener: ref. count incremented");
188 if (!onPlatformInfoListener)
190 onPlatformInfoListener = new JniOnPlatformInfoListener(env, jListener, RemoveOnPlatformInfoListener);
191 jobject jgListener = env->NewGlobalRef(jListener);
193 onPlatformInfoListenerMap.insert(std::pair < jobject, std::pair < JniOnPlatformInfoListener*,
194 int >> (jgListener, std::pair<JniOnPlatformInfoListener*, int>(onPlatformInfoListener, 1)));
195 LOGI("OnPlatformInfoListener: new listener");
198 platformInfoMapLock.unlock();
199 return onPlatformInfoListener;
202 void RemoveOnPlatformInfoListener(JNIEnv* env, jobject jListener)
204 platformInfoMapLock.lock();
205 bool isFound = false;
206 for (auto it = onPlatformInfoListenerMap.begin(); it != onPlatformInfoListenerMap.end(); ++it)
208 if (env->IsSameObject(jListener, it->first))
210 auto refPair = it->second;
211 if (refPair.second > 1)
214 it->second = refPair;
215 onPlatformInfoListenerMap.insert(*it);
216 LOGI("OnPlatformInfoListener: ref. count decremented");
220 env->DeleteGlobalRef(it->first);
221 JniOnPlatformInfoListener* listener = refPair.first;
223 onPlatformInfoListenerMap.erase(it);
225 LOGI("OnPlatformInfoListener removed");
235 ThrowOcException(JNI_EXCEPTION, "OnPlatformInfoListenet not found");
237 platformInfoMapLock.unlock();
240 JniOnPresenceListener* AddOnPresenceListener(JNIEnv* env, jobject jListener)
242 JniOnPresenceListener *onPresenceListener = NULL;
244 presenceMapLock.lock();
246 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
248 if (env->IsSameObject(jListener, it->first))
250 auto refPair = it->second;
251 onPresenceListener = refPair.first;
253 it->second = refPair;
254 onPresenceListenerMap.insert(*it);
255 LOGD("OnPresenceListener: ref. count incremented");
259 if (!onPresenceListener)
261 onPresenceListener = new JniOnPresenceListener(env, jListener, RemoveOnPresenceListener);
262 jobject jgListener = env->NewGlobalRef(jListener);
263 onPresenceListenerMap.insert(std::pair < jobject, std::pair < JniOnPresenceListener*,
264 int >> (jgListener, std::pair<JniOnPresenceListener*, int>(onPresenceListener, 1)));
265 LOGI("OnPresenceListener: new listener");
267 presenceMapLock.unlock();
268 return onPresenceListener;
271 void RemoveOnPresenceListener(JNIEnv* env, jobject jListener)
273 presenceMapLock.lock();
274 bool isFound = false;
275 for (auto it = onPresenceListenerMap.begin(); it != onPresenceListenerMap.end(); ++it)
277 if (env->IsSameObject(jListener, it->first))
279 auto refPair = it->second;
280 if (refPair.second > 1)
283 it->second = refPair;
284 onPresenceListenerMap.insert(*it);
285 LOGI("OnPresenceListener: ref. count decremented");
289 env->DeleteGlobalRef(it->first);
290 JniOnPresenceListener* listener = refPair.first;
292 onPresenceListenerMap.erase(it);
293 LOGI("OnPresenceListener is removed");
301 ThrowOcException(JNI_EXCEPTION, "OnPresenceListener not found");
303 presenceMapLock.unlock();
307 * Class: org_iotivity_base_OcPlatform
309 * Signature: (IILjava/lang/String;II)V
311 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_configure
312 (JNIEnv *env, jclass clazz, jint jServiceType, jint jModeType, jstring jIpAddress, jint jPort,
313 jint jQOS, jstring jDbPath)
315 LOGI("OcPlatform_configure");
317 std::string ipAddress;
321 ipAddress = env->GetStringUTFChars(jIpAddress, NULL);
325 dbfile = env->GetStringUTFChars(jDbPath, nullptr);
326 JniOcSecurity::StoreDbPath(dbfile);
331 port = static_cast<uint16_t>(jPort);
334 JniUtils::getServiceType(env, jServiceType),
335 JniUtils::getModeType(env, jModeType),
338 JniUtils::getQOS(env, static_cast<int>(jQOS)),
339 JniOcSecurity::getOCPersistentStorage()
342 OCPlatform::Configure(cfg);
346 * Class: org_iotivity_base_OcPlatform
347 * Method: notifyAllObservers0
348 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
350 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers0
351 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
353 LOGI("OcPlatform_notifyAllObservers");
354 if (!jResourceHandle)
356 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
360 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
361 env, jResourceHandle);
362 if (!jniOcResourceHandle) return;
366 OCStackResult result = OCPlatform::notifyAllObservers(jniOcResourceHandle->getOCResourceHandle());
368 if (OC_STACK_OK != result)
370 ThrowOcException(result, "Failed to notify all observers");
374 catch (OCException& e)
376 LOGE("%s", e.reason().c_str());
377 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
382 * Class: org_iotivity_base_OcPlatform
383 * Method: notifyAllObservers1
384 * Signature: (Lorg/iotivity/base/OcResourceHandle;I)V
386 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyAllObservers1
387 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jint jQoS)
389 LOGI("OcPlatform_notifyAllObservers1");
391 if (!jResourceHandle)
393 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
397 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
398 env, jResourceHandle);
399 if (!jniOcResourceHandle) return;
402 OCStackResult result = OCPlatform::notifyAllObservers(
403 jniOcResourceHandle->getOCResourceHandle(),
404 JniUtils::getQOS(env, static_cast<int>(jQoS)));
406 if (OC_STACK_OK != result)
408 ThrowOcException(result, "Failed to notify all observers");
412 catch (OCException& e)
414 LOGE("%s", e.reason().c_str());
415 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
420 * Class: org_iotivity_base_OcPlatform
421 * Method: notifyListOfObservers2
422 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;)V
424 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers2
425 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse)
427 LOGD("OcPlatform_notifyListOfObservers2");
428 if (!jResourceHandle)
430 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
433 if (!jObservationIdArr)
435 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
438 if (!jResourceResponse)
440 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
444 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
445 env, jResourceHandle);
446 if (!jniOcResourceHandle) return;
448 JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
449 env, jResourceResponse);
450 if (!jniOcResourceResponse) return;
452 int len = env->GetArrayLength(jObservationIdArr);
453 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
455 ObservationIds observationIds;
456 for (int i = 0; i < len; ++i)
458 observationIds.push_back(bArr[i]);
461 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
464 OCStackResult result = OCPlatform::notifyListOfObservers(
465 jniOcResourceHandle->getOCResourceHandle(),
467 jniOcResourceResponse->getOCResourceResponse());
469 if (OC_STACK_OK != result)
471 ThrowOcException(result, "Failed to notify all observers");
474 catch (OCException& e)
476 LOGE("%s", e.reason().c_str());
477 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
482 * Class: org_iotivity_base_OcPlatform
483 * Method: notifyListOfObservers3
484 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Ljava/lang/Byte;Lorg/iotivity/base/OcResourceResponse;I)V
486 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_notifyListOfObservers3
487 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jbyteArray jObservationIdArr, jobject jResourceResponse, jint jQoS)
489 LOGD("OcPlatform_notifyListOfObservers3");
490 if (!jResourceHandle)
492 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
495 if (!jObservationIdArr)
497 ThrowOcException(OC_STACK_INVALID_PARAM, "observationIdList cannot be null");
500 if (!jResourceResponse)
502 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
506 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
507 env, jResourceHandle);
508 if (!jniOcResourceHandle) return;
510 JniOcResourceResponse* jniOcResourceResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
511 env, jResourceResponse);
512 if (!jniOcResourceResponse) return;
514 int len = env->GetArrayLength(jObservationIdArr);
515 uint8_t* bArr = (uint8_t*)env->GetByteArrayElements(jObservationIdArr, 0);
517 ObservationIds observationIds;
518 for (int i = 0; i < len; ++i)
520 observationIds.push_back(bArr[i]);
523 env->ReleaseByteArrayElements(jObservationIdArr, (jbyte*)bArr, 0);
526 OCStackResult result = OCPlatform::notifyListOfObservers(
527 jniOcResourceHandle->getOCResourceHandle(),
529 jniOcResourceResponse->getOCResourceResponse(),
530 JniUtils::getQOS(env, static_cast<int>(jQoS)));
532 if (OC_STACK_OK != result)
534 ThrowOcException(result, "Failed to notify all observers");
537 catch (OCException& e)
539 LOGE("%s", e.reason().c_str());
540 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
545 * Class: org_iotivity_base_OcPlatform
546 * Method: findResource0
547 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;)V
549 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource0
550 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
552 LOGD("OcPlatform_findResource");
556 host = env->GetStringUTFChars(jHost, NULL);
558 std::string resourceUri;
561 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
565 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
569 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
571 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
573 onResFoundListener->foundResourceCallback(resource);
578 OCStackResult result = OCPlatform::findResource(
581 static_cast<OCConnectivityType>(jConnectivityType),
584 if (OC_STACK_OK != result)
586 ThrowOcException(result, "Find resource has failed");
590 catch (OCException& e)
592 LOGE("%s", e.reason().c_str());
593 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
598 * Class: org_iotivity_base_OcPlatform
599 * Method: findResource1
600 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
602 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_findResource1
603 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
605 LOGD("OcPlatform_findResource");
609 host = env->GetStringUTFChars(jHost, NULL);
611 std::string resourceUri;
614 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
618 ThrowOcException(OC_STACK_INVALID_PARAM, "onResourceFoundListener cannot be null");
621 JniOnResourceFoundListener *onResFoundListener = AddOnResourceFoundListener(env, jListener);
623 FindCallback findCallback = [onResFoundListener](std::shared_ptr<OCResource> resource)
625 onResFoundListener->foundResourceCallback(resource);
630 OCStackResult result = OCPlatform::findResource(
633 static_cast<OCConnectivityType>(jConnectivityType),
635 JniUtils::getQOS(env, static_cast<int>(jQoS)));
637 if (OC_STACK_OK != result)
639 ThrowOcException(result, "Find resource has failed");
643 catch (OCException& e)
645 LOGE("%s", e.reason().c_str());
646 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
651 * Class: org_iotivity_base_OcPlatform
652 * Method: getDeviceInfo0
653 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;)V
655 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo0
656 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
658 LOGD("OcPlatform_getDeviceInfo0");
662 host = env->GetStringUTFChars(jHost, NULL);
664 std::string resourceUri;
667 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
671 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
674 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
676 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
678 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
683 OCStackResult result = OCPlatform::getDeviceInfo(
686 static_cast<OCConnectivityType>(jConnectivityType),
689 if (OC_STACK_OK != result)
691 ThrowOcException(result, "Find device has failed");
694 catch (OCException& e)
696 LOGE("%s", e.reason().c_str());
697 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
702 * Class: org_iotivity_base_OcPlatform
703 * Method: getDeviceInfo1
704 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnDeviceFoundListener;I)V
706 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getDeviceInfo1
707 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
709 LOGD("OcPlatform_getDeviceInfo1");
713 host = env->GetStringUTFChars(jHost, NULL);
715 std::string resourceUri;
718 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
722 ThrowOcException(OC_STACK_INVALID_PARAM, "onDeviceFoundListener cannot be null");
725 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
727 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
729 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
734 OCStackResult result = OCPlatform::getDeviceInfo(
737 static_cast<OCConnectivityType>(jConnectivityType),
739 JniUtils::getQOS(env, static_cast<int>(jQoS)));
741 if (OC_STACK_OK != result)
743 ThrowOcException(result, "Find device has failed");
746 catch (OCException& e)
748 LOGE("%s", e.reason().c_str());
749 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
754 * Class: org_iotivity_base_OcPlatform
755 * Method: getPlatformInfo0
756 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;)V
758 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo0
759 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener)
761 LOGD("OcPlatform_getPlatformInfo0");
765 host = env->GetStringUTFChars(jHost, NULL);
767 std::string resourceUri;
770 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
774 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
777 JniOnPlatformInfoListener *onPlatformInfoListener = AddOnPlatformInfoListener(env, jListener);
779 FindPlatformCallback findPlatformCallback = [onPlatformInfoListener](const OCRepresentation& ocRepresentation)
781 onPlatformInfoListener->foundPlatformCallback(ocRepresentation);
786 OCStackResult result = OCPlatform::getPlatformInfo(
789 static_cast<OCConnectivityType>(jConnectivityType),
790 findPlatformCallback);
792 if (OC_STACK_OK != result)
794 ThrowOcException(result, "Find platform has failed");
797 catch (OCException& e)
799 LOGE("%s", e.reason().c_str());
800 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
805 * Class: org_iotivity_base_OcPlatform
806 * Method: getPlatformInfo1
807 * Signature: (Ljava/lang/String;Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPlatformFoundListener;I)V
809 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_getPlatformInfo1
810 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceUri, jint jConnectivityType, jobject jListener, jint jQoS)
812 LOGD("OcPlatform_getPlatformInfo1");
816 host = env->GetStringUTFChars(jHost, NULL);
818 std::string resourceUri;
821 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
825 ThrowOcException(OC_STACK_INVALID_PARAM, "onPlatformFoundListener cannot be null");
828 JniOnDeviceInfoListener *onDeviceInfoListener = AddOnDeviceInfoListener(env, jListener);
830 FindDeviceCallback findDeviceCallback = [onDeviceInfoListener](const OCRepresentation& ocRepresentation)
832 onDeviceInfoListener->foundDeviceCallback(ocRepresentation);
837 OCStackResult result = OCPlatform::getPlatformInfo(
840 static_cast<OCConnectivityType>(jConnectivityType),
842 JniUtils::getQOS(env, static_cast<int>(jQoS)));
844 if (OC_STACK_OK != result)
846 ThrowOcException(result, "Find platform has failed");
849 catch (OCException& e)
851 LOGE("%s", e.reason().c_str());
852 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
857 * Class: org_iotivity_base_OcPlatform
858 * Method: registerResource0
859 * Signature: (Lorg/iotivity/base/OcResource;)Lorg/iotivity/base/OcResourceHandle;
861 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource0
862 (JNIEnv *env, jclass clazz, jobject jResource)
864 LOGD("OcPlatform_registerResource");
867 ThrowOcException(OC_STACK_INVALID_PARAM, "Resource cannot be null");
870 JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, jResource);
871 if (!resource) return nullptr;
873 OCResourceHandle resourceHandle;
876 OCStackResult result = OCPlatform::registerResource(
878 resource->getOCResource());
880 if (OC_STACK_OK != result)
882 ThrowOcException(result, "register resource");
885 catch (OCException& e)
887 LOGE("%s", e.reason().c_str());
888 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
891 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
892 jlong handle = reinterpret_cast<jlong>(jniHandle);
893 jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
895 if (!jResourceHandle)
897 LOGE("Failed to create OcResourceHandle");
900 return jResourceHandle;
904 * Class: org_iotivity_base_OcPlatform
905 * Method: registerResource1
906 * Signature: (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcPlatform/EntityHandler;I)Lorg/iotivity/base/OcResourceHandle;
908 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_registerResource1
909 (JNIEnv *env, jclass clazz, jstring jResourceUri, jstring jResourceTypeName, jstring jResourceInterface,
910 jobject jListener, jint jResourceProperty)
912 LOGI("OcPlatform_registerResource1");
913 std::string resourceUri;
916 resourceUri = env->GetStringUTFChars(jResourceUri, NULL);
918 std::string resourceTypeName;
919 if (jResourceTypeName)
921 resourceTypeName = env->GetStringUTFChars(jResourceTypeName, NULL);
923 std::string resourceInterface;
924 if (jResourceInterface)
926 resourceInterface = env->GetStringUTFChars(jResourceInterface, NULL);
930 ThrowOcException(OC_STACK_INVALID_PARAM, "entityHandler cannot be null");
933 JniEntityHandler* entityHandler = new JniEntityHandler(env, jListener);
934 EntityHandler handleEntityCallback = [entityHandler](const std::shared_ptr<OCResourceRequest> request) ->
935 OCEntityHandlerResult{
936 return entityHandler->handleEntity(request);
939 OCResourceHandle resourceHandle;
942 OCStackResult result = OCPlatform::registerResource(
947 handleEntityCallback,
948 static_cast<int>(jResourceProperty));
950 if (OC_STACK_OK != result)
952 delete entityHandler;
953 ThrowOcException(result, "register resource");
957 catch (OCException& e)
959 LOGE("%s", e.reason().c_str());
960 delete entityHandler;
961 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
965 JniOcResourceHandle* jniHandle = new JniOcResourceHandle(resourceHandle);
966 jlong handle = reinterpret_cast<jlong>(jniHandle);
967 jobject jResourceHandle = env->NewObject(g_cls_OcResourceHandle, g_mid_OcResourceHandle_N_ctor, handle);
968 if (!jResourceHandle)
970 LOGE("Failed to create OcResourceHandle");
974 return jResourceHandle;
978 * Class: org_iotivity_base_OcPlatform
979 * Method: registerDeviceInfo0
980 * 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
982 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerDeviceInfo0
987 LOGI("OcPlatform_registerDeviceInfo");
989 std::string deviceName;
992 deviceName = env->GetStringUTFChars(jDeviceName, NULL);
995 OCDeviceInfo deviceInfo;
998 DuplicateString(&deviceInfo.deviceName, deviceName);
1000 catch (std::exception &e)
1002 ThrowOcException(JNI_EXCEPTION, "Failed to construct device info");
1008 OCStackResult result = OCPlatform::registerDeviceInfo(deviceInfo);
1010 delete deviceInfo.deviceName;
1012 if (OC_STACK_OK != result)
1014 ThrowOcException(result, "Failed to register device info");
1018 catch (OCException& e)
1020 LOGE("%s", e.reason().c_str());
1021 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1026 * Class: org_iotivity_base_OcPlatform
1027 * Method: registerPlatformInfo0
1028 * 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
1030 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_registerPlatformInfo0
1033 jstring jPlatformID,
1034 jstring jManufacturerName,
1035 jstring jManufacturerUrl,
1036 jstring jModelNumber,
1037 jstring jDateOfManufacture,
1038 jstring jPlatformVersion,
1039 jstring jOperatingSystemVersion,
1040 jstring jHardwareVersion,
1041 jstring jFirmwareVersion,
1042 jstring jSupportUrl,
1043 jstring jSystemTime)
1045 LOGI("OcPlatform_registerPlatformInfo");
1048 std::string platformID;
1049 std::string manufacturerName;
1050 std::string manufacturerUrl;
1051 std::string modelNumber;
1052 std::string dateOfManufacture;
1053 std::string platformVersion;
1054 std::string operatingSystemVersion;
1055 std::string hardwareVersion;
1056 std::string firmwareVersion;
1057 std::string supportUrl;
1058 std::string systemTime;
1062 platformID = env->GetStringUTFChars(jPlatformID, NULL);
1064 if (jManufacturerName)
1066 manufacturerName = env->GetStringUTFChars(jManufacturerName, NULL);
1068 if (jManufacturerUrl)
1070 manufacturerUrl = env->GetStringUTFChars(jManufacturerUrl, NULL);
1074 modelNumber = env->GetStringUTFChars(jModelNumber, NULL);
1076 if (jDateOfManufacture)
1078 dateOfManufacture = env->GetStringUTFChars(jDateOfManufacture, NULL);
1080 if (jPlatformVersion)
1082 platformVersion = env->GetStringUTFChars(jPlatformVersion, NULL);
1084 if (jOperatingSystemVersion)
1086 operatingSystemVersion = env->GetStringUTFChars(jOperatingSystemVersion, NULL);
1088 if (jHardwareVersion)
1090 hardwareVersion = env->GetStringUTFChars(jHardwareVersion, NULL);
1092 if (jFirmwareVersion)
1094 firmwareVersion = env->GetStringUTFChars(jFirmwareVersion, NULL);
1098 supportUrl = env->GetStringUTFChars(jSupportUrl, NULL);
1102 systemTime = env->GetStringUTFChars(jSystemTime, NULL);
1105 OCPlatformInfo platformInfo;
1108 DuplicateString(&platformInfo.platformID, platformID);
1109 DuplicateString(&platformInfo.manufacturerName, manufacturerName);
1110 DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
1111 DuplicateString(&platformInfo.modelNumber, modelNumber);
1112 DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
1113 DuplicateString(&platformInfo.platformVersion, platformVersion);
1114 DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
1115 DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
1116 DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
1117 DuplicateString(&platformInfo.supportUrl, supportUrl);
1118 DuplicateString(&platformInfo.systemTime, systemTime);
1120 catch (std::exception &e)
1122 ThrowOcException(JNI_EXCEPTION, "Failed to construct platform info");
1126 // __android_log_print(ANDROID_LOG_INFO, "Rahul", "platformID = %s", platformID);
1129 OCStackResult result = OCPlatform::registerPlatformInfo(platformInfo);
1131 delete platformInfo.platformID;
1132 delete platformInfo.manufacturerName;
1133 delete platformInfo.manufacturerUrl;
1134 delete platformInfo.modelNumber;
1135 delete platformInfo.dateOfManufacture;
1136 delete platformInfo.platformVersion;
1137 delete platformInfo.operatingSystemVersion;
1138 delete platformInfo.hardwareVersion;
1139 delete platformInfo.firmwareVersion;
1140 delete platformInfo.supportUrl;
1141 delete platformInfo.systemTime;
1143 if (OC_STACK_OK != result)
1145 ThrowOcException(result, "Failed to register platform info");
1149 catch (OCException& e)
1151 LOGE("Error is due to %s", e.reason().c_str());
1152 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1160 * Class: org_iotivity_base_OcPlatform
1161 * Method: unregisterResource0
1162 * Signature: (Lorg/iotivity/base/OcResourceHandle;)V
1164 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unregisterResource0
1165 (JNIEnv *env, jclass clazz, jobject jResourceHandle)
1167 LOGI("OcPlatform_unregisterResource");
1168 if (!jResourceHandle)
1170 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1173 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1174 env, jResourceHandle);
1175 if (!jniOcResourceHandle) return;
1179 OCResourceHandle resHandle = jniOcResourceHandle->getOCResourceHandle();
1180 OCStackResult result = OCPlatform::unregisterResource(resHandle);
1181 if (OC_STACK_OK != result)
1183 ThrowOcException(result, "Failed to unregister resource");
1186 catch (OCException& e)
1188 LOGE("%s", e.reason().c_str());
1189 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1194 * Class: org_iotivity_base_OcPlatform
1195 * Method: bindResource0
1196 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1198 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResource0
1199 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1201 LOGI("OcPlatform_bindResource");
1202 if (!jResourceCollectionHandle)
1204 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1207 if (!jResourceHandle)
1209 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1212 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1213 env, jResourceCollectionHandle);
1214 if (!jniOcResourceCollectionHandle) return;
1216 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1217 env, jResourceHandle);
1218 if (!jniOcResourceHandle) return;
1222 OCStackResult result = OCPlatform::bindResource(
1223 jniOcResourceCollectionHandle->getOCResourceHandle(),
1224 jniOcResourceHandle->getOCResourceHandle()
1227 if (OC_STACK_OK != result)
1229 ThrowOcException(result, "Failed to bind resource");
1232 catch (OCException& e)
1234 LOGE("%s", e.reason().c_str());
1235 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1240 * Class: org_iotivity_base_OcPlatform
1241 * Method: bindResources0
1242 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1244 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindResources0
1245 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)
1247 LOGI("OcPlatform_bindResources");
1249 if (!jResourceCollectionHandle)
1251 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1254 if (!jResourceHandleArray)
1256 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1260 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1261 env, jResourceCollectionHandle);
1262 if (!jniOcResourceCollectionHandle) return;
1264 std::vector<OCResourceHandle> resourceHandleList;
1265 int len = env->GetArrayLength(jResourceHandleArray);
1266 for (int i = 0; i < len; ++i)
1268 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1269 if (!jResourceHandle)
1271 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1275 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1276 env, jResourceHandle);
1277 if (!jniOcResourceHandle) return;
1279 resourceHandleList.push_back(
1280 jniOcResourceHandle->getOCResourceHandle());
1285 OCStackResult result = OCPlatform::bindResources(
1286 jniOcResourceCollectionHandle->getOCResourceHandle(),
1290 if (OC_STACK_OK != result)
1292 ThrowOcException(result, "Failed to bind resources");
1295 catch (OCException& e)
1297 LOGE("%s", e.reason().c_str());
1298 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1303 * Class: org_iotivity_base_OcPlatform
1304 * Method: unbindResource0
1305 * Signature: (Lorg/iotivity/base/OcResourceHandle;Lorg/iotivity/base/OcResourceHandle;)V
1307 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResource0
1308 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobject jResourceHandle)
1310 LOGI("OcPlatform_unbindResource");
1311 if (!jResourceCollectionHandle)
1313 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1316 if (!jResourceHandle)
1318 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1322 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1323 env, jResourceCollectionHandle);
1324 if (!jniOcResourceCollectionHandle) return;
1326 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1327 env, jResourceHandle);
1328 if (!jniOcResourceHandle) return;
1332 OCStackResult result = OCPlatform::unbindResource(
1333 jniOcResourceCollectionHandle->getOCResourceHandle(),
1334 jniOcResourceHandle->getOCResourceHandle()
1337 if (OC_STACK_OK != result)
1339 ThrowOcException(result, "Failed to unbind resource");
1342 catch (OCException& e)
1344 LOGE("%s", e.reason().c_str());
1345 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1350 * Class: org_iotivity_base_OcPlatform
1351 * Method: unbindResources0
1352 * Signature: (Lorg/iotivity/base/OcResourceHandle;[Lorg/iotivity/base/OcResourceHandle;)V
1354 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unbindResources0
1355 (JNIEnv *env, jclass clazz, jobject jResourceCollectionHandle, jobjectArray jResourceHandleArray)
1357 LOGI("OcPlatform_unbindResources");
1358 if (!jResourceCollectionHandle)
1360 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceCollectionHandle cannot be null");
1363 if (!jResourceHandleArray)
1365 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandleList cannot be null");
1369 JniOcResourceHandle* jniOcResourceCollectionHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1370 env, jResourceCollectionHandle);
1371 if (!jniOcResourceCollectionHandle) return;
1373 std::vector<OCResourceHandle> resourceHandleList;
1374 int len = env->GetArrayLength(jResourceHandleArray);
1375 for (int i = 0; i < len; ++i)
1377 jobject jResourceHandle = env->GetObjectArrayElement(jResourceHandleArray, i);
1378 if (!jResourceHandle)
1380 ThrowOcException(JNI_EXCEPTION, "resource handle cannot be null");
1384 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1385 env, jResourceHandle);
1386 if (!jniOcResourceHandle) return;
1388 resourceHandleList.push_back(
1389 jniOcResourceHandle->getOCResourceHandle());
1394 OCStackResult result = OCPlatform::unbindResources(
1395 jniOcResourceCollectionHandle->getOCResourceHandle(),
1399 if (OC_STACK_OK != result)
1401 ThrowOcException(result, "Failed to unbind resources");
1404 catch (OCException& e)
1406 LOGE("%s", e.reason().c_str());
1407 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1412 * Class: org_iotivity_base_OcPlatform
1413 * Method: bindTypeToResource0
1414 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1416 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindTypeToResource0
1417 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceTypeName)
1419 LOGI("OcPlatform_bindTypeToResource");
1420 if (!jResourceHandle)
1422 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1425 std::string typeName;
1426 if (jResourceTypeName)
1428 typeName = env->GetStringUTFChars(jResourceTypeName, NULL);
1431 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1432 env, jResourceHandle);
1433 if (!jniOcResourceHandle) return;
1437 OCStackResult result = OCPlatform::bindTypeToResource(
1438 jniOcResourceHandle->getOCResourceHandle(),
1442 if (OC_STACK_OK != result)
1444 ThrowOcException(result, "Failed to bind type to resource");
1447 catch (OCException& e)
1449 LOGE("%s", e.reason().c_str());
1450 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1455 * Class: org_iotivity_base_OcPlatform
1456 * Method: bindInterfaceToResource0
1457 * Signature: (Lorg/iotivity/base/OcResourceHandle;Ljava/lang/String;)V
1459 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_bindInterfaceToResource0
1460 (JNIEnv *env, jclass clazz, jobject jResourceHandle, jstring jResourceInterfaceName)
1462 LOGI("OcPlatform_bindInterfaceToResource");
1463 if (!jResourceHandle)
1465 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceHandle cannot be null");
1468 std::string interfaceName;
1469 if (jResourceInterfaceName)
1471 interfaceName = env->GetStringUTFChars(jResourceInterfaceName, NULL);
1474 JniOcResourceHandle* jniOcResourceHandle = JniOcResourceHandle::getJniOcResourceHandlePtr(
1475 env, jResourceHandle);
1476 if (!jniOcResourceHandle) return;
1480 OCStackResult result = OCPlatform::bindInterfaceToResource(
1481 jniOcResourceHandle->getOCResourceHandle(),
1485 if (OC_STACK_OK != result)
1487 ThrowOcException(result, "Failed to bind interface to resource");
1490 catch (OCException& e)
1492 LOGE("%s", e.reason().c_str());
1493 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1498 * Class: org_iotivity_base_OcPlatform
1499 * Method: startPresence0
1502 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_startPresence0
1503 (JNIEnv *env, jclass clazz, jint ttl)
1505 LOGI("OcPlatform_startPresence");
1509 OCStackResult result = OCPlatform::startPresence((unsigned int)ttl);
1511 if (OC_STACK_OK != result)
1513 ThrowOcException(result, "Failed to start presence");
1516 catch (OCException& e)
1518 LOGE("%s", e.reason().c_str());
1519 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1524 * Class: org_iotivity_base_OcPlatform
1525 * Method: stopPresence0
1528 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_stopPresence0
1529 (JNIEnv *env, jclass clazz)
1531 LOGI("OcPlatform_stopPresence");
1535 OCStackResult result = OCPlatform::stopPresence();
1537 if (OC_STACK_OK != result)
1539 ThrowOcException(result, "Failed to stop presence");
1542 catch (OCException& e)
1544 LOGE("%s", e.reason().c_str());
1545 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1550 * Class: org_iotivity_base_OcPlatform
1551 * Method: subscribePresence0
1552 * Signature: (Ljava/lang/String;ILorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1554 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence0
1555 (JNIEnv *env, jclass clazz, jstring jHost, jint jConnectivityType, jobject jListener)
1557 LOGD("OcPlatform_subscribePresence");
1561 host = env->GetStringUTFChars(jHost, NULL);
1565 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1569 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1571 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result, const unsigned int nonce,
1572 const std::string& hostAddress)
1574 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1577 OCPlatform::OCPresenceHandle presenceHandle;
1580 OCStackResult result = OCPlatform::subscribePresence(
1583 static_cast<OCConnectivityType>(jConnectivityType),
1586 if (OC_STACK_OK != result)
1588 ThrowOcException(result, "subscribe presence has failed");
1591 catch (OCException& e)
1593 LOGE("%s", e.reason().c_str());
1594 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1598 JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1599 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1600 jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1601 if (!jPresenceHandle)
1603 LOGE("Failed to create OcPresenceHandle");
1604 delete jniPresenceHandle;
1606 return jPresenceHandle;
1610 * Class: org_iotivity_base_OcPlatform
1611 * Method: subscribePresence1
1612 * Signature: (Ljava/lang/String;Ljava/lang/String;I
1613 Lorg/iotivity/base/OcPlatform/OnPresenceListener;)Lorg/iotivity/base/OcPresenceHandle;
1615 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_subscribePresence1
1616 (JNIEnv *env, jclass clazz, jstring jHost, jstring jResourceType, jint jConnectivityType, jobject jListener)
1618 LOGD("OcPlatform_subscribePresence1");
1622 host = env->GetStringUTFChars(jHost, NULL);
1624 std::string resourceType;
1627 resourceType = env->GetStringUTFChars(jResourceType, NULL);
1631 ThrowOcException(OC_STACK_INVALID_PARAM, "onPresenceListener cannot be null");
1635 JniOnPresenceListener *onPresenceListener = AddOnPresenceListener(env, jListener);
1637 SubscribeCallback subscribeCallback = [onPresenceListener](OCStackResult result,
1638 const unsigned int nonce, const std::string& hostAddress)
1640 onPresenceListener->onPresenceCallback(result, nonce, hostAddress);
1643 OCPlatform::OCPresenceHandle presenceHandle;
1646 OCStackResult result = OCPlatform::subscribePresence(
1650 static_cast<OCConnectivityType>(jConnectivityType),
1653 if (OC_STACK_OK != result)
1655 ThrowOcException(result, "subscribe presence has failed");
1658 catch (OCException& e)
1660 LOGE("%s", e.reason().c_str());
1661 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1665 JniOcPresenceHandle* jniPresenceHandle = new JniOcPresenceHandle(onPresenceListener, presenceHandle);
1666 jlong jhandle = reinterpret_cast<jlong>(jniPresenceHandle);
1667 jobject jPresenceHandle = env->NewObject(g_cls_OcPresenceHandle, g_mid_OcPresenceHandle_N_ctor, jhandle);
1668 if (!jPresenceHandle)
1670 LOGE("Failed to create OcPresenceHandle");
1671 delete jniPresenceHandle;
1673 return jPresenceHandle;
1677 * Class: org_iotivity_base_OcPlatform
1678 * Method: unsubscribePresence0
1679 * Signature: (Lorg/iotivity/base/OcPresenceHandle;)V
1681 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_unsubscribePresence0
1682 (JNIEnv *env, jclass clazz, jobject jPresenceHandle)
1684 LOGD("OcPlatform_unsubscribePresence");
1685 if (!jPresenceHandle)
1687 ThrowOcException(OC_STACK_INVALID_PARAM, "presenceHandle cannot be null");
1690 JniOcPresenceHandle* jniPresenceHandle = JniOcPresenceHandle::getJniOcPresenceHandlePtr(env, jPresenceHandle);
1691 if (!jniPresenceHandle) return;
1693 OCPresenceHandle presenceHandle = jniPresenceHandle->getOCPresenceHandle();
1697 OCStackResult result = OCPlatform::unsubscribePresence(presenceHandle);
1699 if (OC_STACK_OK != result)
1701 ThrowOcException(result, "unsubscribe presence has failed");
1704 jweak jwOnPresenceListener = jniPresenceHandle->getJniOnPresenceListener()->getJWListener();
1705 if (jwOnPresenceListener)
1707 RemoveOnPresenceListener(env, jwOnPresenceListener);
1710 catch (OCException& e)
1712 LOGE("%s", e.reason().c_str());
1713 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());
1718 * Class: org_iotivity_base_OcPlatform
1719 * Method: constructResourceObject0
1720 * Signature: (Ljava/lang/String;Ljava/lang/String;IZ[Ljava/lang/String;[Ljava/lang/String;)
1721 Lorg/iotivity/base/OcResource;
1723 JNIEXPORT jobject JNICALL Java_org_iotivity_base_OcPlatform_constructResourceObject0
1724 (JNIEnv *env, jclass clazz, jstring jHost, jstring jUri, jint jConnectivityType,
1725 jboolean jIsObservable, jobjectArray jResourceTypeArray, jobjectArray jInterfaceArray)
1727 LOGD("OcPlatform_constructResourceObject");
1731 host = env->GetStringUTFChars(jHost, NULL);
1736 uri = env->GetStringUTFChars(jUri, NULL);
1738 if (!jResourceTypeArray)
1740 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceTypeList cannot be null");
1743 if (!jInterfaceArray)
1745 ThrowOcException(OC_STACK_INVALID_PARAM, "interfaceList cannot be null");
1749 std::vector<std::string> resourceTypes;
1750 JniUtils::convertJavaStrArrToStrVector(env, jResourceTypeArray, resourceTypes);
1752 std::vector<std::string> interfaces;
1753 JniUtils::convertJavaStrArrToStrVector(env, jInterfaceArray, interfaces);
1755 std::shared_ptr<OCResource> resource = OCPlatform::constructResourceObject(
1758 static_cast<OCConnectivityType>(jConnectivityType),
1759 static_cast<bool>(jIsObservable),
1765 ThrowOcException(OC_STACK_ERROR, "Failed to create OCResource");
1769 JniOcResource *jniOcResource = new JniOcResource(resource);
1770 jlong handle = reinterpret_cast<jlong>(jniOcResource);
1772 jobject jResource = env->NewObject(g_cls_OcResource, g_mid_OcResource_ctor);
1775 delete jniOcResource;
1778 SetHandle<JniOcResource>(env, jResource, jniOcResource);
1779 if (env->ExceptionCheck())
1781 delete jniOcResource;
1788 * Class: org_iotivity_base_OcPlatform
1789 * Method: sendResponse0
1790 * Signature: (Lorg/iotivity/base/OcResourceResponse;)V
1792 JNIEXPORT void JNICALL Java_org_iotivity_base_OcPlatform_sendResponse0
1793 (JNIEnv *env, jclass clazz, jobject jResourceResponse)
1795 LOGD("OcPlatform_sendResponse");
1796 if (!jResourceResponse)
1798 ThrowOcException(OC_STACK_INVALID_PARAM, "resourceResponse cannot be null");
1802 JniOcResourceResponse *jniResponse = JniOcResourceResponse::getJniOcResourceResponsePtr(
1803 env, jResourceResponse);
1804 if (!jniResponse) return;
1808 OCStackResult result = OCPlatform::sendResponse(jniResponse->getOCResourceResponse());
1810 if (OC_STACK_OK != result)
1812 ThrowOcException(result, "failed to send response");
1815 catch (OCException& e)
1817 LOGE("%s", e.reason().c_str());
1818 ThrowOcException(OC_STACK_ERROR, e.reason().c_str());