summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Ferrandis <ludovic.ferrandis@intel.com>2013-09-12 13:03:06 +0200
committerMark Ryan <mark.d.ryan@intel.com>2013-10-03 11:54:01 +0200
commit812a3e4fe624f4c855d18fb734aebacccfd96fe0 (patch)
tree1804e2b3ed236cd041a94f38cabb95040cbb1cba
parent26af6087ef1c03781f2a7d0f9c1b079509198ca7 (diff)
downloaddleyna-renderer-812a3e4fe624f4c855d18fb734aebacccfd96fe0.tar.gz
[Network Filtering] New API and save
- Remove all WhiteListxxx API - Add Set() to 'org.freedesktop.DBus.Properties' interface to 'com.intel.dLeynaRenderer.Manager' root interface Signed-off-by: Ludovic Ferrandis <ludovic.ferrandis@intel.com>
-rw-r--r--doc/server/dbus/API.txt26
-rw-r--r--libdleyna/renderer/manager.c259
-rw-r--r--libdleyna/renderer/manager.h16
-rw-r--r--libdleyna/renderer/server.c95
-rw-r--r--libdleyna/renderer/task.c94
-rw-r--r--libdleyna/renderer/task.h30
-rw-r--r--test/dbus/rendererconsole.py15
7 files changed, 261 insertions, 274 deletions
diff --git a/doc/server/dbus/API.txt b/doc/server/dbus/API.txt
index 7556b6a..bd22a84 100644
--- a/doc/server/dbus/API.txt
+++ b/doc/server/dbus/API.txt
@@ -38,7 +38,7 @@ com.intel.dLeynaRenderer.Manager
Methods:
----------
-The interface com.intel.dLeynaRenderer.Manager contains 8
+The interface com.intel.dLeynaRenderer.Manager contains 4
methods. Descriptions of each of these methods along with their d-Bus
signatures are given below.
@@ -72,24 +72,6 @@ discover new DMRs which for some reason were not detected when either
they, or the device on which dLeyna-renderer runs, was started or joined
the network. New in version 0.0.2.
-WhiteListEnable(b enabled) -> void
-
-Enable or disable the Network Filtering feature.
-When enabled, only devices that are on allowed networks will be available.
-
-WhiteListAddEntries(as EntryList) -> void
-
-Add new entries to the list of allowed networks. An Entry could be an interface
-name (eth0), an ip address (127.0.0.1) or a SSID (MyWiFi)
-
-WhiteListRemoveEntries(as EntryList) -> void
-
-Remove entries from the list of allowed networks.
-
-WhiteListClear() -> void
-
-Remove all entries from the list, but it doesn't change the 'enabled' flag.
-
Properties:
---------
@@ -102,13 +84,17 @@ of d-Bus properties. These properties are described below:
|------------------------------------------------------------------------------|
| WhiteListEntries | as | m | The list of entries that compose the |
| | | | white list used to filter the networks. |
+| | | | An Entry could be an interface name |
+| | | | (eth0), an ip address (127.0.0.1) or |
+| | | | a SSID (MyWiFi) |
|------------------------------------------------------------------------------|
| WhiteListEnabled | b | m | True if the Network Filtering is active.|
|------------------------------------------------------------------------------|
A org.freedesktop.DBus.Properties.PropertiesChanged signal is emitted when
these properties change.
-
+These properties can be changed using the Set() method of
+org.freedesktop.DBus.Properties interface.
Signals:
---------
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);
diff --git a/test/dbus/rendererconsole.py b/test/dbus/rendererconsole.py
index f6912c6..df230bc 100644
--- a/test/dbus/rendererconsole.py
+++ b/test/dbus/rendererconsole.py
@@ -208,16 +208,20 @@ class Manager(object):
self.__manager.Rescan()
def white_list_enable(self, enable):
- self.__manager.WhiteListEnable(enable)
+ self.set_prop("WhiteListEnabled", enable)
def white_list_add(self, entries):
- self.__manager.WhiteListAddEntries(entries)
+ white_list = set(self.get_prop('WhiteListEntries'))
+ white_list = (white_list | set(entries)) - set('')
+ self.set_prop("WhiteListEntries", list(white_list))
def white_list_remove(self, entries):
- self.__manager.WhiteListRemoveEntries(entries)
+ white_list = set(self.get_prop('WhiteListEntries'))
+ white_list = white_list - set(entries)
+ self.set_prop("WhiteListEntries", list(white_list))
def white_list_clear(self):
- self.__manager.WhiteListClear()
+ self.set_prop("WhiteListEntries", [''])
def get_props(self, iface = ""):
return self._propsIF.GetAll(iface)
@@ -225,6 +229,9 @@ class Manager(object):
def get_prop(self, prop_name, iface = ""):
return self._propsIF.Get(iface, prop_name)
+ def set_prop(self, prop_name, val, iface = ""):
+ return self._propsIF.Set(iface, prop_name, val)
+
def print_prop(self, prop_name, iface = ""):
print_json(self._propsIF.Get(iface, prop_name))