Beispiel #1
0
/*
* 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());
    }
}
Beispiel #2
0
/*
* 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());
    }
}
Beispiel #3
0
/*
* 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());
    }
}
Beispiel #4
0
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;
}
Beispiel #5
0
/*
* 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());
    }
}
Beispiel #6
0
/*
* 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;
}
Beispiel #8
0
/*
* 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));
}