예제 #1
0
JNIEXPORT void JNICALL Java_org_iotivity_service_ssm_CoreController_killContextQuery
(JNIEnv *env, jclass clz, jlong pQueryEngineInstance, jint cqid)
{
    IQueryEngine        *pQueryEngine = (IQueryEngine *)pQueryEngineInstance;

    if (pQueryEngine->killContextQuery(cqid) != SSM_S_OK)
    {
        env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "KillContextQuery failed");
    }
}
예제 #2
0
JNIEXPORT void JNICALL Java_org_iotivity_service_ssm_CoreController_registerQueryEvent
(JNIEnv *env, jclass clz, jlong pQueryEngineInstance, jobject queryEngineEvent)
{
    IQueryEngine        *pQueryEngine = (IQueryEngine *)pQueryEngineInstance;

    if (queryEngineEvent == NULL)
    {
        pQueryEngine->unregisterQueryEvent(g_QueryEngineEventReceiver);
        return;
    }

    g_QueryEngineEventReceiver->setQueryEngineEventObj(env->NewGlobalRef(queryEngineEvent));
    pQueryEngine->registerQueryEvent(g_QueryEngineEventReceiver);
}
예제 #3
0
JNIEXPORT jint JNICALL Java_org_iotivity_service_ssm_CoreController_executeContextQuery
(JNIEnv *env, jclass clz, jlong pQueryEngineInstance, jstring jstrContextQuery)
{
    int                 cqid = -1;
    if (jstrContextQuery == NULL)
    {
        env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"),
                      "ExecuteContextQuery with Invalid context query");
        return cqid;
    }

    IQueryEngine        *pQueryEngine = (IQueryEngine *)pQueryEngineInstance;

    const char *contextQuery = env->GetStringUTFChars(jstrContextQuery, NULL);

    if (pQueryEngine->executeContextQuery(contextQuery, &cqid) != SSM_S_OK)
    {
        env->ThrowNew(env->FindClass("java/lang/IllegalArgumentException"), "ExecuteContextQuery failed");
    }

    env->ReleaseStringUTFChars(jstrContextQuery, contextQuery);
    return cqid;
}
예제 #4
0
OCEntityHandlerResult SSMResourceServer::entityHandler(std::shared_ptr< OCResourceRequest > request)
{
    SSMRESULT res = SSM_E_FAIL;

    auto response = std::make_shared<OC::OCResourceResponse>();

    if (request)
    {
        // Get the request type and request flag
        std::string requestType = request->getRequestType();
        int requestFlag = request->getRequestHandlerFlag();

        response->setRequestHandle(request->getRequestHandle());
        response->setResourceHandle(request->getResourceHandle());

        if (requestFlag & RequestHandlerFlag::InitFlag)
        {
            // entity handler to perform resource initialization operations
        }

        if (requestFlag & RequestHandlerFlag::RequestFlag)
        {
            cout << "\t\trequestFlag : Request\n";

            // If the request type is GET
            if (requestType == "GET")
            {
                std::map<std::string, std::string> responseAttributeMap;

                OCRepresentation rep = request->getResourceRepresentation();

                if (g_vecQueryEventResults.size() > 0)
                {
                    responseAttributeMap = g_vecQueryEventResults.front();
                    g_vecQueryEventResults.erase(g_vecQueryEventResults.begin());
                }

                if (response)
                {
                    for (std::map<std::string, std::string>::iterator itor =
                             responseAttributeMap.begin(); itor != responseAttributeMap.end();
                         ++itor)
                    {
                        rep.setValue(itor->first, itor->second);
                    }

                    response->setErrorCode(200);
                    response->setResourceRepresentation(rep, DEFAULT_INTERFACE);
                }
            }
            else if (requestType == "PUT")
            {
                OCRepresentation rep = request->getResourceRepresentation();

                IQueryEngine *pQueryEngine = NULL;

                std::stringstream sstream;

                // Process query params and do required operations ..
                if (rep.getValue<std::string>("command") == "CreateQueryEngine")
                {
                    CQueryEngineEvent *queryEngineEvent = NULL;

                    res = CreateQueryEngine(&pQueryEngine);

                    if (res != SSM_S_OK)
                    {
                        rep.setValue("error", "CreateQueryEngine failed");
                        goto CLEANUP;
                    }

                    sstream << reinterpret_cast<intptr_t>(pQueryEngine);

                    // Register QueryEngineEvent
                    queryEngineEvent = new CQueryEngineEvent(sstream.str(), m_hSSMResource);

                    if (queryEngineEvent == NULL)
                    {
                        rep.setValue("error", "QueryEngineEvent create failed");
                        goto CLEANUP;
                    }

                    res = pQueryEngine->registerQueryEvent(queryEngineEvent);

                    if (res != SSM_S_OK)
                    {
                        rep.setValue("error", "RegisterQueryEvent failed");
                        goto CLEANUP;
                    }

                    rep.setValue("queryEngineId", sstream.str());
                }
                else if (rep.getValue<std::string>("command") == "ReleaseQueryEngine")
                {
                    pQueryEngine = (IQueryEngine *) std::stoi(
                                       rep.getValue<std::string>("queryEngineId"));

                    ReleaseQueryEngine(pQueryEngine);
                }
                else if (rep.getValue<std::string>("command") == "ExecuteContextQuery")
                {
                    int CQID = 0;

                    pQueryEngine = (IQueryEngine *) std::stoi(
                                       rep.getValue<std::string>("queryEngineId"));

                    res = pQueryEngine->executeContextQuery(
                              rep.getValue<std::string>("contextQuery"), &CQID);

                    if (res != SSM_S_OK)
                    {
                        rep.setValue("error", "ExecuteContextQuery failed");
                        goto CLEANUP;
                    }

                    sstream << CQID;

                    rep.setValue("CQID", sstream.str());
                }
                else if (rep.getValue<std::string>("command") == "KillContextQuery")
                {
                    pQueryEngine = (IQueryEngine *) std::stoi(
                                       rep.getValue<std::string>("queryEngineId"));

                    res = pQueryEngine->killContextQuery(std::stoi(rep.getValue<std::string>("CQID")));

                    if (res != SSM_S_OK)
                    {
                        rep.setValue("error", "KillContextQuery failed");
                        goto CLEANUP;
                    }
                }

CLEANUP:
                if (response)
                {
                    response->setErrorCode(200);
                    response->setResourceRepresentation(rep, DEFAULT_INTERFACE);
                }
            }
            else if (requestType == "POST")
            {
                // POST request operations
            }
            else if (requestType == "DELETE")
            {
                // DELETE request operations
            }
        }

        if (requestFlag & RequestHandlerFlag::ObserverFlag)
        {
            // perform observe related operations on the resource.
        }
    }

    return OCPlatform::sendResponse(response) == OC_STACK_OK ? OC_EH_OK : OC_EH_ERROR;
}