]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dbus: allow to select system or session message bus
authorJaroslav Kysela <perex@perex.cz>
Sat, 9 Aug 2014 10:10:28 +0000 (12:10 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 11 Aug 2014 09:50:51 +0000 (11:50 +0200)
src/dbus.c
src/dbus.h
src/main.c

index a827f6e77a88530fe085951bb46c5d3136d4c6b3..c962499c51635fd552c6d878a978eed60f1fa553 100644 (file)
@@ -53,6 +53,7 @@ static struct dbus_rpc_list dbus_rpcs;
 static th_pipe_t dbus_pipe;
 static pthread_mutex_t dbus_lock;
 static int dbus_running;
+static int dbus_session;
 
 /**
  *
@@ -135,7 +136,7 @@ dbus_create_session(const char *name)
 
   dbus_error_init(&err);
 
-  conn = dbus_bus_get_private(DBUS_BUS_SESSION, &err);
+  conn = dbus_bus_get_private(dbus_session ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &err);
   if (dbus_error_is_set(&err)) {
     tvherror("dbus", "Connection error: %s", err.message);
     dbus_error_free(&err);
@@ -146,11 +147,13 @@ dbus_create_session(const char *name)
   if (dbus_error_is_set(&err)) {
     tvherror("dbus", "Name error: %s", err.message);
     dbus_error_free(&err);
+    dbus_connection_close(conn);
     dbus_connection_unref(conn);
     return NULL;
   }
   if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) {
     tvherror("dbus", "Not primary owner");
+    dbus_connection_close(conn);
     dbus_connection_unref(conn);
     return NULL;
   }
@@ -429,8 +432,9 @@ dbus_server_thread(void *aux)
 pthread_t dbus_tid;
 
 void
-dbus_server_init(void)
+dbus_server_init(int session)
 {
+  dbus_session = session;
   pthread_mutex_init(&dbus_lock, NULL);
   TAILQ_INIT(&dbus_signals);
   LIST_INIT(&dbus_rpcs);
index e3eadfeb13bdb6de681ee5293969622066852a30..15023d7cab3690ca8fedd00761acbd24c394cfbb 100644 (file)
@@ -39,7 +39,7 @@ void
 dbus_register_rpc_str(const char *call_name, void *opaque,
                       char *(*fcn)(void *, const char *, char *));
 
-void dbus_server_init(void);
+void dbus_server_init(int session);
 void dbus_server_start(void);
 void dbus_server_done(void);
 
@@ -60,7 +60,7 @@ static inline void
 dbus_register_rpc_str(const char *call_name, void *opaque,
                       char *(*fcn)(void *, const char *, char *)) { }
 
-static inline void dbus_server_init(void) { }
+static inline void dbus_server_init(int session) { }
 static inline void dbus_server_start(void) { }
 static inline void dbus_server_done(void) { }
 
index 8c6f5dfc8639b7a67ff571d37b92cf3dea0349ba..452a0e37fb85c298df6a55a0d0a21476148247dc 100644 (file)
@@ -471,7 +471,8 @@ main(int argc, char **argv)
               opt_ipv6         = 0,
               opt_tsfile_tuner = 0,
               opt_dump         = 0,
-              opt_xspf         = 0;
+              opt_xspf         = 0,
+              opt_dbus_session = 0;
   const char *opt_config       = NULL,
              *opt_user         = NULL,
              *opt_group        = NULL,
@@ -504,6 +505,10 @@ main(int argc, char **argv)
                              "to your Tvheadend installation until you edit\n"
                              "the access-control from within the Tvheadend UI",
       OPT_BOOL, &opt_firstrun },
+#if ENABLE_DBUS_1
+    { 'e', "dbus_session", "DBus - use the session message bus instead system one",
+      OPT_BOOL, &opt_dbus_session },
+#endif
 #if ENABLE_LINUXDVB
     { 'a', "adapters",  "Only use specified DVB adapters (comma separated)",
       OPT_STR, &opt_dvb_adapters },
@@ -768,7 +773,7 @@ main(int argc, char **argv)
    * Initialize subsystems
    */
 
-  dbus_server_init();
+  dbus_server_init(opt_dbus_session);
 
   intlconv_init();