static JSBool SMJS_FUNCTION(widget_message_handler_factory) { char *msg_name; u32 i, count; SMJS_OBJ SMJS_ARGS GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj); if (!bifce) return JS_FALSE; if (!argc) return JS_FALSE; if (!JSVAL_IS_STRING(argv[0])) return JS_FALSE; msg_name = SMJS_CHARS(c, argv[0]); if (!msg_name ) return JS_FALSE; SMJS_SET_RVAL( JSVAL_NULL ); count = gf_list_count(bifce->ifce->messages); for (i=0; i<count; i++) { GF_WidgetMessage *msg = gf_list_get(bifce->ifce->messages, i); if (!strcmp(msg->name, msg_name)) { JSObject *an_obj = JS_NewObject(c, &bifce->wid->widget->wm->widgetAnyClass._class, 0, 0); SMJS_SET_PRIVATE(c, an_obj, msg); JS_DefineProperty(c, an_obj, "msgName", STRING_TO_JSVAL( JS_NewStringCopyZ(c, msg->name) ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); JS_DefineProperty(c, an_obj, "interfaceHandler", OBJECT_TO_JSVAL( obj ), 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); JS_DefineFunction(c, an_obj, "onInvokeReply", widget_call_message_reply_callback, 1, 0); if ((argc==2) && JSVAL_IS_OBJECT(argv[1]) && !JSVAL_IS_NULL(argv[1])) JS_DefineProperty(c, an_obj, "replyCallback", argv[1], 0, 0, JSPROP_READONLY | JSPROP_PERMANENT); SMJS_SET_RVAL( OBJECT_TO_JSVAL(an_obj) ); } } SMJS_FREE(c, msg_name); return JS_TRUE; }
static JSBool SMJS_FUNCTION(widget_get_interfaces) { u32 i, count; char *ifce_name; JSObject *list; jsuint idx; jsval v; SMJS_OBJ SMJS_ARGS GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj); if (!wid) return JS_FALSE; if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE; ifce_name = SMJS_CHARS(c, argv[0]); list = JS_NewArrayObject(c, 0, 0); count = gf_list_count(wid->bound_ifces); for (i=0; i<count; i++) { GF_WidgetInterfaceInstance *ifce = gf_list_get(wid->bound_ifces, i); if (strcmp(ifce->ifce->type, ifce_name)) continue; widget_interface_js_bind(c, ifce); JS_GetArrayLength(c, list, &idx); v = OBJECT_TO_JSVAL(ifce->obj); JS_SetElement(c, list, idx, &v); } SMJS_SET_RVAL( OBJECT_TO_JSVAL(list) ); SMJS_FREE(c, ifce_name); return JS_TRUE; }
static JSBool SMJS_FUNCTION(widget_invoke_message) { jsval oval; GF_WidgetMessage *msg = NULL; SMJS_OBJ SMJS_ARGS GF_WidgetInterfaceInstance *bifce = (GF_WidgetInterfaceInstance *)SMJS_GET_PRIVATE(c, obj); if (!bifce) return JS_FALSE; SMJS_SET_RVAL( JSVAL_NULL ); if (!JSVAL_IS_OBJECT(argv[0])) return JS_FALSE; if (JSVAL_IS_NULL(argv[0])) return JS_FALSE; msg = (GF_WidgetMessage *)SMJS_GET_PRIVATE(c, JSVAL_TO_OBJECT(argv[0]) ); if (!msg) return JS_FALSE; /*look for JS Callback "invoke" in the widget manager script*/ if (JS_LookupProperty(c, bifce->ifce->obj, "invoke", &oval)==JS_TRUE) { if (JSVAL_IS_OBJECT(oval)) { JS_CallFunctionValue(bifce->wid->widget->wm->ctx, bifce->ifce->obj, oval, argc, argv, SMJS_GET_RVAL ); } } return JS_TRUE; }
JSBool SMJS_FUNCTION(widget_has_feature) { char *feat_name; SMJS_OBJ SMJS_ARGS GF_WidgetInstance *wid = (GF_WidgetInstance *)SMJS_GET_PRIVATE(c, obj); if (!wid) return JS_FALSE; if (!argc || !JSVAL_IS_STRING(argv[0])) return JS_TRUE; feat_name = SMJS_CHARS(c, argv[0]); SMJS_SET_RVAL( BOOLEAN_TO_JSVAL( JS_FALSE ) ); if (!strcmp(feat_name, "urn:mpeg:systems:mpeg-u:2009")) SMJS_SET_RVAL( BOOLEAN_TO_JSVAL( JS_TRUE )); SMJS_FREE(c, feat_name); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_error_code) { NPT_String res; SMJS_OBJ PLT_Action *action = (PLT_Action *) SMJS_GET_PRIVATE(c, obj); if (!action ) return JS_FALSE; SMJS_SET_RVAL( INT_TO_JSVAL( action->GetErrorCode() )); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_error) { NPT_String res; unsigned int code; SMJS_OBJ PLT_Action *action = (PLT_Action *) SMJS_GET_PRIVATE(c, obj); if (!action ) return JS_FALSE; SMJS_SET_RVAL( STRING_TO_JSVAL( JS_NewStringCopyZ(c, action->GetError( &code ) ) ) ); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_error_code) { NPT_String res; char *arg_name = NULL; SMJS_OBJ PLT_Action *action = (PLT_Action *) JS_GetPrivate(c, obj); if (!action ) return JS_FALSE; SMJS_SET_RVAL( INT_TO_JSVAL( action->GetErrorCode() )); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_error) { NPT_String res; unsigned int code; char *arg_name = NULL; SMJS_OBJ PLT_Action *action = (PLT_Action *) JS_GetPrivate(c, obj); if (!action ) return JS_FALSE; SMJS_SET_RVAL( STRING_TO_JSVAL( JS_NewStringCopyZ(c, action->GetError( code ) ) ) ); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_service_get_scpd) { NPT_String name; SMJS_OBJ GPAC_ServiceItem *service = (GPAC_ServiceItem *)SMJS_GET_PRIVATE(c, obj); if (!service ) return JS_FALSE; service->m_service->GetSCPDXML(name); SMJS_SET_RVAL( STRING_TO_JSVAL( JS_NewStringCopyZ(c, name) ) ); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_service_has_var) { char *name = NULL; SMJS_OBJ SMJS_ARGS GPAC_ServiceItem *service = (GPAC_ServiceItem *)SMJS_GET_PRIVATE(c, obj); if (!service || !argc || !JSVAL_IS_STRING(argv[0]) ) return JS_FALSE; name = SMJS_CHARS(c, argv[0]); SMJS_SET_RVAL( BOOLEAN_TO_JSVAL( (service->m_service->FindStateVariable(name)==NULL) ? JS_FALSE : JS_TRUE ) ); SMJS_FREE(c, name); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_service_has_action) { PLT_ActionDesc *action; char *name = NULL; SMJS_OBJ SMJS_ARGS GPAC_ServiceItem *service = (GPAC_ServiceItem *)SMJS_GET_PRIVATE(c, obj); if (!service || !argc || !JSVAL_IS_STRING(argv[0]) ) return JS_FALSE; name = SMJS_CHARS(c, argv[0]); action = service->m_service->FindActionDesc(name); SMJS_FREE(c, name); SMJS_SET_RVAL( BOOLEAN_TO_JSVAL(action ? JS_TRUE : JS_FALSE) ); if (!action) return JS_TRUE; if ((argc==2) && JSVAL_IS_STRING(argv[1])) { name = SMJS_CHARS(c, argv[1]); if (action->GetArgumentDesc(name) == NULL) SMJS_SET_RVAL( BOOLEAN_TO_JSVAL(JS_FALSE) ); SMJS_FREE(c, name); } return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_argument) { char *act_name; SMJS_OBJ SMJS_ARGS GPAC_GenericDevice *device = (GPAC_GenericDevice *)SMJS_GET_PRIVATE(c, obj); if (!device || !argc || !JSVAL_IS_STRING(argv[0]) ) return JS_FALSE; act_name = SMJS_CHARS(c, argv[0]); NPT_String value; if (device->act_ref->GetArgumentValue(act_name, value) != NPT_SUCCESS) return JS_FALSE; SMJS_SET_RVAL( STRING_TO_JSVAL( JS_NewStringCopyZ(c, value) )); SMJS_FREE(c, act_name); return JS_TRUE; }
static JSBool SMJS_FUNCTION(upnp_action_get_argument_value) { NPT_String res; char *arg_name = NULL; SMJS_OBJ SMJS_ARGS PLT_Action *action = (PLT_Action *) SMJS_GET_PRIVATE(c, obj); if (!action || !argc || !JSVAL_IS_STRING(argv[0])) return JS_FALSE; arg_name = SMJS_CHARS(c, argv[0]); if (!arg_name) return JS_FALSE; action->GetArgumentValue(arg_name, res); SMJS_SET_RVAL( STRING_TO_JSVAL( JS_NewStringCopyZ(c, res) )); SMJS_FREE(c, arg_name); return JS_TRUE; }