diff options
Diffstat (limited to 'libdleyna/renderer/server.c')
-rw-r--r-- | libdleyna/renderer/server.c | 95 |
1 files changed, 44 insertions, 51 deletions
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; } |