|
Packit |
ae235b |
|
|
Packit |
ae235b |
<html>
|
|
Packit |
ae235b |
<head>
|
|
Packit |
ae235b |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
Packit |
ae235b |
<title>Owning bus names: GIO Reference Manual</title>
|
|
Packit |
ae235b |
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
|
|
Packit |
ae235b |
<link rel="home" href="index.html" title="GIO Reference Manual">
|
|
Packit |
ae235b |
<link rel="up" href="ch35.html" title="Migrating to GDBus">
|
|
Packit |
ae235b |
<link rel="prev" href="ch35s02.html" title="API comparison">
|
|
Packit |
ae235b |
<link rel="next" href="ch35s04.html" title="Creating proxies for well-known names">
|
|
Packit |
ae235b |
<meta name="generator" content="GTK-Doc V1.27 (XML mode)">
|
|
Packit |
ae235b |
<link rel="stylesheet" href="style.css" type="text/css">
|
|
Packit |
ae235b |
</head>
|
|
Packit |
ae235b |
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
![Home](home.png)
|
|
Packit |
ae235b |
![Up](up.png)
|
|
Packit |
ae235b |
![Prev](left.png)
|
|
Packit |
ae235b |
![Next](right.png)
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Owning bus names
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Using dbus-glib, you typically call RequestName manually
|
|
Packit |
ae235b |
to own a name, like in the following excerpt:
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
1
|
|
Packit |
ae235b |
2
|
|
Packit |
ae235b |
3
|
|
Packit |
ae235b |
4
|
|
Packit |
ae235b |
5
|
|
Packit |
ae235b |
6
|
|
Packit |
ae235b |
7
|
|
Packit |
ae235b |
8
|
|
Packit |
ae235b |
9
|
|
Packit |
ae235b |
10
|
|
Packit |
ae235b |
11
|
|
Packit |
ae235b |
12
|
|
Packit |
ae235b |
13
|
|
Packit |
ae235b |
14
|
|
Packit |
ae235b |
15
|
|
Packit |
ae235b |
16
|
|
Packit |
ae235b |
17
|
|
Packit |
ae235b |
18
|
|
Packit |
ae235b |
19
|
|
Packit |
ae235b |
20
|
|
Packit |
ae235b |
21
|
|
Packit |
ae235b |
22
|
|
Packit |
ae235b |
23
|
|
Packit |
ae235b |
24
|
|
Packit |
ae235b |
25
|
|
Packit |
ae235b |
26
|
|
Packit |
ae235b |
27
|
|
Packit |
ae235b |
28
|
|
Packit |
ae235b |
29
|
|
Packit |
ae235b |
30
|
|
Packit |
ae235b |
31
|
|
Packit |
ae235b |
32
|
|
Packit |
ae235b |
33
|
|
Packit |
ae235b |
34
|
|
Packit |
ae235b |
35
|
|
Packit |
ae235b |
36
|
|
Packit |
ae235b |
37
|
|
Packit |
ae235b |
38
|
|
Packit |
ae235b |
39
|
|
Packit |
ae235b |
40
|
|
Packit |
ae235b |
41
|
|
Packit |
ae235b |
42
|
|
Packit |
ae235b |
43
|
|
Packit |
ae235b |
44
|
|
Packit |
ae235b |
45
|
|
Packit |
ae235b |
error = NULL;
|
|
Packit |
ae235b |
res = dbus_g_proxy_call (system_bus_proxy,
|
|
Packit |
ae235b |
"RequestName",
|
|
Packit |
ae235b |
&error,
|
|
Packit |
ae235b |
G_TYPE_STRING, NAME_TO_CLAIM,
|
|
Packit |
ae235b |
G_TYPE_UINT, DBUS_NAME_FLAG_ALLOW_REPLACEMENT,
|
|
Packit |
ae235b |
G_TYPE_INVALID,
|
|
Packit |
ae235b |
G_TYPE_UINT, &result,
|
|
Packit |
ae235b |
G_TYPE_INVALID);
|
|
Packit |
ae235b |
if (!res)
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
if (error != NULL)
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
g_warning ("Failed to acquire %s: %s",
|
|
Packit |
ae235b |
NAME_TO_CLAIM, error->message);
|
|
Packit |
ae235b |
g_error_free (error);
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
else
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
goto out;
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
if (error != NULL)
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
g_warning ("Failed to acquire %s: %s",
|
|
Packit |
ae235b |
NAME_TO_CLAIM, error->message);
|
|
Packit |
ae235b |
g_error_free (error);
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
else
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
g_warning ("Failed to acquire %s", NAME_TO_CLAIM);
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
exit (1);
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
dbus_g_proxy_add_signal (system_bus_proxy, "NameLost",
|
|
Packit |
ae235b |
G_TYPE_STRING, G_TYPE_INVALID);
|
|
Packit |
ae235b |
dbus_g_proxy_connect_signal (system_bus_proxy, "NameLost",
|
|
Packit |
ae235b |
G_CALLBACK (on_name_lost), NULL, NULL);
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
While you can do things this way with GDBus too, using
|
|
Packit |
ae235b |
g_dbus_proxy_call_sync() , it is much nicer to use the high-level API
|
|
Packit |
ae235b |
for this:
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
1
|
|
Packit |
ae235b |
2
|
|
Packit |
ae235b |
3
|
|
Packit |
ae235b |
4
|
|
Packit |
ae235b |
5
|
|
Packit |
ae235b |
6
|
|
Packit |
ae235b |
7
|
|
Packit |
ae235b |
8
|
|
Packit |
ae235b |
9
|
|
Packit |
ae235b |
10
|
|
Packit |
ae235b |
11
|
|
Packit |
ae235b |
12
|
|
Packit |
ae235b |
13
|
|
Packit |
ae235b |
14
|
|
Packit |
ae235b |
15
|
|
Packit |
ae235b |
16
|
|
Packit |
ae235b |
17
|
|
Packit |
ae235b |
18
|
|
Packit |
ae235b |
19
|
|
Packit |
ae235b |
20
|
|
Packit |
ae235b |
21
|
|
Packit |
ae235b |
22
|
|
Packit |
ae235b |
static void
|
|
Packit |
ae235b |
on_name_acquired (GDBusConnection *connection,
|
|
Packit |
ae235b |
const gchar *name,
|
|
Packit |
ae235b |
gpointer user_data)
|
|
Packit |
ae235b |
{
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
}
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
owner_id = g_bus_own_name (G_BUS_TYPE_SYSTEM,
|
|
Packit |
ae235b |
NAME_TO_CLAIM,
|
|
Packit |
ae235b |
G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT,
|
|
Packit |
ae235b |
on_bus_acquired,
|
|
Packit |
ae235b |
on_name_acquired,
|
|
Packit |
ae235b |
on_name_lost,
|
|
Packit |
ae235b |
NULL,
|
|
Packit |
ae235b |
NULL);
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_main_loop_run (loop);
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
g_bus_unown_name (owner_id);
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Note that g_bus_own_name() works asynchronously and requires
|
|
Packit |
ae235b |
you to enter your mainloop to await the on_name_aquired()
|
|
Packit |
ae235b |
callback. Also note that in order to avoid race conditions (e.g.
|
|
Packit |
ae235b |
when your service is activated by a method call), you have to export
|
|
Packit |
ae235b |
your manager object before acquiring the
|
|
Packit |
ae235b |
name. The on_bus_acquired() callback is the right place to do
|
|
Packit |
ae235b |
such preparations.
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
|
|
Packit |
ae235b |
Generated by GTK-Doc V1.27
|
|
Packit |
ae235b |
</body>
|
|
Packit |
ae235b |
</html>
|