dbus: allow to select system or session message bus

This commit is contained in:
Jaroslav Kysela 2014-08-09 12:10:28 +02:00
parent 840a0ae05c
commit f08423f953
3 changed files with 15 additions and 6 deletions

View 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);

View 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) { }

View 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();