diff options
author | Regis Merlino <regis.merlino@intel.com> | 2013-02-28 14:38:20 +0100 |
---|---|---|
committer | Regis Merlino <regis.merlino@intel.com> | 2013-02-28 14:38:20 +0100 |
commit | a41d8b48730b86273de82ce096f1c88a43669662 (patch) | |
tree | 5601ca848b78584da483ab0f1cf0de2158122553 | |
parent | 1a9227c7712c4b75727d613e4ce6d30f2e9b4390 (diff) | |
download | dleyna-server-a41d8b48730b86273de82ce096f1c88a43669662.tar.gz |
[Service] Moved service task to dleyna-core
Signed-off-by: Regis Merlino <regis.merlino@intel.com>
-rw-r--r-- | lib/Makefile.am | 1 | ||||
-rw-r--r-- | lib/device.c | 85 | ||||
-rw-r--r-- | lib/service-task.c | 139 | ||||
-rw-r--r-- | lib/service-task.h | 65 | ||||
-rw-r--r-- | lib/upnp.c | 10 |
5 files changed, 47 insertions, 253 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am index 32dbd1f..6778795 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -28,7 +28,6 @@ libdleyna_server_1_0_la_SOURCES = $(libdleyna_serverinc_HEADERS) \ path.c \ props.c \ search.c \ - service-task.c \ sort.c \ task.c \ upnp.c diff --git a/lib/device.c b/lib/device.c index 3972d5a..c6b7dc4 100644 --- a/lib/device.c +++ b/lib/device.c @@ -30,12 +30,12 @@ #include <libdleyna/core/error.h> #include <libdleyna/core/log.h> +#include <libdleyna/core/service-task.h> #include "device.h" #include "interface.h" #include "path.h" #include "server.h" -#include "service-task.h" #define DLS_SYSTEM_UPDATE_VAR "SystemUpdateID" #define DLS_CONTAINER_UPDATE_VAR "ContainerUpdateIDs" @@ -648,7 +648,7 @@ on_error: } static GUPnPServiceProxyAction *prv_get_feature_list( - dls_service_task_t *task, + dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { @@ -656,7 +656,7 @@ static GUPnPServiceProxyAction *prv_get_feature_list( return gupnp_service_proxy_begin_action( proxy, "GetFeatureList", - dls_service_task_begin_action_cb, + dleyna_service_task_begin_action_cb, task, NULL); } @@ -723,7 +723,7 @@ on_error: } static GUPnPServiceProxyAction *prv_get_sort_ext_capabilities( - dls_service_task_t *task, + dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { @@ -732,7 +732,7 @@ static GUPnPServiceProxyAction *prv_get_sort_ext_capabilities( return gupnp_service_proxy_begin_action( proxy, "GetSortExtensionCapabilities", - dls_service_task_begin_action_cb, + dleyna_service_task_begin_action_cb, task, NULL); } @@ -799,7 +799,7 @@ on_error: } static GUPnPServiceProxyAction *prv_get_sort_capabilities( - dls_service_task_t *task, + dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { @@ -808,7 +808,7 @@ static GUPnPServiceProxyAction *prv_get_sort_capabilities( return gupnp_service_proxy_begin_action( proxy, "GetSortCapabilities", - dls_service_task_begin_action_cb, + dleyna_service_task_begin_action_cb, task, NULL); } @@ -841,7 +841,7 @@ on_error: } static GUPnPServiceProxyAction *prv_get_search_capabilities( - dls_service_task_t *task, + dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { @@ -849,17 +849,17 @@ static GUPnPServiceProxyAction *prv_get_search_capabilities( return gupnp_service_proxy_begin_action( proxy, "GetSearchCapabilities", - dls_service_task_begin_action_cb, + dleyna_service_task_begin_action_cb, task, NULL); } -static GUPnPServiceProxyAction *prv_subscribe(dls_service_task_t *task, +static GUPnPServiceProxyAction *prv_subscribe(dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { dls_device_t *device; - device = dls_service_task_get_device(task); + device = (dls_device_t *)dleyna_service_task_get_user_data(task); dls_device_subscribe_to_contents_change(device); *failed = FALSE; @@ -902,7 +902,7 @@ static gboolean prv_subtree_interface_filter(const gchar *object_path, return retval; } -static GUPnPServiceProxyAction *prv_declare(dls_service_task_t *task, +static GUPnPServiceProxyAction *prv_declare(dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { @@ -910,9 +910,8 @@ static GUPnPServiceProxyAction *prv_declare(dls_service_task_t *task, dls_device_t *device; prv_new_device_ct_t *priv_t; - device = dls_service_task_get_device(task); - - priv_t = (prv_new_device_ct_t *)dls_service_task_get_user_data(task); + priv_t = (prv_new_device_ct_t *)dleyna_service_task_get_user_data(task); + device = priv_t->dev; id = dls_server_get_connector()->publish_subtree(priv_t->connection, device->path, @@ -977,26 +976,26 @@ dls_device_t *dls_device_new( context = dls_device_append_new_context(dev, ip_address, proxy); s_proxy = context->service_proxy; - dls_service_task_add(queue_id, prv_get_search_capabilities, - dev, s_proxy, - prv_get_search_capabilities_cb, NULL, priv_t); + dleyna_service_task_add(queue_id, prv_get_search_capabilities, + s_proxy, + prv_get_search_capabilities_cb, NULL, priv_t); - dls_service_task_add(queue_id, prv_get_sort_capabilities, - dev, s_proxy, - prv_get_sort_capabilities_cb, NULL, priv_t); + dleyna_service_task_add(queue_id, prv_get_sort_capabilities, + s_proxy, + prv_get_sort_capabilities_cb, NULL, priv_t); - dls_service_task_add(queue_id, prv_get_sort_ext_capabilities, - dev, s_proxy, - prv_get_sort_ext_capabilities_cb, NULL, priv_t); + dleyna_service_task_add(queue_id, prv_get_sort_ext_capabilities, + s_proxy, + prv_get_sort_ext_capabilities_cb, NULL, priv_t); - dls_service_task_add(queue_id, prv_get_feature_list, dev, s_proxy, - prv_get_feature_list_cb, NULL, priv_t); + dleyna_service_task_add(queue_id, prv_get_feature_list, s_proxy, + prv_get_feature_list_cb, NULL, priv_t); - dls_service_task_add(queue_id, prv_subscribe, dev, s_proxy, - NULL, NULL, NULL); + dleyna_service_task_add(queue_id, prv_subscribe, s_proxy, + NULL, NULL, dev); - dls_service_task_add(queue_id, prv_declare, dev, s_proxy, - NULL, g_free, priv_t); + dleyna_service_task_add(queue_id, prv_declare, s_proxy, + NULL, g_free, priv_t); dleyna_task_queue_start(queue_id); @@ -4099,20 +4098,21 @@ on_exit: } static GUPnPServiceProxyAction *prv_create_didls_item_browse( - dls_service_task_t *task, + dleyna_service_task_t *task, GUPnPServiceProxy *proxy, gboolean *failed) { prv_new_playlist_ct_t *priv_t; - priv_t = (prv_new_playlist_ct_t *)dls_service_task_get_user_data(task); + priv_t = (prv_new_playlist_ct_t *)dleyna_service_task_get_user_data( + task); *failed = FALSE; DLEYNA_LOG_DEBUG("Browse for ID: %s", priv_t->id); return gupnp_service_proxy_begin_action( proxy, "Browse", - dls_service_task_begin_action_cb, task, + dleyna_service_task_begin_action_cb, task, "ObjectID", G_TYPE_STRING, priv_t->id, "BrowseFlag", G_TYPE_STRING, "BrowseMetadata", "Filter", G_TYPE_STRING, "upnp:artist,upnp:album,res", @@ -4162,12 +4162,11 @@ static gboolean prv_create_chain_didls_items(dls_task_t *task, priv_t->cb_data = cb_data; priv_t->id = id; - dls_service_task_add(a_playlist->queue_id, - prv_create_didls_item_browse, - task->target.device, - proxy, - prv_create_didls_item_browse_cb, - prv_didls_free, priv_t); + dleyna_service_task_add(a_playlist->queue_id, + prv_create_didls_item_browse, + proxy, + prv_create_didls_item_browse_cb, + prv_didls_free, priv_t); } DLEYNA_LOG_DEBUG_NL(); @@ -4318,12 +4317,12 @@ void dls_device_playlist_upload(dls_client_t *client, queue_id = dleyna_task_processor_add_queue( dls_server_get_task_processor(), - dls_service_task_create_source(), + dleyna_service_task_create_source(), DLS_SERVER_SINK, DLEYNA_TASK_QUEUE_FLAG_AUTO_REMOVE, - dls_service_task_process_cb, - dls_service_task_cancel_cb, - dls_service_task_delete_cb); + dleyna_service_task_process_cb, + dleyna_service_task_cancel_cb, + dleyna_service_task_delete_cb); dleyna_task_queue_set_finally(queue_id, prv_create_didls_chain_end); dleyna_task_queue_set_user_data(queue_id, priv_t); diff --git a/lib/service-task.c b/lib/service-task.c deleted file mode 100644 index b3abb42..0000000 --- a/lib/service-task.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * dLeyna - * - * Copyright (C) 2012-2013 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU Lesser General Public License, - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Ludovic Ferrandis <ludovic.ferrandis@intel.com> - * Regis Merlino <regis.merlino@intel.com> - * - */ - -#include <libdleyna/core/log.h> -#include <libdleyna/core/task-processor.h> - -#include "device.h" -#include "service-task.h" - -struct dls_service_task_t_ { - dleyna_task_atom_t base; /* pseudo inheritance - MUST be first field */ - GUPnPServiceProxyActionCallback callback; - GUPnPServiceProxyAction *p_action; - GDestroyNotify free_func; - gpointer user_data; - dls_service_task_action t_action; - dls_device_t *device; - GUPnPServiceProxy *proxy; -}; - -const char *dls_service_task_create_source(void) -{ - static unsigned int cpt = 1; - static char source[20]; - - g_snprintf(source, 20, "source-%d", cpt); - cpt++; - - return source; -} - -void dls_service_task_add(const dleyna_task_queue_key_t *queue_id, - dls_service_task_action action, - dls_device_t *device, - GUPnPServiceProxy *proxy, - GUPnPServiceProxyActionCallback action_cb, - GDestroyNotify free_func, - gpointer cb_user_data) -{ - dls_service_task_t *task; - - task = g_new0(dls_service_task_t, 1); - - task->t_action = action; - task->callback = action_cb; - task->free_func = free_func; - task->user_data = cb_user_data; - task->device = device; - task->proxy = proxy; - - if (proxy != NULL) - g_object_add_weak_pointer((G_OBJECT(proxy)), - (gpointer *)&task->proxy); - - dleyna_task_queue_add_task(queue_id, &task->base); -} - -void dls_service_task_begin_action_cb(GUPnPServiceProxy *proxy, - GUPnPServiceProxyAction *action, - gpointer user_data) -{ - dls_service_task_t *task = (dls_service_task_t *)user_data; - - task->p_action = NULL; - task->callback(proxy, action, task->user_data); - - dleyna_task_queue_task_completed(task->base.queue_id); -} - -void dls_service_task_process_cb(dleyna_task_atom_t *atom, gpointer user_data) -{ - gboolean failed = FALSE; - dls_service_task_t *task = (dls_service_task_t *)atom; - - task->p_action = task->t_action(task, task->proxy, &failed); - - if (failed) - dleyna_task_processor_cancel_queue(task->base.queue_id); - else if (!task->p_action) - dleyna_task_queue_task_completed(task->base.queue_id); -} - -void dls_service_task_cancel_cb(dleyna_task_atom_t *atom, gpointer user_data) -{ - dls_service_task_t *task = (dls_service_task_t *)atom; - - if (task->p_action) { - if (task->proxy) - gupnp_service_proxy_cancel_action(task->proxy, - task->p_action); - task->p_action = NULL; - - dleyna_task_queue_task_completed(task->base.queue_id); - } -} - -void dls_service_task_delete_cb(dleyna_task_atom_t *atom, gpointer user_data) -{ - dls_service_task_t *task = (dls_service_task_t *)atom; - - if (task->free_func != NULL) - task->free_func(task->user_data); - - if (task->proxy != NULL) - g_object_remove_weak_pointer((G_OBJECT(task->proxy)), - (gpointer *)&task->proxy); - - g_free(task); -} - -dls_device_t *dls_service_task_get_device(dls_service_task_t *task) -{ - return task->device; -} - -gpointer *dls_service_task_get_user_data(dls_service_task_t *task) -{ - return task->user_data; -} diff --git a/lib/service-task.h b/lib/service-task.h deleted file mode 100644 index 957982d..0000000 --- a/lib/service-task.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * dLeyna - * - * Copyright (C) 2012-2013 Intel Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU Lesser General Public License, - * version 2.1, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - * Ludovic Ferrandis <ludovic.ferrandis@intel.com> - * Regis Merlino <regis.merlino@intel.com> - * - */ - -#ifndef DLS_SERVICE_TASK_H__ -#define DLS_SERVICE_TASK_H__ - -#include <glib.h> -#include <libgupnp/gupnp-service-proxy.h> - -#include <libdleyna/core/task-atom.h> - -#include "server.h" - -typedef struct dls_service_task_t_ dls_service_task_t; - -typedef GUPnPServiceProxyAction *(*dls_service_task_action) - (dls_service_task_t *task, - GUPnPServiceProxy *proxy, - gboolean *failed); - -const char *dls_service_task_create_source(void); - -void dls_service_task_add(const dleyna_task_queue_key_t *queue_id, - dls_service_task_action action, - dls_device_t *device, - GUPnPServiceProxy *proxy, - GUPnPServiceProxyActionCallback action_cb, - GDestroyNotify free_func, - gpointer cb_user_data); - -void dls_service_task_begin_action_cb(GUPnPServiceProxy *proxy, - GUPnPServiceProxyAction *action, - gpointer user_data); - -void dls_service_task_process_cb(dleyna_task_atom_t *atom, gpointer user_data); - -void dls_service_task_cancel_cb(dleyna_task_atom_t *atom, gpointer user_data); - -void dls_service_task_delete_cb(dleyna_task_atom_t *atom, gpointer user_data); - -dls_device_t *dls_service_task_get_device(dls_service_task_t *task); - -gpointer *dls_service_task_get_user_data(dls_service_task_t *task); - -#endif /* DLS_SERVICE_TASK_H__ */ @@ -28,9 +28,9 @@ #include <libdleyna/core/error.h> #include <libdleyna/core/log.h> +#include <libdleyna/core/service-task.h> #include "async.h" -#include "service-task.h" #include "device.h" #include "interface.h" #include "path.h" @@ -137,12 +137,12 @@ static void prv_server_available_cb(GUPnPControlPoint *cp, queue_id = dleyna_task_processor_add_queue( dls_server_get_task_processor(), - dls_service_task_create_source(), + dleyna_service_task_create_source(), DLS_SERVER_SINK, DLEYNA_TASK_QUEUE_FLAG_AUTO_REMOVE, - dls_service_task_process_cb, - dls_service_task_cancel_cb, - dls_service_task_delete_cb); + dleyna_service_task_process_cb, + dleyna_service_task_cancel_cb, + dleyna_service_task_delete_cb); dleyna_task_queue_set_finally(queue_id, prv_device_chain_end); dleyna_task_queue_set_user_data(queue_id, priv_t); |