diff options
Diffstat (limited to 'libdleyna/server/server.c')
-rw-r--r-- | libdleyna/server/server.c | 92 |
1 files changed, 45 insertions, 47 deletions
diff --git a/libdleyna/server/server.c b/libdleyna/server/server.c index c6e1082..40de9a2 100644 --- a/libdleyna/server/server.c +++ b/libdleyna/server/server.c @@ -29,6 +29,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 "client.h" @@ -84,20 +85,6 @@ static const gchar g_root_introspection[] = " <arg type='b' name='"DLS_INTERFACE_PREFER"'" " direction='in'/>" " </method>" - " <method name='"DLS_INTERFACE_WHITE_LIST_ENABLE"'>" - " <arg type='b' name='"DLS_INTERFACE_IS_ENABLED"'" - " direction='in'/>" - " </method>" - " <method name='"DLS_INTERFACE_WHITE_LIST_ADD_ENTRIES"'>" - " <arg type='as' name='"DLS_INTERFACE_ENTRY_LIST"'" - " direction='in'/>" - " </method>" - " <method name='"DLS_INTERFACE_WHITE_LIST_REMOVE_ENTRIES"'>" - " <arg type='as' name='"DLS_INTERFACE_ENTRY_LIST"'" - " direction='in'/>" - " </method>" - " <method name='"DLS_INTERFACE_WHITE_LIST_CLEAR"'>" - " </method>" " <signal name='"DLS_INTERFACE_FOUND_SERVER"'>" " <arg type='o' name='"DLS_INTERFACE_PATH"'/>" " </signal>" @@ -105,9 +92,9 @@ static const gchar g_root_introspection[] = " <arg type='o' name='"DLS_INTERFACE_PATH"'/>" " </signal>" " <property type='as' name='"DLS_INTERFACE_PROP_WHITE_LIST_ENTRIES"'" - " access='read'/>" + " access='readwrite'/>" " <property type='b' name='"DLS_INTERFACE_PROP_WHITE_LIST_ENABLED"'" - " access='read'/>" + " access='readwrite'/>" " </interface>" " <interface name='"DLS_INTERFACE_PROPERTIES"'>" " <method name='"DLS_INTERFACE_GET"'>" @@ -124,6 +111,14 @@ static const gchar g_root_introspection[] = " <arg type='a{sv}' name='"DLS_INTERFACE_PROPERTIES_VALUE"'" " direction='out'/>" " </method>" + " <method name='"DLS_INTERFACE_SET"'>" + " <arg type='s' name='"DLS_INTERFACE_INTERFACE_NAME"'" + " direction='in'/>" + " <arg type='s' name='"DLS_INTERFACE_PROPERTY_NAME"'" + " direction='in'/>" + " <arg type='v' name='"DLS_INTERFACE_VALUE"'" + " direction='in'/>" + " </method>" " <signal name='"DLS_INTERFACE_PROPERTIES_CHANGED"'>" " <arg type='s' name='"DLS_INTERFACE_INTERFACE_NAME"'/>" " <arg type='a{sv}' name='"DLS_INTERFACE_CHANGED_PROPERTIES"'/>" @@ -593,22 +588,6 @@ static void prv_process_sync_task(dls_task_t *task) case DLS_TASK_CANCEL_UPLOAD: dls_upnp_cancel_upload(g_context.upnp, task); break; - case DLS_TASK_WHITE_LIST_ENABLE: - dls_manager_wl_enable(task); - dls_task_complete(task); - break; - case DLS_TASK_WHITE_LIST_ADD_ENTRIES: - dls_manager_wl_add_entries(task); - dls_task_complete(task); - break; - case DLS_TASK_WHITE_LIST_REMOVE_ENTRIES: - dls_manager_wl_remove_entries(task); - dls_task_complete(task); - break; - case DLS_TASK_WHITE_LIST_CLEAR: - dls_manager_wl_clear(task); - dls_task_complete(task); - break; default: goto finished; break; @@ -650,12 +629,16 @@ static void prv_process_async_task(dls_task_t *task) switch (task->type) { case DLS_TASK_MANAGER_GET_PROP: - dls_manager_get_prop(g_context.manager, task, - prv_async_task_complete); + dls_manager_get_prop(g_context.manager, g_context.settings, + task, prv_async_task_complete); break; case DLS_TASK_MANAGER_GET_ALL_PROPS: - dls_manager_get_all_props(g_context.manager, task, - prv_async_task_complete); + dls_manager_get_all_props(g_context.manager, g_context.settings, + task, prv_async_task_complete); + break; + case DLS_TASK_MANAGER_SET_PROP: + dls_manager_set_prop(g_context.manager, g_context.settings, + task, prv_async_task_complete); break; case DLS_TASK_GET_CHILDREN: dls_upnp_get_children(g_context.upnp, client, task, @@ -890,14 +873,6 @@ static void prv_manager_root_method_call( } else if (!strcmp(method, DLS_INTERFACE_PREFER_LOCAL_ADDRESSES)) { task = dls_task_prefer_local_addresses_new(invocation, parameters); - } else if (!strcmp(method, DLS_INTERFACE_WHITE_LIST_ENABLE)) { - task = dls_task_wl_enable_new(invocation, parameters); - } else if (!strcmp(method, DLS_INTERFACE_WHITE_LIST_ADD_ENTRIES)) { - task = dls_task_wl_add_entries_new(invocation, parameters); - } else if (!strcmp(method, DLS_INTERFACE_WHITE_LIST_REMOVE_ENTRIES)) { - task = dls_task_wl_remove_entries_new(invocation, parameters); - } else if (!strcmp(method, DLS_INTERFACE_WHITE_LIST_CLEAR)) { - task = dls_task_wl_clear_new(invocation); } else { goto finished; } @@ -926,6 +901,9 @@ static void prv_manager_props_method_call(dleyna_connector_id_t conn, else if (!strcmp(method, DLS_INTERFACE_GET)) task = dls_task_manager_get_prop_new(invocation, object, parameters, &error); + else if (!strcmp(method, DLS_INTERFACE_SET)) + task = dls_task_manager_set_prop_new(invocation, object, + parameters, &error); else goto finished; @@ -1277,6 +1255,25 @@ dls_upnp_t *dls_server_get_upnp(void) return g_context.upnp; } +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 = dls_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) { @@ -1301,13 +1298,14 @@ static gboolean prv_control_point_start_service( NULL); g_context.manager = dls_manager_new(connection, - dls_upnp_get_context_manager(g_context.upnp)); + dls_upnp_get_context_manager( + g_context.upnp)); + + prv_white_list_init(); } else { retval = FALSE; } - dleyna_settings_init_white_list(g_context.settings); - return retval; } |