summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRegis Merlino <regis.merlino@intel.com>2013-02-26 14:54:07 +0100
committerLudovic Ferrandis <ludovic.ferrandis@intel.com>2013-02-26 18:01:13 +0100
commit81b9f7c89e4836fa1514d7b7264822ea2f692ed3 (patch)
tree22b7b6036f115c994a3f69bd9d6572e9be4c791a
parent5acfdc473af4ac99f37fc3f4fd5685dca67c6473 (diff)
downloaddleyna-core-81b9f7c89e4836fa1514d7b7264822ea2f692ed3.tar.gz
[Connector - Control Point] Add new APIs
- Add a disconnect function in connector - Add a finalize function in control point Signed-off-by: Regis Merlino <regis.merlino@intel.com>
-rw-r--r--src/connector.h2
-rw-r--r--src/control-point.h2
-rw-r--r--src/main-loop.c14
3 files changed, 17 insertions, 1 deletions
diff --git a/src/connector.h b/src/connector.h
index 24c5cbd..d9599a6 100644
--- a/src/connector.h
+++ b/src/connector.h
@@ -42,6 +42,7 @@ typedef void (*dleyna_connector_connect_t)(
const gchar *server_name,
dleyna_connector_connected_cb_t connected_cb,
dleyna_connector_disconnected_cb_t disconnected_cb);
+typedef void (*dleyna_connector_disconnect_t)(void);
typedef void (*dleyna_connector_client_new_cb_t)(const gchar *client_name);
typedef void (*dleyna_connector_client_lost_cb_t)(const gchar *client_name);
@@ -99,6 +100,7 @@ struct dleyna_connector_t_ {
dleyna_connector_initialize_t initialize;
dleyna_connector_shutdown_t shutdown;
dleyna_connector_connect_t connect;
+ dleyna_connector_disconnect_t disconnect;
dleyna_connector_watch_client_t watch_client;
dleyna_connector_unwatch_client_t unwatch_client;
dleyna_connector_set_client_lost_cb_t set_client_lost_cb;
diff --git a/src/control-point.h b/src/control-point.h
index eeca47d..cd0c7c7 100644
--- a/src/control-point.h
+++ b/src/control-point.h
@@ -33,6 +33,7 @@ typedef void (*dleyna_control_point_initialize_t)(
const dleyna_connector_t *connector,
dleyna_task_processor_t *processor,
dleyna_settings_t *settings);
+typedef void (*dleyna_control_point_finalize_t)(void);
typedef void (*dleyna_control_point_free_t)(void);
typedef const gchar *(*dleyna_control_point_server_name_t)(void);
@@ -45,6 +46,7 @@ typedef gboolean (*dleyna_control_point_start_service_t)(
typedef struct dleyna_control_point_t_ dleyna_control_point_t;
struct dleyna_control_point_t_ {
dleyna_control_point_initialize_t initialize;
+ dleyna_control_point_finalize_t finalize;
dleyna_control_point_free_t free;
dleyna_control_point_server_name_t server_name;
dleyna_control_point_server_introspection_t server_introspection;
diff --git a/src/main-loop.c b/src/main-loop.c
index 9105c91..899f4f2 100644
--- a/src/main-loop.c
+++ b/src/main-loop.c
@@ -44,11 +44,23 @@ struct dleyna_daemon_context_t_ {
static dleyna_daemon_context_t g_context;
+static gboolean prv_context_mainloop_quit_cb(gpointer user_data)
+{
+ DLEYNA_LOG_DEBUG("Main loop quit");
+
+ g_main_loop_quit(g_context.main_loop);
+
+ return FALSE;
+}
+
static gboolean prv_context_quit_cb(gpointer user_data)
{
DLEYNA_LOG_DEBUG("Quitting");
- g_main_loop_quit(g_context.main_loop);
+ g_context.connector->disconnect();
+ g_context.control_point->finalize();
+
+ g_timeout_add_seconds(1, prv_context_mainloop_quit_cb, NULL);
return FALSE;
}