コード例 #1
0
ファイル: GenericDevice.cpp プロジェクト: ARSekkat/gpac
GPAC_ServiceItem *GPAC_DeviceItem::FindService(const char *type)
{
	u32 i, count;
	GPAC_ServiceItem *serv;

	count = gf_list_count(m_Services);
	for (i=0; i<count; i++) {
		serv = (GPAC_ServiceItem*)gf_list_get(m_Services, i);
		if (serv->m_service->GetServiceType() == type)
			return serv;
	}

	PLT_Service *service;
	if (m_device->FindServiceByType(type, service) != NPT_SUCCESS) return NULL;

	serv = new GPAC_ServiceItem(this, service);

#ifdef GPAC_HAS_SPIDERMONKEY
	serv->js_ctx = js_ctx;
	serv->obj = JS_NewObject(serv->js_ctx, &m_pUPnP->upnpServiceClass._class, 0, obj);
	gf_js_add_root(serv->js_ctx, &serv->obj, GF_JSGC_OBJECT);
	SMJS_SET_PRIVATE(serv->js_ctx, serv->obj, serv);
	JS_DefineProperty(serv->js_ctx, serv->obj, "Name", STRING_TO_JSVAL( JS_NewStringCopyZ(serv->js_ctx, service->GetServiceID()) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
	JS_DefineProperty(serv->js_ctx, serv->obj, "Type", STRING_TO_JSVAL( JS_NewStringCopyZ(serv->js_ctx, service->GetServiceType()) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
	JS_DefineProperty(serv->js_ctx, serv->obj, "Hostname", STRING_TO_JSVAL( JS_NewStringCopyZ(serv->js_ctx, m_device->GetURLBase().GetHost() ) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT);
	JS_DefineFunction(serv->js_ctx, serv->obj, "SetStateVariableListener", upnp_service_set_listener, 1, 0);
	JS_DefineFunction(serv->js_ctx, serv->obj, "HasStateVariable", upnp_service_has_var, 1, 0);
	JS_DefineFunction(serv->js_ctx, serv->obj, "HasAction", upnp_service_has_action, 2, 0);
	JS_DefineFunction(serv->js_ctx, serv->obj, "CallAction", upnp_service_call_action, 2, 0);
	JS_DefineFunction(serv->js_ctx, serv->obj, "SetActionListener", upnp_service_set_action_listener, 2, 0);
	JS_DefineFunction(serv->js_ctx, serv->obj, "GetSCPD", upnp_service_get_scpd, 1, 0);

#endif

	gf_list_add(m_Services, serv);
	return serv;
}