Ejemplo n.º 1
0
OCStackResult CreateProvisioningResource(bool isSecured)
{
    gProvResource.ps = ES_PS_NEED_PROVISIONING;
    gProvResource.tr = ES_PS_TRIGGER_INIT_VALUE;

    gProvResource.tnt = CT_ADAPTER_IP;
    OICStrcpy(gProvResource.tnn, sizeof(gProvResource.tnn), "Unknown");
    OICStrcpy(gProvResource.cd, sizeof(gProvResource.cd), "Unknown");

    OCStackResult res = OC_STACK_ERROR;
    if (isSecured)
    {
        res = OCCreateResource(&gProvResource.handle, OC_RSRVD_ES_PROV_RES_TYPE,
        OC_RSRVD_INTERFACE_DEFAULT,
        OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb,
        NULL, OC_DISCOVERABLE | OC_OBSERVABLE | OC_SECURE);
    }
    else
    {
        res = OCCreateResource(&gProvResource.handle, OC_RSRVD_ES_PROV_RES_TYPE,
        OC_RSRVD_INTERFACE_DEFAULT,
        OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb,
        NULL, OC_DISCOVERABLE | OC_OBSERVABLE);
    }

    OIC_LOG_V(INFO, ES_RH_TAG, "Created Prov resource with result: %s", getResult(res));
    return res;
}
Ejemplo n.º 2
0
OCStackResult registerLocalResources()
{
    std::string resourceURI_thermostat = "/a/thermostat";
    std::string resourceTypeName_thermostat = "core.thermostat";
    std::string resourceURI_light = "/a/light";
    std::string resourceTypeName_light = "core.light";
    std::string resourceInterface = OC_RSRVD_INTERFACE_DEFAULT;
    uint8_t resourceProperty = OC_DISCOVERABLE;

    OCStackResult result = OCCreateResource(&handles[0],
                                           resourceTypeName_thermostat.c_str(),
                                           resourceInterface.c_str(),
                                           resourceURI_thermostat.c_str(),
                                           NULL,
                                           NULL,
                                           resourceProperty);

    if (OC_STACK_OK != result)
    {
        return result;
    }

    result = OCCreateResource(&handles[1],
                              resourceTypeName_light.c_str(),
                              resourceInterface.c_str(),
                              resourceURI_light.c_str(),
                              NULL,
                              NULL,
                              resourceProperty);

    return result;
}
Ejemplo n.º 3
0
    OCStackResult InProcServerWrapper::registerResource(
                    OCResourceHandle& resourceHandle,
                    std::string& resourceURI,
                    const std::string& resourceTypeName,
                    const std::string& resourceInterface,
                    EntityHandler& eHandler,
                    uint8_t resourceProperties)

    {
        OCStackResult result = OC_STACK_ERROR;

        auto cLock = m_csdkLock.lock();

        if(cLock)
        {
            std::lock_guard<std::recursive_mutex> lock(*cLock);

            if(NULL != eHandler)
            {
                result = OCCreateResource(&resourceHandle, // OCResourceHandle *handle
                            resourceTypeName.c_str(), // const char * resourceTypeName
                            resourceInterface.c_str(), //const char * resourceInterfaceName //TODO fix this
                            resourceURI.c_str(), // const char * uri
                            EntityHandlerWrapper, // OCEntityHandler entityHandler
                            NULL,
                            resourceProperties // uint8_t resourceProperties
                            );
            }
            else
            {
                result = OCCreateResource(&resourceHandle, // OCResourceHandle *handle
                            resourceTypeName.c_str(), // const char * resourceTypeName
                            resourceInterface.c_str(), //const char * resourceInterfaceName //TODO fix this
                            resourceURI.c_str(), // const char * uri
                            NULL, // OCEntityHandler entityHandler
                            NULL,
                            resourceProperties // uint8_t resourceProperties
                            );
            }

            if(result != OC_STACK_OK)
            {
                resourceHandle = (OCResourceHandle) 0;
            }
            else
            {
                std::lock_guard<std::mutex> lock(OC::details::serverWrapperLock);
                OC::details::entityHandlerMap[resourceHandle] = eHandler;
                OC::details::resourceUriMap[resourceHandle] = resourceURI;
            }
        }
        else
        {
            result = OC_STACK_ERROR;
        }

        return result;
    }
Ejemplo n.º 4
0
void createResources()
{
    light.state = false;

    OCResourceHandle fan;
    OCStackResult res = OCCreateResource(&fan,
            "core.fan",
            "oc.mi.def",
            "/a/fan",
            OCEntityHandlerFanCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created fan resource with result: %s", getResult(res));

    OCResourceHandle light;
    res = OCCreateResource(&light,
            "core.light",
            "oc.mi.def",
            "/a/light",
            OCEntityHandlerLightCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created light resource with result: %s", getResult(res));

    OCResourceHandle room;

    if(TEST == TEST_APP_COLL_EH)
    {
        res = OCCreateResource(&room,
                "core.room",
                "oc.mi.b",
                "/a/room",
                OCEntityHandlerRoomCb,
                OC_DISCOVERABLE);
    }
    else
    {
        res = OCCreateResource(&room,
                "core.room",
                "oc.mi.b",
                "/a/room",
                NULL,
                OC_DISCOVERABLE);
    }

    OC_LOG_V(INFO, TAG, "Created room resource with result: %s", getResult(res));
    OCBindResourceInterfaceToResource(room, "oc.mi.ll");
    OCBindResourceInterfaceToResource(room, "oc.mi.def");

    res = OCBindResource(room, light);
    OC_LOG_V(INFO, TAG, "OC Bind Contained Resource to resource: %s", getResult(res));

    res = OCBindResource(room, fan);
    OC_LOG_V(INFO, TAG, "OC Bind Contained Resource to resource: %s", getResult(res));
}
Ejemplo n.º 5
0
void piNewResourceCB(PIPluginBase * p_plugin, PIResourceBase * r_newResource)
{
    if (!p_plugin || !r_newResource)
    {
        return;
    }

    r_newResource->piResource.resourceProperties = OC_DISCOVERABLE | OC_OBSERVABLE;
    OCStackResult result = OCCreateResource(&r_newResource->piResource.resourceHandle,
                                            r_newResource->piResource.resourceTypeName,
                                            r_newResource->piResource.resourceInterfaceName,
                                            r_newResource->piResource.uri,
                                            PluginInterfaceEntityHandler,
                                            (void *) p_plugin,
                                            r_newResource->piResource.resourceProperties);
    if (result != OC_STACK_OK)
    {
        OICFree (r_newResource->piResource.uri);
        OICFree (r_newResource);
        return;
    }
    OIC_LOG_V(INFO, TAG, "Created resource of type: %s\n",
        r_newResource->piResource.resourceTypeName);

    result = AddResourceToPlugin(p_plugin, r_newResource);
}
OCStackResult CreateNetworkResource()
{
    NetworkInfo netInfo;

    if (getCurrentNetworkInfo(CT_ADAPTER_IP, &netInfo) != ES_OK)
    {
        return OC_STACK_ERROR;
    }

    if (netInfo.type != CT_ADAPTER_IP)
    {
        return OC_STACK_ERROR;
    }

    g_net.cnt = (int) netInfo.type;
    g_net.ant[0] = (int) CT_ADAPTER_IP;
    sprintf(g_net.ipaddr, "%d.%d.%d.%d", netInfo.ipaddr[0], netInfo.ipaddr[1], netInfo.ipaddr[2],
            netInfo.ipaddr[3]);
    sprintf(g_net.cnn, "%s", netInfo.ssid);

    OC_LOG_V(INFO, ES_RH_TAG, "SSID: %s", g_net.cnn);
    OC_LOG_V(INFO, ES_RH_TAG, "IP Address: %s", g_net.ipaddr);

    OCStackResult res = OCCreateResource(&g_net.handle, "oic.r.net", OC_RSRVD_INTERFACE_DEFAULT,
            OC_RSRVD_ES_URI_NET, OCEntityHandlerCb,NULL, OC_DISCOVERABLE | OC_OBSERVABLE);
    OC_LOG_V(INFO, ES_RH_TAG, "Created Net resource with result: %s", getResult(res));

    return res;
}
Ejemplo n.º 7
0
struct things_resource_s *create_resource(struct things_server_builder_s *builder, char *uri, char *type, char *interface, int isDiscoverable, int isObserable, int isSecure)
{
	things_resource_s *res = NULL;
	OCResourceHandle hd = NULL;
	uint8_t rsc_properties = OC_DISCOVERABLE;

	if (builder->handler == NULL) {
		THINGS_LOG_E(TAG, "Handler for serverbuilder is not registered");
		return res;
	}

	if (1 != isDiscoverable) {
		rsc_properties = OC_ACTIVE;
	}

	if (1 == isObserable) {
		rsc_properties |= OC_OBSERVABLE;
	}

	if (1 == isSecure) {
#ifdef __SECURED__
		rsc_properties |= OC_SECURE;
#else
		THINGS_LOG_D(TAG, "Stack is in UNSECURED Mode");
#endif
	}

	iotivity_api_lock();
	OCStackResult ret = OCCreateResource(&hd,
										 type,
										 interface,
										 uri,
										 builder->handler,
										 NULL,
										 rsc_properties);
	iotivity_api_unlock();
	if (ret != OC_STACK_OK) {
		THINGS_LOG_V(TAG, "Resource Creation Failed - ret = %d, %s", ret, uri);
		return NULL;
	}

	res = things_create_resource_inst(NULL, hd, NULL, NULL);

	if (NULL == res) {
		THINGS_LOG_E(TAG, "things_create_resource_inst is failed");
		return res;
	}

	res->res_type = things_strdup(type);

	builder->gres_arr[builder->res_num++] = res;

	THINGS_LOG_D(TAG, "Created hd [%x], prop [0x%X] uri : %s", res->resource_handle, rsc_properties, res->uri);
	THINGS_LOG_D(TAG, "DISCOVERABLE : %s", (isDiscoverable == 1 ? "YES" : "NO"));
	THINGS_LOG_D(TAG, "OBSERABLE : %s", (isObserable == 1 ? "YES" : "NO"));
	THINGS_LOG_D(TAG, "SECURE : %s", (isSecure == 1 ? "YES" : "NO"));

	return res;
}
Ejemplo n.º 8
0
OCStackResult createLightResource() {
    Light.power = false;
    OCStackResult res = OCCreateResource(&Light.handle,
                    "core.light",
                    "core.rw",
                    "/a/light",
                    0,
                    NULL,
                    OC_DISCOVERABLE|OC_OBSERVABLE);
    return res;
}
Ejemplo n.º 9
0
void createLightResource()
{
    Light.state = false;
    OCStackResult res = OCCreateResource(&Light.handle,
            "core.light",
            "oc.mi.def",
            "/a/light",
            OCEntityHandlerCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res));
}
Ejemplo n.º 10
0
void createResource()
{

    OCStackResult res = OCCreateResource(&m_handle,
                                         "SSManager.Sensor",
                                         "oc.mi.def",
                                         "/Tracker_Thing",
                                         OCEntityHandlerCb,
                                         OC_DISCOVERABLE | OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created PROXI resource with result: %s", getResult(res));
}
Ejemplo n.º 11
0
void createLightResource()
{
    Light.state = false;
    OCStackResult res = OCCreateResource(&Light.handle,
            "core.light",
            OC_RSRVD_INTERFACE_DEFAULT,
            "/a/light",
            OCEntityHandlerCb,
            NULL,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res));
}
Ejemplo n.º 12
0
void createTHResource()
{
    TH.m_humid = 0;
    TH.m_temp = 0;

    OCStackResult res = OCCreateResource(&TH.m_handle,
                                         "SoftSensorManager.Sensor",
                                         "oc.mi.def",
                                         "/Thing_TempHumSensor1",
                                         OCEntityHandlerCb,
                                         OC_DISCOVERABLE | OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created TH resource with result: %s", getResult(res));
}
Ejemplo n.º 13
0
void createTHResource()
{
    TH.m_humid = 0;
    TH.m_temp = 0;

    OCStackResult res = OCCreateResource(&TH.m_handle,
                                         "SSManager.Sensor",
                                         OC_RSRVD_INTERFACE_DEFAULT,
                                         "/Thing_TempHumSensor",
                                         OCEntityHandlerCb,
                                         OC_DISCOVERABLE | OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created TH resource with result: %s", getResult(res));
}
OCStackResult CreateProvisioningResource()
{
    g_prov.ps = 1; // need to provisioning
    g_prov.tnt = CT_ADAPTER_IP;
    sprintf(g_prov.tnn, "Unknown");
    sprintf(g_prov.cd, "Unknown");

    OCStackResult res = OCCreateResource(&g_prov.handle, "oic.r.prov", OC_RSRVD_INTERFACE_DEFAULT,
            OC_RSRVD_ES_URI_PROV, OCEntityHandlerCb, NULL, OC_DISCOVERABLE | OC_OBSERVABLE);

    OC_LOG_V(INFO, ES_RH_TAG, "Created Prov resource with result: %s", getResult(res));

    return res;
}
Ejemplo n.º 15
0
void *presenceNotificationGenerator(void *param)
{
    sleep(5);
    (void)param;
    OCDoHandle presenceNotificationHandles[numPresenceResources];
    OCStackResult res = OC_STACK_OK;

    std::array<std::string, numPresenceResources> presenceNotificationResources { {
        std::string("core.fan"),
        std::string("core.led") } };
    std::array<std::string, numPresenceResources> presenceNotificationUris { {
        std::string("/a/fan"),
        std::string("/a/led") } };

    for(int i=0; i<numPresenceResources; i++)
    {
        if(res == OC_STACK_OK)
        {
            sleep(1);
            res = OCCreateResource(&presenceNotificationHandles[i],
                    presenceNotificationResources.at(i).c_str(),
                    "oc.mi.def",
                    presenceNotificationUris.at(i).c_str(),
                    OCNOPEntityHandlerCb,
                    OC_DISCOVERABLE|OC_OBSERVABLE);
        }
        if(res != OC_STACK_OK)
        {
            OC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to create resource "
                    "%s with result %s.", presenceNotificationResources.at(i).c_str(),
                    getResult(res));
            break;
        }
    }
    sleep(5);
    for(int i=0; i<numPresenceResources; i++)
    {
        if(res == OC_STACK_OK)
        {
            res = OCDeleteResource(presenceNotificationHandles[i]);
        }
        if(res != OC_STACK_OK)
        {
            OC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to delete "\
                    "resource %s.", presenceNotificationResources.at(i).c_str());
            break;
        }
    }
    return NULL;
}
Ejemplo n.º 16
0
struct things_resource_s *create_collection_resource(struct things_server_builder_s *builder, char *uri, char *type)
{
	things_resource_s *res = NULL;
	OCResourceHandle hd = NULL;
	uint8_t rsc_properties = OC_DISCOVERABLE | OC_OBSERVABLE;

	if (builder->handler == NULL) {
		THINGS_LOG_E(TAG, "Handler for serverbuilder is not registered");
		return res;
	}
#ifdef __SECURED__

	rsc_properties |= OC_SECURE;

#endif							//#ifdef __SECURED__
	iotivity_api_lock();
	OCStackResult ret = OCCreateResource(&hd,
										 type,
										 OIC_INTERFACE_LINKEDLIST,
										 uri,
										 builder->handler,
										 NULL,
										 rsc_properties);
	if (ret != OC_STACK_OK) {
		THINGS_LOG_V(TAG, "Resource Creation Failed - ret = %d, %s", ret, uri);
		iotivity_api_unlock();
		return NULL;
	}

	OCBindResourceTypeToResource(hd, OIC_RTYPE_COLLECTION_WK);
	OCBindResourceInterfaceToResource(hd, OIC_INTERFACE_BATCH);
	iotivity_api_unlock();

	res = things_create_resource_inst(NULL, hd, NULL, NULL);

	if (NULL == res) {
		THINGS_LOG_E(TAG, "things_create_resource_inst is failed");
		return res;
	}

	res->res_type = things_strdup(type);

	builder->gres_arr[builder->res_num++] = res;

	THINGS_LOG_V(TAG, "Created hd [%x], prop [0x%X] uri : %s", res->resource_handle, rsc_properties, uri);

	return res;
}
Ejemplo n.º 17
0
/**
 * This internal method is used to create '/oic/sec/pstat' resource.
 */
 OCStackResult CreatePstatResource()
{
    OCStackResult ret = OCCreateResource(&gPstatHandle,
                                         OIC_RSRC_TYPE_SEC_PSTAT,
                                         OIC_MI_DEF,
                                         OIC_RSRC_PSTAT_URI,
                                         PstatEntityHandler,
                                         NULL,
                                         OC_RES_PROP_NONE);

    if (OC_STACK_OK != ret)
    {
        OIC_LOG(FATAL, TAG, "Unable to instantiate pstat resource");
        DeInitPstatResource();
    }
    return ret;
}
Ejemplo n.º 18
0
int 
createLightResource (char *uri, LightResource *lightResource) {
    if (!uri) {
        printf ("Resource URI cannot be NULL\n");
        return -1;
    }

    lightResource->state 	= false;
    lightResource->power	= 0;
    OCStackResult res = OCCreateResource(&(lightResource->handle),
            "core.light",
            "oc.mi.def",
            uri,
            OCEntityHandlerCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);

    return 0;
}
Ejemplo n.º 19
0
/*
 * This internal method is used to create '/oic/sec/doxm' resource.
 */
OCStackResult CreateDoxmResource()
{
    OCStackResult ret;

    ret = OCCreateResource(&gDoxmHandle,
                           OIC_RSRC_TYPE_SEC_DOXM,
                           OIC_MI_DEF,
                           OIC_RSRC_DOXM_URI,
                           DoxmEntityHandler,
                           NULL,
                           OC_OBSERVABLE | OC_SECURE | OC_EXPLICIT_DISCOVERABLE);

    if (OC_STACK_OK != ret)
    {
        OIC_LOG (FATAL, TAG, "Unable to instantiate Doxm resource");
        DeInitDoxmResource();
    }
    return ret;
}
Ejemplo n.º 20
0
/**
 * CreateLightResource creates a new light resource by calling the OCCreateResource() method.
 * @param   uri                    [IN] uri
 * @param   lightResource          [IN] info of resource
 * @return ::OC_STACK_OK on success, some other value upon failure.
 */
int createLightResource (const char *uri, LightResource *lightResource)
{
    if (!uri)
    {
        OIC_LOG(ERROR, TAG, "Resource URI cannot be NULL");

    }

    lightResource->brightness = 0;
    OCStackResult res = OCCreateResource(&(lightResource->handle),
                                         "core.light",
                                         OC_RSRVD_INTERFACE_DEFAULT,
                                         uri,
                                         OCEntityHandlerCb,
                                         NULL,
                                         OC_DISCOVERABLE|OC_OBSERVABLE | OC_SECURE);

    OIC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res));
    return 0;
}
Ejemplo n.º 21
0
int createLEDResource (char *uri, LEDResource *ledResource, bool resourceState, int resourcePower)
{
    if (!uri)
    {
        OC_LOG(ERROR, TAG, "Resource URI cannot be NULL");
        return -1;
    }

    ledResource->state = resourceState;
    ledResource->power= resourcePower;
    OCStackResult res = OCCreateResource(&(ledResource->handle),
            "core.led",
            "oc.mi.def",
            uri,
            OCEntityHandlerCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created LED resource with result: %s", getResult(res));

    return 0;
}
Ejemplo n.º 22
0
int createLightResource (char *uri, LightResource *lightResource)
{
    if (!uri)
    {
        OC_LOG(ERROR, TAG, "Resource URI cannot be NULL");
        return -1;
    }

    lightResource->state = false;
    lightResource->power= 0;
    OCStackResult res = OCCreateResource(&(lightResource->handle),
            "core.light",
            "oc.mi.def",
            uri,
            OCEntityHandlerCb,
            OC_DISCOVERABLE|OC_OBSERVABLE);
    OC_LOG_V(INFO, TAG, "Created Light resource with result: %s", getResult(res));

    return 0;
}
Ejemplo n.º 23
0
OCStackResult CreateKeepAliveResource()
{
    OIC_LOG(DEBUG, TAG, "InitKeepAliveResource IN");

    // Create a KeepAlive resource
    OCStackResult result = OCCreateResource(&g_keepAliveHandle,
                                            KEEPALIVE_RESOURCE_TYPE_NAME,
                                            KEEPALIVE_RESOURCE_INTF_NAME,
                                            KEEPALIVE_RESOURCE_URI,
                                            NULL,
                                            NULL,
                                            OC_DISCOVERABLE);

    if (OC_STACK_OK != result)
    {
        OIC_LOG_V(ERROR, TAG, "Create resource for KeepAlive failed[%d]", result);
    }

    OIC_LOG(DEBUG, TAG, "InitKeepAliveResource OUT");
    return result;
}
Ejemplo n.º 24
0
void createFanResource()
{
    OCStackResult ret = OCCreateResource(&Fan.handle,
            "com.intel",
            "oc.mi.def",
            "/a/fan",
            OCEntityHandlerCb,
            OC_DISCOVERABLE | OC_OBSERVABLE);

    if (ret != OC_STACK_OK)
    {
        OC_LOG(ERROR, TAG, "Created Fan resource error");
	return;
    }

    Serial.println("Fan resource created");
    ret = registerFanResource();

    if (ret != OC_STACK_OK)
    {
    	Serial.println("Register Fan resource created");
    }
}
/*
 * Class:     org_iochibity_ServiceManager
 * Method:    registerServiceProvider
 * Signature: (Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Lorg/iochibity/IResourceServiceProvider;B)Lorg/iochibity/ResourceLocal;
 */
JNIEXPORT jobject JNICALL Java_org_iochibity_ServiceManager_registerServiceProvider__Ljava_lang_String_2_3Ljava_lang_String_2_3Ljava_lang_String_2Lorg_iochibity_IServiceProvider_2B
(JNIEnv * env, jclass klass,
 jstring j_uri,
 jobjectArray j_tnames,
 jobjectArray j_ifnames,
 jobject j_ServiceProvider,
   /* jobject j_callback_param, */
   jbyte   j_policies)
{
    OC_UNUSED(klass);
    printf("Java_org_iochibity_ServiceManager_registerServiceProvider ENTRY\n");

    jobject j_resource_type_name = (*env)->GetObjectArrayElement(env, j_tnames, 0);
    const char *c_resource_type_name = "";
    if (j_resource_type_name == NULL) {
	j_resource_type_name = (*env)->NewStringUTF(env, c_resource_type_name);
	c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL);
    } else {
	c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL);
	if (c_resource_type_name == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	    return NULL;
	}
    }
    jobject j_resource_if_name = (*env)->GetObjectArrayElement(env, j_ifnames, 0);
    const char *c_resource_if_name = "";
    if (j_resource_if_name == NULL) {
	j_resource_if_name = (*env)->NewStringUTF(env, c_resource_if_name);
	c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL);
    } else {
	c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL);
	if (c_resource_if_name == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	    return NULL;
	}
    }

    const char *c_uri = "";
    if (j_uri == NULL) {
	j_uri = (*env)->NewStringUTF(env, c_uri);
	c_uri = (char*) (*env)->GetStringUTFChars(env, j_uri, NULL);
    } else {
	c_uri = (char*) (*env)->GetStringUTFChars(env, j_uri, NULL);
	if (c_uri == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	}
    }

    /* prep callback */
    /* (*env)->GetJavaVM(env, &g_jvm); */
    /* bool returnValue = true; */

    jobject x_ServiceProvider = NULL;
    /* jobject x_callback_param = NULL; */
    if (j_ServiceProvider == NULL) {
	THROW_STACK_EXCEPTION(OC_STACK_INVALID_PARAM, "ResourceServiceProvider must not be null");
	return NULL;
    }
    // convert local to global references to be passed
    x_ServiceProvider = (*env)->NewGlobalRef(env, j_ServiceProvider);
    jclass k_rsp = (*env)->GetObjectClass(env, x_ServiceProvider);
    if (k_rsp == NULL) {
	THROW_JNI_EXCEPTION("GetObjectClass for ResourceServiceProvider impl");
    }

    OCResourceHandle c_resource_handle;
    OCStackResult op_result;
    op_result = OCCreateResource( &c_resource_handle,    /* **Resource */
				  c_resource_type_name,  /* const char *resourceTypeName, */
				  c_resource_if_name,    /* const char *resourceInterfaceName, */
				  c_uri,                 /* const char *uri, */
				  c_ServiceProvider_react,
				  /* x_callback_param, */
				  x_ServiceProvider,
				  (uint8_t) j_policies);  /* uint8_t resourceProperties */

    if (op_result != OC_STACK_OK) THROW_STACK_EXCEPTION(op_result, "OCCreateResource failed");

    /* we already have j_ServiceProvider, the ServiceProvider object;
       now we just need to link it to the resource created by
       OCCreateResource and populate it */

    /* jmethodID mid_resource_ctor = (*env)->GetMethodID(env, K_RESOURCE_LOCAL, "<init>", "()V"); */
    /* if (mid_resource_ctor == NULL) { */
    /* 	THROW_JNI_EXCEPTION("GetMethodID failed for ResourceLocal ctor\n"); */
    /* 	return NULL; */
    /* }    /\* insert handle to OCResource *\/ */
    /* if (K_RESOURCE_LOCAL != NULL) { /\* cannot be null in this case *\/ */
    /*     jfieldID fid_handle = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "handle", "J"); */
    /*     if (fid_handle != NULL) { */
	    (*env)->SetLongField(env, j_ServiceProvider,
				 FID_SP_HANDLE, (intptr_t) (OCResource*)c_resource_handle);
	/* } */
        /* jfieldID urifield = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "uri", "Ljava/lang/String;"); */
        /* if (urifield != NULL) { */
            jstring jString = (*env)->NewStringUTF(env, ((OCResource*)c_resource_handle)->uri);
            if (jString != NULL) {
                (*env)->SetObjectField(env, j_ServiceProvider,
				       FID_SP_URI_PATH, jString);
            }
	/* } */

        /* jfieldID fid_policies = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "policies", "I"); */
        /* if (fid_policies != NULL) { */
	    (*env)->SetIntField(env, j_ServiceProvider,
				FID_SP_POLICIES,
				(jint)((OCResource*)c_resource_handle)->resourceProperties);
	/* } else { */
	/*     THROW_JNI_EXCEPTION("SetIntField failed for fid_policies\n"); */
	/* } */

	    /* FIXME: deal with OCResource.sequenceNumber */

	/* instance id ∪nion */
	/* printf("instance ORD:  %d\n", ((OCResource*)c_resource_handle)->ins); */
	/* printf("instance str:  '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); */
	/* printf("instance uuid ln: %d\n", ((OCResource*)c_resource_handle)->uniqueUUID.id_length); */
	/* printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); */

	    /* FIXME: deal with OCResource instance Id union */
	if ( ((OCResource*)c_resource_handle)->ins > 0) {
	    printf("instance ORD:  %d\n", ((OCResource*)c_resource_handle)->ins);
	} else if ( ((OCResource*)c_resource_handle)->uniqueStr != NULL) {
	    printf("instance str:  '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr);
	} else if ( ((OCResource*)c_resource_handle)->uniqueUUID.id_length > 0) {
	    printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id);
	} else {
	    /* printf("NO INSTANCE ID\n"); */
	}
    /* } */

    /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_type_name, c_resource_type_name); */
    /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_if_name, c_resource_if_name); */
    (*env)->ReleaseStringUTFChars(env, j_uri, c_uri);

    printf("org_iochibity_ServiceManager/registerServiceProvider EXIT\n");
    return j_ServiceProvider;
}
Ejemplo n.º 26
0
void createDemoResource()
{
	sensor.temp = 0;
	sensor.light = 0;
	sensor.sound = 0;

	led.status = 0;

	buzzer.tone = 0;

	button.observer = 0;
	button.button = 0;
	button.touch = 0;
	button.button_old = 0;
	button.touch_old = 0;

	OCStackResult res = OCCreateResource(&sensor.handle,
		"grove.sensor",
		OC_RSRVD_INTERFACE_DEFAULT,
		"/grove/sensor",
		SensorOCEntityHandlerCb,
		NULL,
		OC_DISCOVERABLE|OC_OBSERVABLE);
	OC_LOG_V(INFO, TAG, "Created sensor resource with result: %s", getResult(res));

	res = OCCreateResource(&led.handle,
		"grove.led",
		OC_RSRVD_INTERFACE_DEFAULT,
		"/grove/led",
		LedOCEntityHandlerCb,
		NULL,
		OC_DISCOVERABLE|OC_OBSERVABLE);
	OC_LOG_V(INFO, TAG, "Created LED resource with result: %s", getResult(res));

	res = OCCreateResource(&lcd.handle,
		"grove.lcd",
		OC_RSRVD_INTERFACE_DEFAULT,
		"/grove/lcd",
		LcdOCEntityHandlerCb,
		NULL,
		OC_DISCOVERABLE|OC_OBSERVABLE);
	OC_LOG_V(INFO, TAG, "Created LCD resource with result: %s", getResult(res));

	res = OCCreateResource(&buzzer.handle,
		"grove.buzzer",
		OC_RSRVD_INTERFACE_DEFAULT,
		"/grove/buzzer",
		BuzzerOCEntityHandlerCb,
		NULL,
		OC_DISCOVERABLE|OC_OBSERVABLE);
	OC_LOG_V(INFO, TAG, "Created buzzer resource with result: %s", getResult(res));

	res = OCCreateResource(&button.handle,
		"grove.button",
		OC_RSRVD_INTERFACE_DEFAULT,
		"/grove/button",
		ButtonOCEntityHandlerCb,
		NULL,
		OC_DISCOVERABLE|OC_OBSERVABLE);
	OC_LOG_V(INFO, TAG, "Created button resource with result: %s", getResult(res));
}
void *presenceNotificationGenerator(void *param)
{
    uint8_t secondsBeforePresence = 10;
    OIC_LOG_V(INFO, TAG, "Will send out presence in %u seconds", secondsBeforePresence);
    sleep(secondsBeforePresence);
    (void)param;
    OCDoHandle presenceNotificationHandles[numPresenceResources];
    OCStackResult res = OC_STACK_OK;

    std::array<std::string, numPresenceResources> presenceNotificationResources { {
        std::string("core.fan"),
        std::string("core.led") } };
    std::array<std::string, numPresenceResources> presenceNotificationUris { {
        std::string("/a/fan"),
        std::string("/a/led") } };

    for(int i=0; i<numPresenceResources; i++)
    {
        if(res == OC_STACK_OK)
        {
            sleep(1);
            res = OCCreateResource(&presenceNotificationHandles[i],
                    presenceNotificationResources.at(i).c_str(),
                    OC_RSRVD_INTERFACE_DEFAULT,
                    presenceNotificationUris.at(i).c_str(),
                    OCNOPEntityHandlerCb,
                    NULL,
                    OC_DISCOVERABLE|OC_OBSERVABLE);
        }
        if(res != OC_STACK_OK)
        {
            OIC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to create resource "
                    "%s with result %s.", presenceNotificationResources.at(i).c_str(),
                    getResult(res));
            break;
        }
        OIC_LOG_V(INFO, TAG, PCF("Created %s for presence notification"),
                                presenceNotificationUris[i].c_str());
    }
    sleep(5);
    for(int i=0; i<numPresenceResources; i++)
    {
        if(res == OC_STACK_OK)
        {
            res = OCDeleteResource(presenceNotificationHandles[i]);
        }
        if(res != OC_STACK_OK)
        {
            OIC_LOG_V(ERROR, TAG, "\"Presence Notification Generator\" failed to delete "\
                    "resource %s.", presenceNotificationResources.at(i).c_str());
            break;
        }
        OIC_LOG_V(INFO, TAG, PCF("Deleted %s for presence notification"),
                                presenceNotificationUris[i].c_str());
    }

    OIC_LOG(INFO, TAG, "================ stopping presence");
    OCStopPresence();

    return NULL;
}
Ejemplo n.º 28
0
NSResult NSCreateResource(char *uri)
{
    NS_LOG(DEBUG, "NSCreateResource - IN");
    if (!uri)
    {
        NS_LOG(NS_ERROR, "Resource URI cannot be NULL");
        return NS_ERROR;
    }

    if (strcmp(uri, NS_ROOT_URI) == 0)
    {
        NotificationResource.accepter = 0;
        NotificationResource.message_uri = NS_COLLECTION_MESSAGE_URI;
        NotificationResource.sync_uri = NS_COLLECTION_SYNC_URI;
        NotificationResource.handle = NULL;

        if (OCCreateResource(&NotificationResource.handle, NS_ROOT_TYPE, NS_DEFAULT_INTERFACE,
                NS_ROOT_URI, NSEntityHandlerNotificationCb, NULL, OC_DISCOVERABLE) != OC_STACK_OK)
        {
            NS_LOG(NS_ERROR, "Fail to Create Notification Resource");
            return NS_ERROR;
        }
    }
    else if (strcmp(uri, NS_COLLECTION_MESSAGE_URI) == 0)
    {

        NotificationMessageResource.messageId = 0;

        (NotificationMessageResource.providerId)[0] = '\0';
        NotificationMessageResource.type = 0;
        NotificationMessageResource.dateTime = NULL;
        NotificationMessageResource.ttl = 0;
        NotificationMessageResource.title = NULL;
        NotificationMessageResource.contentText = NULL;
        NotificationMessageResource.sourceName = NULL;
        NotificationMessageResource.mediaContents = NULL;

        if (OCCreateResource(&NotificationMessageResource.handle, NS_COLLECTION_MESSAGE_TYPE,
                NS_DEFAULT_INTERFACE, NS_COLLECTION_MESSAGE_URI, NSEntityHandlerMessageCb, NULL,
                OC_OBSERVABLE) != OC_STACK_OK)
        {
            NS_LOG(NS_ERROR, "Fail to Create Notification Message Resource");
            return NS_ERROR;
        }
    }
    else if (strcmp(uri, NS_COLLECTION_SYNC_URI) == 0)
    {
        NotificationSyncResource.id = NULL;
        NotificationSyncResource.state = NULL;
        NotificationSyncResource.handle = NULL;

        if (OCCreateResource(&(NotificationSyncResource.handle), NS_COLLECTION_SYNC_TYPE,
                NS_DEFAULT_INTERFACE, NS_COLLECTION_SYNC_URI, NSEntityHandlerSyncCb, NULL,
                OC_OBSERVABLE) != OC_STACK_OK)
        {
            NS_LOG(NS_ERROR, "Fail to Create Notification Sync Resource");
            return NS_ERROR;
        }
    }
    else
    {
        NS_LOG(ERROR, "Fail to create resource with invalid URI");
        return NS_ERROR;
    }

    NS_LOG(DEBUG, "NSCreateResource - OUT");
    return NS_OK;
}
Ejemplo n.º 29
0
/**
  * @brief Initializes and creates a resource
  *
  * @param uri          Path and name of the resource
  * @param interface    Resource interfaces
  * @param type         Resource types
  * @param properties   Byte of allowed properties of the resources
  * @param OCIOhandler Callback called when a PUT request is received
  *
  * @return Pointer to the created resource
  */
OCBaseResourceT * createResource(char* uri, OCResourceType* type, OCResourceInterface* interface,
                         uint8_t properties, OCIOHandler OCIOhandler)
{
    // Create the resource
    OIC_LOG_V(DEBUG, TAG, "Creating resource with uri: %s\n", uri);

    OCBaseResourceT *resource = (OCBaseResourceT*)malloc(sizeof(OCBaseResourceT));
    if(resource == NULL) {printNoMemoryMsg(); return NULL;}

    resource->uri = uri;

    resource->type = (OCResourceType*)malloc(sizeof(OCResourceType));
    if(resource->type == NULL) {printNoMemoryMsg(); return NULL;}
    memcpy(resource->type, type, sizeof(OCResourceType));

    resource->interface = (OCResourceInterface*)malloc(sizeof(OCResourceInterface));
    if(resource->interface == NULL) {printNoMemoryMsg(); return NULL;}
    memcpy(resource->interface, interface, sizeof(OCResourceInterface));

    resource->resourceProperties = properties;

    resource->OCIOhandler = OCIOhandler;

    resource->underObservation = false;

    resource->attribute = NULL;
    resource->next = NULL;
    OCStackResult res = OCCreateResource(&resource->handle,
            resource->type->resourcetypename,
            resource->interface->name,
            resource->uri,
            OCEntityHandlerCb,
            resource,
            resource->resourceProperties);
    OIC_LOG_V(DEBUG, TAG, "Created resource with OCStackResult: %s", res);

    // Add types
    OCResourceType *currentType = resource->type->next;
    while(currentType != NULL)
    {
        OIC_LOG_V(DEBUG, TAG, "Adding type in createResource: %s", currentType->resourcetypename);
        if(OCBindResourceTypeToResource(resource->handle, currentType->resourcetypename) != OC_STACK_OK)
        {
            OIC_LOG_V(ERROR, TAG, "Unable to bind type to resource: %s", currentType->resourcetypename);
        }
        currentType = currentType->next;
    }


    // Add interfaces
    OCResourceInterface *currentInterface = resource->interface->next;
    while(currentInterface != NULL)
    {
        OIC_LOG_V(DEBUG, TAG, "Adding interface in createResource: %s", currentInterface->name);
        if(OCBindResourceInterfaceToResource(resource->handle, currentInterface->name) != OC_STACK_OK)
        {
            OIC_LOG_V(ERROR, TAG, "Unable to bind interface to resource: %s", currentInterface->name);
        }
        currentInterface = currentInterface->next;
    }

    // Add the resource to the list of available resources
    pushResorcetoList(&resource);

    return resource;
}
/*
 * Class:     org_iochibity_ServiceManager
 * Method:    registerServiceProvider
 * Signature: (Lorg/iochibity/ServiceProvider;)Lorg/iochibity/ServiceProvider;
 */
JNIEXPORT jobject JNICALL Java_org_iochibity_ServiceManager_registerServiceProvider__Lorg_iochibity_ServiceProvider_2
(JNIEnv * env, jclass klass, jobject j_ServiceProvider)
{
    OC_UNUSED(klass);
    printf("Java_org_iochibity_ServiceManager_registerServiceProvider__Lorg_iochibity_ServiceProvider_2, ENTRY\n");

    jobject j_Types = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_TYPES);
    const char *c_resource_type_name = "";
    jobject j_resource_type_name = (*env)->CallObjectMethod(env, j_Types, MID_LL_GET, 0);
    if (j_resource_type_name == NULL) {
	j_resource_type_name = (*env)->NewStringUTF(env, c_resource_type_name);
	c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL);
    } else {
	c_resource_type_name = (char*) (*env)->GetStringUTFChars(env, j_resource_type_name, NULL);
	if (c_resource_type_name == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	    return NULL;
	}
    }
    jobject j_Interfaces = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_INTERFACES);
    jobject j_resource_if_name = (*env)->CallObjectMethod(env, j_Interfaces, MID_LL_GET, 0);
    const char *c_resource_if_name = "";
    if (j_resource_if_name == NULL) {
	j_resource_if_name = (*env)->NewStringUTF(env, c_resource_if_name);
	c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL);
    } else {
	c_resource_if_name = (char*) (*env)->GetStringUTFChars(env, j_resource_if_name, NULL);
	if (c_resource_if_name == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	    return NULL;
	}
    }
    jobject j_Uri = (*env)->GetObjectField(env, j_ServiceProvider, FID_SP_URI_PATH);
    const char *c_uri = "";
    if (j_Uri == NULL) {
	j_Uri = (*env)->NewStringUTF(env, c_uri);
	c_uri = (char*) (*env)->GetStringUTFChars(env, j_Uri, NULL);
    } else {
	c_uri = (char*) (*env)->GetStringUTFChars(env, j_Uri, NULL);
	if (c_uri == NULL) {
	    THROW_JNI_EXCEPTION("GetStringUTFChars");
	}
    }

    int c_policies = (*env)->GetIntField(env, j_ServiceProvider, FID_SP_POLICIES);

    /* prep callback */
    /* (*env)->GetJavaVM(env, &g_jvm); */
    /* bool returnValue = true; */

    jobject x_ServiceProvider = NULL;
    if (j_ServiceProvider == NULL) {
	THROW_STACK_EXCEPTION(OC_STACK_INVALID_PARAM, "ResourceServiceProvider must not be null");
	return NULL;
    }
    // convert local to global references to be passed
    x_ServiceProvider = (*env)->NewGlobalRef(env, j_ServiceProvider);
    jclass k_rsp = (*env)->GetObjectClass(env, x_ServiceProvider);
    if (k_rsp == NULL) {
	THROW_JNI_EXCEPTION("GetObjectClass for ResourceServiceProvider impl");
    }

    OCResourceHandle c_resource_handle;
    OCStackResult op_result;
    op_result = OCCreateResource( &c_resource_handle,    /* **Resource */
				  c_resource_type_name,  /* const char *resourceTypeName, */
				  c_resource_if_name,    /* const char *resourceInterfaceName, */
				  c_uri,                 /* const char *uri, */
				  c_ServiceProvider_react,
				  x_ServiceProvider,
				  (uint8_t) c_policies);  /* uint8_t resourceProperties */

    if (op_result != OC_STACK_OK) THROW_STACK_EXCEPTION(op_result, "OCCreateResource failed");


    (*env)->SetLongField(env, j_ServiceProvider,
			 FID_SP_HANDLE, (intptr_t) (OCResource*)c_resource_handle);



        /* jfieldID urifield = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "uri", "Ljava/lang/String;"); */
        /* if (urifield != NULL) { */
            jstring jString = (*env)->NewStringUTF(env, ((OCResource*)c_resource_handle)->uri);
            if (jString != NULL) {
                (*env)->SetObjectField(env, j_ServiceProvider,
				       FID_SP_URI_PATH, jString);
            }
	/* } */

        /* jfieldID fid_policies = (*env)->GetFieldID(env, K_RESOURCE_LOCAL, "policies", "I"); */
        /* if (fid_policies != NULL) { */
	    (*env)->SetIntField(env, j_ServiceProvider,
				FID_SP_POLICIES,
				(jint)((OCResource*)c_resource_handle)->resourceProperties);
	/* } else { */
	/*     THROW_JNI_EXCEPTION("SetIntField failed for fid_policies\n"); */
	/* } */

	    /* FIXME: deal with OCResource.sequenceNumber */

	/* instance id ∪nion */
	/* printf("instance ORD:  %d\n", ((OCResource*)c_resource_handle)->ins); */
	/* printf("instance str:  '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr); */
	/* printf("instance uuid ln: %d\n", ((OCResource*)c_resource_handle)->uniqueUUID.id_length); */
	/* printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id); */

	    /* FIXME: deal with OCResource instance Id union */
	if ( ((OCResource*)c_resource_handle)->ins > 0) {
	    printf("instance ORD:  %d\n", ((OCResource*)c_resource_handle)->ins);
	} else if ( ((OCResource*)c_resource_handle)->uniqueStr != NULL) {
	    printf("instance str:  '%s'\n", ((OCResource*)c_resource_handle)->uniqueStr);
	} else if ( ((OCResource*)c_resource_handle)->uniqueUUID.id_length > 0) {
	    printf("instance uuid: %s\n", ((OCResource*)c_resource_handle)->uniqueUUID.id);
	} else {
	    /* printf("NO INSTANCE ID\n"); */
	}
    /* } */

    /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_type_name, c_resource_type_name); */
    /* (*env)->ReleaseStringUTFChars(env, j_ServiceProvider_if_name, c_resource_if_name); */
    (*env)->ReleaseStringUTFChars(env, j_Uri, c_uri);

    printf("org_iochibity_ServiceManager/registerServiceProvider EXIT\n");
    return j_ServiceProvider;
}