diff options
Diffstat (limited to 'libdleyna')
-rw-r--r-- | libdleyna/renderer/manager.c | 259 | ||||
-rw-r--r-- | libdleyna/renderer/manager.h | 16 | ||||
-rw-r--r-- | libdleyna/renderer/server.c | 95 | ||||
-rw-r--r-- | libdleyna/renderer/task.c | 94 | ||||
-rw-r--r-- | libdleyna/renderer/task.h | 30 |
5 files changed, 244 insertions, 250 deletions
diff --git a/libdleyna/renderer/manager.c b/libdleyna/renderer/manager.c index c55c039..a99399c 100644 --- a/libdleyna/renderer/manager.c +++ b/libdleyna/renderer/manager.c @@ -36,60 +36,45 @@ struct dlr_manager_t_ { dleyna_connector_id_t connection; GUPnPContextManager *cm; + dleyna_white_list_t *wl; }; -static void prv_add_list_wl_entries(gpointer data, gpointer user_data) +static GVariant *prv_build_wl_entries(dleyna_settings_t *settings) { - GVariantBuilder *vb = (GVariantBuilder *)user_data; - gchar *entry = (gchar *)data; + GVariant *result; - g_variant_builder_add(vb, "s", entry); -} + result = dleyna_settings_white_list_entries(settings); -static void prv_add_all_props(GUPnPContextManager *manager, GVariantBuilder *vb) -{ - GUPnPWhiteList *wl; - GList *list; - GVariantBuilder vb2; + if (result == NULL) + result = g_variant_new("as", NULL); - wl = gupnp_context_manager_get_white_list(manager); - list = gupnp_white_list_get_entries(wl); + return result; +} +static void prv_add_all_props(dleyna_settings_t *settings, GVariantBuilder *vb) +{ g_variant_builder_add(vb, "{sv}", DLR_INTERFACE_PROP_WHITE_LIST_ENABLED, g_variant_new_boolean( - gupnp_white_list_get_enabled(wl))); - - g_variant_builder_init(&vb2, G_VARIANT_TYPE("as")); - g_list_foreach(list, prv_add_list_wl_entries, &vb2); + dleyna_settings_is_white_list_enabled( + settings))); g_variant_builder_add(vb, "{sv}", DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES, - g_variant_builder_end(&vb2)); + prv_build_wl_entries(settings)); } -static GVariant *prv_get_prop(GUPnPContextManager *manager, const gchar *prop) +static GVariant *prv_get_prop(dleyna_settings_t *settings, const gchar *prop) { GVariant *retval = NULL; - GUPnPWhiteList *wl; - GVariantBuilder vb; - GList *list; - gboolean b_value; #if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG gchar *prop_str; #endif - wl = gupnp_context_manager_get_white_list(manager); - - if (!strcmp(prop, DLR_INTERFACE_PROP_WHITE_LIST_ENABLED)) { - b_value = gupnp_white_list_get_enabled(wl); - retval = g_variant_ref_sink(g_variant_new_boolean(b_value)); - - } else if (!strcmp(prop, DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES)) { - list = gupnp_white_list_get_entries(wl); - - g_variant_builder_init(&vb, G_VARIANT_TYPE("as")); - g_list_foreach(list, prv_add_list_wl_entries, &vb); - retval = g_variant_ref_sink(g_variant_builder_end(&vb)); - } + if (!strcmp(prop, DLR_INTERFACE_PROP_WHITE_LIST_ENABLED)) + retval = g_variant_ref_sink(g_variant_new_boolean( + dleyna_settings_is_white_list_enabled( + settings))); + else if (!strcmp(prop, DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES)) + retval = g_variant_ref_sink(prv_build_wl_entries(settings)); #if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG if (retval) { @@ -102,14 +87,13 @@ static GVariant *prv_get_prop(GUPnPContextManager *manager, const gchar *prop) return retval; } -static void prv_wl_notify_prop(dlr_manager_t *manager, const gchar *prop_name) +static void prv_wl_notify_prop(dlr_manager_t *manager, + const gchar *prop_name, + GVariant *prop_val) { - GVariant *prop_val; GVariant *val; GVariantBuilder array; - prop_val = prv_get_prop(manager->cm, prop_name); - g_variant_builder_init(&array, G_VARIANT_TYPE("a{sv}")); g_variant_builder_add(&array, "{sv}", prop_name, prop_val); @@ -124,36 +108,19 @@ static void prv_wl_notify_prop(dlr_manager_t *manager, const gchar *prop_name) DLR_INTERFACE_PROPERTIES_CHANGED, val, NULL); - g_variant_unref(prop_val); -} - -static void prv_wl_notify_enabled_prop(gpointer user_data) -{ - prv_wl_notify_prop((dlr_manager_t *)user_data, - DLR_INTERFACE_PROP_WHITE_LIST_ENABLED); -} - -static void prv_wl_notify_entries_prop(gpointer user_data) -{ - prv_wl_notify_prop((dlr_manager_t *)user_data, - DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES); } dlr_manager_t *dlr_manager_new(dleyna_connector_id_t connection, GUPnPContextManager *connection_manager) { dlr_manager_t *manager = g_new0(dlr_manager_t, 1); - dleyna_white_list_t wl_info; + GUPnPWhiteList *gupnp_wl; + + gupnp_wl = gupnp_context_manager_get_white_list(connection_manager); manager->connection = connection; manager->cm = connection_manager; - - wl_info.wl = gupnp_context_manager_get_white_list(manager->cm); - wl_info.cb_enabled = prv_wl_notify_enabled_prop; - wl_info.cb_entries = prv_wl_notify_entries_prop; - wl_info.user_data = manager; - - dleyna_white_list_set_info(&wl_info); + manager->wl = dleyna_white_list_new(gupnp_wl); return manager; } @@ -161,56 +128,37 @@ dlr_manager_t *dlr_manager_new(dleyna_connector_id_t connection, void dlr_manager_delete(dlr_manager_t *manager) { if (manager != NULL) { - dleyna_white_list_set_info(NULL); + dleyna_white_list_delete(manager->wl); g_free(manager); } } -void dlr_manager_wl_enable(dlr_task_t *task) -{ - dleyna_white_list_enable(task->ut.white_list.enabled, TRUE); -} - -void dlr_manager_wl_add_entries(dlr_task_t *task) -{ - dleyna_white_list_add_entries(task->ut.white_list.entries, TRUE); -} - -void dlr_manager_wl_remove_entries(dlr_task_t *task) -{ - dleyna_white_list_remove_entries(task->ut.white_list.entries, TRUE); -} - -void dlr_manager_wl_clear(dlr_task_t *task) +dleyna_white_list_t *dlr_manager_get_white_list(dlr_manager_t *manager) { - dleyna_white_list_clear(TRUE); + return manager->wl; } void dlr_manager_get_all_props(dlr_manager_t *manager, + dleyna_settings_t *settings, dlr_task_t *task, dlr_manager_task_complete_t cb) { dlr_async_task_t *cb_data = (dlr_async_task_t *)task; dlr_task_get_props_t *task_data = &task->ut.get_props; + gchar *i_name = task_data->interface_name; GVariantBuilder vb; DLEYNA_LOG_DEBUG("Enter"); DLEYNA_LOG_DEBUG("Path: %s", task->path); - DLEYNA_LOG_DEBUG("Interface %s", task->ut.get_prop.interface_name); + DLEYNA_LOG_DEBUG("Interface %s", i_name); cb_data->cb = cb; g_variant_builder_init(&vb, G_VARIANT_TYPE("a{sv}")); - if (!strcmp(task_data->interface_name, - DLEYNA_SERVER_INTERFACE_MANAGER) || - !strcmp(task_data->interface_name, "")) { - cb_data->cancel_id = g_cancellable_connect( - cb_data->cancellable, - G_CALLBACK(dlr_async_task_cancelled), - cb_data, NULL); - - prv_add_all_props(manager->cm, &vb); + if (!strcmp(i_name, DLEYNA_SERVER_INTERFACE_MANAGER) || + !strcmp(i_name, "")) { + prv_add_all_props(settings, &vb); cb_data->task.result = g_variant_ref_sink( g_variant_builder_end(&vb)); @@ -223,35 +171,30 @@ void dlr_manager_get_all_props(dlr_manager_t *manager, } (void) g_idle_add(dlr_async_task_complete, cb_data); - g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id); DLEYNA_LOG_DEBUG("Exit"); } void dlr_manager_get_prop(dlr_manager_t *manager, + dleyna_settings_t *settings, dlr_task_t *task, dlr_manager_task_complete_t cb) { dlr_async_task_t *cb_data = (dlr_async_task_t *)task; dlr_task_get_prop_t *task_data = &task->ut.get_prop; + gchar *i_name = task_data->interface_name; + gchar *name = task_data->prop_name; DLEYNA_LOG_DEBUG("Enter"); DLEYNA_LOG_DEBUG("Path: %s", task->path); - DLEYNA_LOG_DEBUG("Interface %s", task->ut.get_prop.interface_name); - DLEYNA_LOG_DEBUG("Prop.%s", task->ut.get_prop.prop_name); + DLEYNA_LOG_DEBUG("Interface %s", i_name); + DLEYNA_LOG_DEBUG("Prop.%s", name); cb_data->cb = cb; - if (!strcmp(task_data->interface_name, - DLEYNA_SERVER_INTERFACE_MANAGER) || - !strcmp(task_data->interface_name, "")) { - cb_data->cancel_id = g_cancellable_connect( - cb_data->cancellable, - G_CALLBACK(dlr_async_task_cancelled), - cb_data, NULL); - - cb_data->task.result = prv_get_prop(manager->cm, - task_data->prop_name); + if (!strcmp(i_name, DLEYNA_SERVER_INTERFACE_MANAGER) || + !strcmp(i_name, "")) { + cb_data->task.result = prv_get_prop(settings, name); if (!cb_data->task.result) cb_data->error = g_error_new( @@ -267,7 +210,119 @@ void dlr_manager_get_prop(dlr_manager_t *manager, } (void) g_idle_add(dlr_async_task_complete, cb_data); - g_cancellable_disconnect(cb_data->cancellable, cb_data->cancel_id); DLEYNA_LOG_DEBUG("Exit"); } + +static void prv_set_prop_wl_enabled(dlr_manager_t *manager, + dleyna_settings_t *settings, + gboolean enabled, + GError **error) +{ + GVariant *prop_val; + gboolean old_val; + + DLEYNA_LOG_DEBUG("Enter %d", enabled); + + old_val = dleyna_settings_is_white_list_enabled(settings); + + if (old_val == enabled) + goto exit; + + /* If no error, the white list will be updated in the reload callack + */ + dleyna_settings_set_white_list_enabled(settings, enabled, error); + + if (*error == NULL) { + dleyna_white_list_enable(manager->wl, enabled); + prop_val = g_variant_new_boolean(enabled); + prv_wl_notify_prop(manager, + DLR_INTERFACE_PROP_WHITE_LIST_ENABLED, + prop_val); + } + +exit: + DLEYNA_LOG_DEBUG("Exit"); + return; +} + +static void prv_set_prop_wl_entries(dlr_manager_t *manager, + dleyna_settings_t *settings, + GVariant *entries, + GError **error) +{ + DLEYNA_LOG_DEBUG("Enter"); + + if (strcmp(g_variant_get_type_string(entries), "as")) { + DLEYNA_LOG_WARNING("Invalid parameter type. 'as' expected."); + + *error = g_error_new(DLEYNA_SERVER_ERROR, + DLEYNA_ERROR_BAD_QUERY, + "Invalid parameter type. 'as' expected."); + goto exit; + } + + /* If no error, the white list will be updated in the reload callack + * callack + */ + dleyna_settings_set_white_list_entries(settings, entries, error); + + if (*error == NULL) { + dleyna_white_list_clear(manager->wl); + dleyna_white_list_add_entries(manager->wl, entries); + + prv_wl_notify_prop(manager, + DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES, + entries); + } +exit: + DLEYNA_LOG_DEBUG("Exit"); +} + +void dlr_manager_set_prop(dlr_manager_t *manager, + dleyna_settings_t *settings, + dlr_task_t *task, + dlr_manager_task_complete_t cb) +{ + dlr_async_task_t *cb_data = (dlr_async_task_t *)task; + dlr_task_set_prop_t *task_data = &task->ut.set_prop; + GVariant *param = task_data->params; + gchar *name = task_data->prop_name; + gchar *i_name = task_data->interface_name; + GError *error = NULL; + + DLEYNA_LOG_DEBUG("Enter"); + DLEYNA_LOG_DEBUG("Path: %s", task->path); + DLEYNA_LOG_DEBUG("Interface %s", i_name); + DLEYNA_LOG_DEBUG("Prop.%s", name); + + cb_data->cb = cb; + + if (strcmp(i_name, DLEYNA_SERVER_INTERFACE_MANAGER) && + strcmp(i_name, "")) { + DLEYNA_LOG_WARNING("Interface is unknown."); + + cb_data->error = g_error_new(DLEYNA_SERVER_ERROR, + DLEYNA_ERROR_UNKNOWN_INTERFACE, + "Interface is unknown."); + goto exit; + } + + if (!strcmp(name, DLR_INTERFACE_PROP_WHITE_LIST_ENABLED)) + prv_set_prop_wl_enabled(manager, settings, + g_variant_get_boolean(param), + &error); + else if (!strcmp(name, DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES)) + prv_set_prop_wl_entries(manager, settings, param, &error); + else + cb_data->error = g_error_new(DLEYNA_SERVER_ERROR, + DLEYNA_ERROR_UNKNOWN_PROPERTY, + "Unknown property"); + + if (error != NULL) + cb_data->error = error; + +exit: + (void) g_idle_add(dlr_async_task_complete, cb_data); + DLEYNA_LOG_DEBUG("Exit"); +} diff --git a/libdleyna/renderer/manager.h b/libdleyna/renderer/manager.h index c670430..db0383b 100644 --- a/libdleyna/renderer/manager.h +++ b/libdleyna/renderer/manager.h @@ -24,6 +24,7 @@ #define DLR_MANAGER_H__ #include <libdleyna/core/connector.h> +#include <libdleyna/core/settings.h> #include <libgupnp/gupnp-context-manager.h> #include "task.h" @@ -36,19 +37,20 @@ dlr_manager_t *dlr_manager_new(dleyna_connector_id_t connection, void dlr_manager_delete(dlr_manager_t *manager); -void dlr_manager_wl_enable(dlr_task_t *task); - -void dlr_manager_wl_add_entries(dlr_task_t *task); - -void dlr_manager_wl_remove_entries(dlr_task_t *task); - -void dlr_manager_wl_clear(dlr_task_t *task); +dleyna_white_list_t *dlr_manager_get_white_list(dlr_manager_t *manager); void dlr_manager_get_all_props(dlr_manager_t *manager, + dleyna_settings_t *settings, dlr_task_t *task, dlr_manager_task_complete_t cb); void dlr_manager_get_prop(dlr_manager_t *manager, + dleyna_settings_t *settings, + dlr_task_t *task, + dlr_manager_task_complete_t cb); + +void dlr_manager_set_prop(dlr_manager_t *manager, + dleyna_settings_t *settings, dlr_task_t *task, dlr_manager_task_complete_t cb); diff --git a/libdleyna/renderer/server.c b/libdleyna/renderer/server.c index 54bc5bc..e4ffc86 100644 --- a/libdleyna/renderer/server.c +++ b/libdleyna/renderer/server.c @@ -34,6 +34,7 @@ #include <libdleyna/core/error.h> #include <libdleyna/core/log.h> #include <libdleyna/core/task-processor.h> +#include <libdleyna/core/white-list.h> #include "async.h" #include "control-point-renderer.h" @@ -150,20 +151,6 @@ static const gchar g_root_introspection[] = " </method>" " <method name='"DLR_INTERFACE_RESCAN"'>" " </method>" - " <method name='"DLR_INTERFACE_WHITE_LIST_ENABLE"'>" - " <arg type='b' name='"DLR_INTERFACE_IS_ENABLED"'" - " direction='in'/>" - " </method>" - " <method name='"DLR_INTERFACE_WHITE_LIST_ADD_ENTRIES"'>" - " <arg type='as' name='"DLR_INTERFACE_ENTRY_LIST"'" - " direction='in'/>" - " </method>" - " <method name='"DLR_INTERFACE_WHITE_LIST_REMOVE_ENTRIES"'>" - " <arg type='as' name='"DLR_INTERFACE_ENTRY_LIST"'" - " direction='in'/>" - " </method>" - " <method name='"DLR_INTERFACE_WHITE_LIST_CLEAR"'>" - " </method>" " <signal name='"DLR_INTERFACE_FOUND_RENDERER"'>" " <arg type='o' name='"DLR_INTERFACE_PATH"'/>" " </signal>" @@ -171,9 +158,9 @@ static const gchar g_root_introspection[] = " <arg type='o' name='"DLR_INTERFACE_PATH"'/>" " </signal>" " <property type='as' name='"DLR_INTERFACE_PROP_WHITE_LIST_ENTRIES"'" - " access='read'/>" + " access='readwrite'/>" " <property type='b' name='"DLR_INTERFACE_PROP_WHITE_LIST_ENABLED"'" - " access='read'/>" + " access='readwrite'/>" " </interface>" " <interface name='"DLR_INTERFACE_PROPERTIES"'>" " <method name='"DLR_INTERFACE_GET"'>" @@ -190,6 +177,14 @@ static const gchar g_root_introspection[] = " <arg type='a{sv}' name='"DLR_INTERFACE_PROPERTIES_VALUE"'" " direction='out'/>" " </method>" + " <method name='"DLR_INTERFACE_SET"'>" + " <arg type='s' name='"DLR_INTERFACE_INTERFACE_NAME"'" + " direction='in'/>" + " <arg type='s' name='"DLR_INTERFACE_PROPERTY_NAME"'" + " direction='in'/>" + " <arg type='v' name='"DLR_INTERFACE_VALUE"'" + " direction='in'/>" + " </method>" " <signal name='"DLR_INTERFACE_PROPERTIES_CHANGED"'>" " <arg type='s' name='"DLR_INTERFACE_INTERFACE_NAME"'/>" " <arg type='a{sv}' name='"DLR_INTERFACE_CHANGED_PROPERTIES"'/>" @@ -533,22 +528,6 @@ static void prv_process_sync_task(dlr_task_t *task) dlr_upnp_rescan(g_context.upnp); dlr_task_complete(task); break; - case DLR_TASK_WHITE_LIST_ENABLE: - dlr_manager_wl_enable(task); - dlr_task_complete(task); - break; - case DLR_TASK_WHITE_LIST_ADD_ENTRIES: - dlr_manager_wl_add_entries(task); - dlr_task_complete(task); - break; - case DLR_TASK_WHITE_LIST_REMOVE_ENTRIES: - dlr_manager_wl_remove_entries(task); - dlr_task_complete(task); - break; - case DLR_TASK_WHITE_LIST_CLEAR: - dlr_manager_wl_clear(task); - dlr_task_complete(task); - break; case DLR_TASK_RAISE: case DLR_TASK_QUIT: error = g_error_new(DLEYNA_SERVER_ERROR, @@ -662,12 +641,16 @@ static void prv_process_async_task(dlr_task_t *task) prv_async_task_complete); break; case DLR_TASK_MANAGER_GET_PROP: - dlr_manager_get_prop(g_context.manager, task, - prv_async_task_complete); + dlr_manager_get_prop(g_context.manager, g_context.settings, + task, prv_async_task_complete); break; case DLR_TASK_MANAGER_GET_ALL_PROPS: - dlr_manager_get_all_props(g_context.manager, task, - prv_async_task_complete); + dlr_manager_get_all_props(g_context.manager, g_context.settings, + task, prv_async_task_complete); + break; + case DLR_TASK_MANAGER_SET_PROP: + dlr_manager_set_prop(g_context.manager, g_context.settings, + task, prv_async_task_complete); break; default: break; @@ -796,18 +779,6 @@ static void prv_manager_root_method_call( task = dlr_task_get_servers_new(invocation); else if (!strcmp(method, DLR_INTERFACE_RESCAN)) task = dlr_task_rescan_new(invocation); - else if (!strcmp(method, DLR_INTERFACE_WHITE_LIST_ENABLE)) - task = dlr_task_wl_enable_new(invocation, - parameters); - else if (!strcmp(method, DLR_INTERFACE_WHITE_LIST_ADD_ENTRIES)) - task = dlr_task_wl_add_entries_new(invocation, - parameters); - else if (!strcmp(method, - DLR_INTERFACE_WHITE_LIST_REMOVE_ENTRIES)) - task = dlr_task_wl_remove_entries_new(invocation, - parameters); - else if (!strcmp(method, DLR_INTERFACE_WHITE_LIST_CLEAR)) - task = dlr_task_wl_clear_new(invocation); else goto finished; @@ -836,6 +807,9 @@ static void prv_manager_props_method_call(dleyna_connector_id_t conn, else if (!strcmp(method, DLR_INTERFACE_GET)) task = dlr_task_manager_get_prop_new(invocation, object, parameters, &error); + else if (!strcmp(method, DLR_INTERFACE_SET)) + task = dlr_task_manager_set_prop_new(invocation, object, + parameters, &error); else goto finished; @@ -1113,6 +1087,25 @@ static void prv_lost_media_server(const gchar *path) dleyna_task_processor_remove_queues_for_sink(g_context.processor, path); } +static void prv_white_list_init(void) +{ + gboolean enabled; + GVariant *entries; + dleyna_white_list_t *wl; + + DLEYNA_LOG_DEBUG("Enter"); + + enabled = dleyna_settings_is_white_list_enabled(g_context.settings); + entries = dleyna_settings_white_list_entries(g_context.settings); + + wl = dlr_manager_get_white_list(g_context.manager); + + dleyna_white_list_enable(wl, enabled); + dleyna_white_list_add_entries(wl, entries); + + DLEYNA_LOG_DEBUG("Exit"); +} + static gboolean prv_control_point_start_service( dleyna_connector_id_t connection) { @@ -1136,13 +1129,13 @@ static gboolean prv_control_point_start_service( prv_lost_media_server); g_context.manager = dlr_manager_new(connection, - dlr_upnp_get_context_manager(g_context.upnp)); + dlr_upnp_get_context_manager( + g_context.upnp)); + prv_white_list_init(); } else { retval = FALSE; } - dleyna_settings_init_white_list(g_context.settings); - return retval; } diff --git a/libdleyna/renderer/task.c b/libdleyna/renderer/task.c index 53da351..87623d3 100644 --- a/libdleyna/renderer/task.c +++ b/libdleyna/renderer/task.c @@ -106,6 +106,7 @@ static void prv_dlr_task_delete(dlr_task_t *task) g_free(task->ut.get_prop.interface_name); g_free(task->ut.get_prop.prop_name); break; + case DLR_TASK_MANAGER_SET_PROP: case DLR_TASK_SET_PROP: g_free(task->ut.set_prop.interface_name); g_free(task->ut.set_prop.prop_name); @@ -126,10 +127,6 @@ static void prv_dlr_task_delete(dlr_task_t *task) g_free(task->ut.get_icon.mime_type); g_free(task->ut.get_icon.resolution); break; - case DLR_TASK_WHITE_LIST_ADD_ENTRIES: - case DLR_TASK_WHITE_LIST_REMOVE_ENTRIES: - if (task->ut.white_list.entries != NULL) - g_variant_unref(task->ut.white_list.entries); default: break; } @@ -429,75 +426,22 @@ dlr_task_t *dlr_task_get_icon_new(dleyna_connector_msg_id_t invocation, return task; } -dlr_task_t *dlr_task_wl_enable_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters) -{ - dlr_task_t *task = g_new0(dlr_task_t, 1); - - task->type = DLR_TASK_WHITE_LIST_ENABLE; - task->invocation = invocation; - task->synchronous = TRUE; - g_variant_get(parameters, "(b)", - &task->ut.white_list.enabled); - - return task; -} - -dlr_task_t *dlr_task_wl_clear_new(dleyna_connector_msg_id_t invocation) -{ - dlr_task_t *task = g_new0(dlr_task_t, 1); - - task->type = DLR_TASK_WHITE_LIST_CLEAR; - task->invocation = invocation; - task->synchronous = TRUE; - - return task; -} - -dlr_task_t *dlr_task_wl_add_entries_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters) -{ - dlr_task_t *task = g_new0(dlr_task_t, 1); - - task->type = DLR_TASK_WHITE_LIST_ADD_ENTRIES; - task->invocation = invocation; - task->synchronous = TRUE; - g_variant_get(parameters, "(@as)", &task->ut.white_list.entries); - - return task; -} - -dlr_task_t *dlr_task_wl_remove_entries_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters) -{ - dlr_task_t *task = g_new0(dlr_task_t, 1); - - task->type = DLR_TASK_WHITE_LIST_REMOVE_ENTRIES; - task->invocation = invocation; - task->synchronous = TRUE; - g_variant_get(parameters, "(@as)", &task->ut.white_list.entries); - - return task; -} - dlr_task_t *dlr_task_manager_get_prop_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters, GError **error) { - dlr_task_t *task = (dlr_task_t *)g_new0(dlr_async_task_t, 1); + dlr_task_t *task; + + task = prv_device_task_new(DLR_TASK_MANAGER_GET_PROP, invocation, + path, "(v)"); g_variant_get(parameters, "(ss)", &task->ut.get_prop.interface_name, &task->ut.get_prop.prop_name); + g_strstrip(task->ut.get_prop.interface_name); g_strstrip(task->ut.get_prop.prop_name); - task->path = g_strstrip(g_strdup(path)); - - task->type = DLR_TASK_MANAGER_GET_PROP; - task->invocation = invocation; - task->result_format = "(v)"; - return task; } @@ -506,16 +450,32 @@ dlr_task_t *dlr_task_manager_get_props_new(dleyna_connector_msg_id_t invocation, GVariant *parameters, GError **error) { - dlr_task_t *task = (dlr_task_t *)g_new0(dlr_async_task_t, 1); + dlr_task_t *task; + + task = prv_device_task_new(DLR_TASK_MANAGER_GET_ALL_PROPS, invocation, + path, "(@a{sv})"); g_variant_get(parameters, "(s)", &task->ut.get_props.interface_name); g_strstrip(task->ut.get_props.interface_name); - task->path = g_strstrip(g_strdup(path)); + return task; +} - task->type = DLR_TASK_MANAGER_GET_ALL_PROPS; - task->invocation = invocation; - task->result_format = "(@a{sv})"; +dlr_task_t *dlr_task_manager_set_prop_new(dleyna_connector_msg_id_t invocation, + const gchar *path, + GVariant *parameters, + GError **error) +{ + dlr_task_t *task; + + task = prv_device_task_new(DLR_TASK_MANAGER_SET_PROP, invocation, path, + NULL); + + g_variant_get(parameters, "(ssv)", &task->ut.set_prop.interface_name, + &task->ut.set_prop.prop_name, &task->ut.set_prop.params); + + g_strstrip(task->ut.set_prop.interface_name); + g_strstrip(task->ut.set_prop.prop_name); return task; } diff --git a/libdleyna/renderer/task.h b/libdleyna/renderer/task.h index 161e6ad..b64eda4 100644 --- a/libdleyna/renderer/task.h +++ b/libdleyna/renderer/task.h @@ -55,12 +55,9 @@ enum dlr_task_type_t_ { DLR_TASK_HOST_URI, DLR_TASK_REMOVE_URI, DLR_TASK_GET_ICON, - DLR_TASK_WHITE_LIST_ENABLE, - DLR_TASK_WHITE_LIST_ADD_ENTRIES, - DLR_TASK_WHITE_LIST_REMOVE_ENTRIES, - DLR_TASK_WHITE_LIST_CLEAR, DLR_TASK_MANAGER_GET_ALL_PROPS, - DLR_TASK_MANAGER_GET_PROP + DLR_TASK_MANAGER_GET_PROP, + DLR_TASK_MANAGER_SET_PROP }; typedef enum dlr_task_type_t_ dlr_task_type_t; @@ -112,12 +109,6 @@ struct dlr_task_get_icon_t_ { gchar *resolution; }; -typedef struct dlr_task_white_list_t_ dlr_task_white_list_t; -struct dlr_task_white_list_t_ { - gboolean enabled; - GVariant *entries; -}; - typedef struct dlr_task_t_ dlr_task_t; struct dlr_task_t_ { dleyna_task_atom_t atom; /* pseudo inheritance - MUST be first field */ @@ -136,7 +127,6 @@ struct dlr_task_t_ { dlr_task_host_uri_t host_uri; dlr_task_seek_t seek; dlr_task_get_icon_t get_icon; - dlr_task_white_list_t white_list; } ut; }; @@ -216,17 +206,6 @@ dlr_task_t *dlr_task_remove_uri_new(dleyna_connector_msg_id_t invocation, dlr_task_t *dlr_task_get_icon_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters); -dlr_task_t *dlr_task_wl_enable_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters); - -dlr_task_t *dlr_task_wl_clear_new(dleyna_connector_msg_id_t invocation); - -dlr_task_t *dlr_task_wl_add_entries_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters); - -dlr_task_t *dlr_task_wl_remove_entries_new(dleyna_connector_msg_id_t invocation, - GVariant *parameters); - dlr_task_t *dlr_task_manager_get_prop_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters, @@ -237,6 +216,11 @@ dlr_task_t *dlr_task_manager_get_props_new(dleyna_connector_msg_id_t invocation, GVariant *parameters, GError **error); +dlr_task_t *dlr_task_manager_set_prop_new(dleyna_connector_msg_id_t invocation, + const gchar *path, + GVariant *parameters, + GError **error); + void dlr_task_complete(dlr_task_t *task); void dlr_task_fail(dlr_task_t *task, GError *error); |