summaryrefslogtreecommitdiff
path: root/libdleyna/server/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdleyna/server/server.c')
-rw-r--r--libdleyna/server/server.c92
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;
}