/* * Class: org_iotivity_base_OcResource * Method: put2 * Signature: (Ljava/lang/String;Ljava/lang/String;Lorg/iotivity/base/OcRepresentation; Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPutListener;)V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put2 (JNIEnv *env, jobject thiz, jstring jResourceType, jstring jResourceInterface, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener) { LOGD("OcResource_put"); std::string resourceType; if (jResourceType) { resourceType = env->GetStringUTFChars(jResourceType, nullptr); } std::string resourceInterface; if (jResourceInterface) { resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr); } if (!jRepresentation) { ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null"); return; } if (!jQueryParamsMap) { ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null"); return; } if (!jListener) { ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null"); return; } JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation); if (!representation) return; QueryParamsMap qpm; JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm); try { OCStackResult result = resource->put( env, resourceType, resourceInterface, *representation, qpm, jListener); if (OC_STACK_OK != result) { ThrowOcException(result, "OcResource_put"); } } catch (OCException& e) { LOGE("%s", e.reason().c_str()); ThrowOcException(e.code(), e.reason().c_str()); } }
/* * Class: org_iotivity_base_OcResource * Method: deleteResource1 * Signature: (Lorg/iotivity/base/OcResource/OnDeleteListener;I)V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_deleteResource1 (JNIEnv *env, jobject thiz, jobject jListener, jint jQoS) { LOGD("OcResource_deleteResource"); if (!jListener) { ThrowOcException(OC_STACK_INVALID_PARAM, "onDeleteListener cannot be null"); return; } JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; try { OCStackResult result = resource->deleteResource( env, jListener, JniUtils::getQOS(env, static_cast<int>(jQoS))); if (OC_STACK_OK != result) { ThrowOcException(result, "OcResource_deleteResource"); } } catch (OCException& e) { LOGE("%s", e.reason().c_str()); ThrowOcException(e.code(), e.reason().c_str()); } }
/* * Class: org_iotivity_base_OcResource * Method: put1 * Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map; Lorg/iotivity/base/OcResource/OnPutListener;I)V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_put1 (JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap, jobject jListener, jint jQoS) { LOGD("OcResource_put"); if (!jRepresentation) { ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null"); return; } if (!jQueryParamsMap) { ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null"); return; } if (!jListener) { ThrowOcException(OC_STACK_INVALID_PARAM, "onPutListener cannot be null"); return; } JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation); if (!representation) return; QueryParamsMap qpm; JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm); try { OCStackResult result = resource->put( env, *representation, qpm, jListener, JniUtils::getQOS(env, static_cast<int>(jQoS))); if (OC_STACK_OK != result) { ThrowOcException(result, "OcResource_put"); } } catch (OCException& e) { LOGE("%s", e.reason().c_str()); ThrowOcException(e.code(), e.reason().c_str()); } }
JniOcResource* JniOcResource::getJniOcResourcePtr(JNIEnv *env, jobject thiz) { JniOcResource *resource = GetHandle<JniOcResource>(env, thiz); if (env->ExceptionCheck()) { LOGE("Failed to get native handle from OcResource"); } if (!resource) { ThrowOcException(JNI_NO_NATIVE_POINTER, ""); } return resource; }
/* * Class: org_iotivity_base_OcResource * Method: cancelObserve * Signature: ()V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_cancelObserve (JNIEnv *env, jobject thiz) { LOGD("OcResource_cancelObserve"); JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; try { OCStackResult result = resource->cancelObserve(env); if (OC_STACK_OK != result) { ThrowOcException(result, "OcResource_cancelObserve"); } } catch (OCException& e) { LOGE("%s", e.reason().c_str()); ThrowOcException(e.code(), e.reason().c_str()); } }
/* * Class: org_iotivity_base_OcResource * Method: observe * Signature: (Lorg/iotivity/base/ObserveType;Ljava/util/Map; Lorg/iotivity/base/OcResource/OnObserveListener;)V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_observe (JNIEnv *env, jobject thiz, jint observeType, jobject jQueryParamsMap, jobject jListener) { LOGD("OcResource_observe"); if (!jQueryParamsMap) { ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null"); return; } if (!jListener) { ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null"); return; } JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; QueryParamsMap qpm; JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm); try { OCStackResult result = resource->observe( env, JniUtils::getObserveType(env, static_cast<int>(observeType)), qpm, jListener); if (OC_STACK_OK != result) { ThrowOcException(result, "OcResource_observe"); } } catch (OCException& e) { LOGE("%s", e.reason().c_str()); ThrowOcException(e.code(), e.reason().c_str()); } }
JniOcResourceIdentifier* JniOcResourceIdentifier::getJniOcResourceIdentifierPtr (JNIEnv *env, jobject thiz) { JniOcResourceIdentifier *identifier = GetHandle<JniOcResourceIdentifier>(env, thiz); if (env->ExceptionCheck()) { LOGE("Failed to get native handle from OcResourceIdentifier"); } if (!identifier) { ThrowOcException(JNI_NO_NATIVE_POINTER, ""); } return identifier; }
/* * Class: org_iotivity_base_OcResource * Method: setHeaderOptions * Signature: ([Lorg/iotivity/OcHeaderOption;)V */ JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_setHeaderOptions (JNIEnv *env, jobject thiz, jobjectArray jheaderOptionArr) { LOGD("OcResource_setHeaderOptions"); if (!jheaderOptionArr) { ThrowOcException(OC_STACK_INVALID_PARAM, "headerOptionList cannot be null"); return; } JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz); if (!resource) return; HeaderOptions headerOptions; JniUtils::convertJavaHeaderOptionsArrToVector(env, jheaderOptionArr, headerOptions); resource->setHeaderOptions(headerOptions); }
void JniOnPresenceListener::onPresenceCallback(OCStackResult result, const unsigned int nonce, const std::string& hostAddress) { LOGI("JniOnPresenceListener::onPresenceCallback"); if (!m_jwListener) return; jint ret; JNIEnv *env = GetJNIEnv(ret); if (NULL == env) return; if (OC_STACK_OK != result && OC_STACK_PRESENCE_STOPPED != result && OC_STACK_PRESENCE_TIMEOUT != result && OC_STACK_PRESENCE_DO_NOT_HANDLE != result) { ThrowOcException(result, "onPresenceCallback: stack failure"); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } std::string enumField = JniUtils::stackResultToStr(result); if (enumField.empty()) { ThrowOcException(JNI_INVALID_VALUE, "Unexpected OCStackResult value"); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } jobject jPresenceStatus = env->CallStaticObjectMethod(g_cls_OcPresenceStatus, g_mid_OcPresenceStatus_get, env->NewStringUTF(enumField.c_str())); if (!jPresenceStatus) { checkExAndRemoveListener(env); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } jobject jListener = env->NewLocalRef(m_jwListener); if (!jListener) { checkExAndRemoveListener(env); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } jclass clsL = env->GetObjectClass(jListener); if (!clsL) { checkExAndRemoveListener(env); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } jmethodID midL = env->GetMethodID(clsL, "onPresence", "(Lorg/iotivity/base/OcPresenceStatus;ILjava/lang/String;)V"); if (!midL) { checkExAndRemoveListener(env); if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); return; } env->CallVoidMethod(jListener, midL, jPresenceStatus, (jint)nonce, env->NewStringUTF(hostAddress.c_str())); if (env->ExceptionCheck()) { LOGE("Java exception is thrown"); checkExAndRemoveListener(env); } if (JNI_EDETACHED == ret) g_jvm->DetachCurrentThread(); }
OCEntityHandlerResult JniEntityHandler::handleEntity( const std::shared_ptr<OCResourceRequest> request) { LOGD("JniEntityHandler_handleEntity"); jint envRet; JNIEnv *env = GetJNIEnv(envRet); if (NULL == env) { return OC_EH_ERROR; } JniOcResourceRequest* jniResReq = new JniOcResourceRequest(request); jlong reqHandle = reinterpret_cast<jlong>(jniResReq); jobject jResourceRequest = env->NewObject(g_cls_OcResourceRequest, g_mid_OcResourceRequest_N_ctor, reqHandle); if (!jResourceRequest) { LOGE("Failed to create OcResourceRequest"); delete jniResReq; if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } jclass clsL = env->GetObjectClass(m_jListener); if (!clsL) { if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } jmethodID midL = env->GetMethodID(clsL, "handleEntity", "(Lorg/iotivity/base/OcResourceRequest;)Lorg/iotivity/base/EntityHandlerResult;"); if (!midL) { if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } jobject entityHandlerResult = env->CallObjectMethod(m_jListener, midL, jResourceRequest); if (env->ExceptionCheck()) { if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } if (!entityHandlerResult) { ThrowOcException(JNI_INVALID_VALUE, "EntityHandlerResult cannot be null"); if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } jclass clsResult = env->GetObjectClass(entityHandlerResult); if (!clsResult) { if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } jmethodID getValue_ID = env->GetMethodID(clsResult, "getValue", "()I"); if (!getValue_ID) { if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread(); return OC_EH_ERROR; } jint jResult = env->CallIntMethod(entityHandlerResult, getValue_ID); if (env->ExceptionCheck()) { LOGE("Java exception is thrown"); if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return OC_EH_ERROR; } if (JNI_EDETACHED == envRet) { g_jvm->DetachCurrentThread(); } return JniUtils::getOCEntityHandlerResult(env, static_cast<int>(jResult)); }