summaryrefslogtreecommitdiff
path: root/libdleyna/server/task.c
diff options
context:
space:
mode:
Diffstat (limited to 'libdleyna/server/task.c')
-rw-r--r--libdleyna/server/task.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/libdleyna/server/task.c b/libdleyna/server/task.c
index 312efc0..ec63d8e 100644
--- a/libdleyna/server/task.c
+++ b/libdleyna/server/task.c
@@ -222,6 +222,24 @@ static gboolean prv_set_task_target_info(dls_task_t *task, const gchar *path,
&task->target.device, error);
}
+static gboolean prv_is_task_allowed(dls_task_t *task, GError **error)
+{
+ if (dls_server_is_device_sleeping(task->target.device)) {
+ if (task->type != DLS_TASK_WAKE &&
+ task->type != DLS_TASK_GET_PROP)
+ goto on_error;
+ }
+
+ return TRUE;
+
+on_error:
+ *error = g_error_new(DLEYNA_SERVER_ERROR,
+ DLEYNA_ERROR_OPERATION_FAILED,
+ "Target device is sleeping");
+
+ return FALSE;
+}
+
static dls_task_t *prv_m2spec_task_new(dls_task_type_t type,
dleyna_connector_msg_id_t invocation,
const gchar *path,
@@ -238,14 +256,16 @@ static dls_task_t *prv_m2spec_task_new(dls_task_type_t type,
task = (dls_task_t *)g_new0(dls_async_task_t, 1);
}
- if (!prv_set_task_target_info(task, path, error)) {
+ task->type = type;
+
+ if (!prv_set_task_target_info(task, path, error) ||
+ !prv_is_task_allowed(task, error)) {
prv_delete(task);
task = NULL;
goto finished;
}
- task->type = type;
task->invocation = invocation;
task->result_format = result_format;