chiark / gitweb /
tree-wide: remove Lennart's copyright lines
[elogind.git] / man / sd_bus_request_name.xml
1 <?xml version='1.0'?> <!--*-nxml-*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6   SPDX-License-Identifier: LGPL-2.1+
7 -->
8
9 <refentry id="sd_bus_request_name">
10
11   <refentryinfo>
12     <title>sd_bus_request_name</title>
13     <productname>systemd</productname>
14
15     <authorgroup>
16       <author>
17         <contrib>Developer</contrib>
18         <firstname>Lennart</firstname>
19         <surname>Poettering</surname>
20         <email>lennart@poettering.net</email>
21       </author>
22     </authorgroup>
23   </refentryinfo>
24
25   <refmeta>
26     <refentrytitle>sd_bus_request_name</refentrytitle>
27     <manvolnum>3</manvolnum>
28   </refmeta>
29
30   <refnamediv>
31     <refname>sd_bus_request_name</refname>
32     <refname>sd_bus_request_name_async</refname>
33     <refname>sd_bus_release_name</refname>
34     <refname>sd_bus_release_name_async</refname>
35     <refpurpose>Request or release a well-known service name on a bus</refpurpose>
36   </refnamediv>
37
38   <refsynopsisdiv>
39     <funcsynopsis>
40       <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
41
42       <funcprototype>
43         <funcdef>int <function>sd_bus_request_name</function></funcdef>
44         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
45         <paramdef>const char *<parameter>name</parameter></paramdef>
46         <paramdef>uint64_t <parameter>flags</parameter></paramdef>
47       </funcprototype>
48
49       <funcprototype>
50         <funcdef>int <function>sd_bus_request_name_async</function></funcdef>
51         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
52         <paramdef>sd_bus_slot **<parameter>slot</parameter></paramdef>
53         <paramdef>const char *<parameter>name</parameter></paramdef>
54         <paramdef>uint64_t <parameter>flags</parameter></paramdef>
55         <paramdef>sd_bus_message_handler_t <parameter>callback</parameter></paramdef>
56         <paramdef>void *<parameter>userdata</parameter></paramdef>
57       </funcprototype>
58
59       <funcprototype>
60         <funcdef>int <function>sd_bus_release_name</function></funcdef>
61         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
62         <paramdef>const char *<parameter>name</parameter></paramdef>
63       </funcprototype>
64
65       <funcprototype>
66         <funcdef>int <function>sd_bus_release_name_async</function></funcdef>
67         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
68         <paramdef>sd_bus_slot **<parameter>slot</parameter></paramdef>
69         <paramdef>const char *<parameter>name</parameter></paramdef>
70         <paramdef>sd_bus_message_handler_t <parameter>callback</parameter></paramdef>
71         <paramdef>void *<parameter>userdata</parameter></paramdef>
72       </funcprototype>
73     </funcsynopsis>
74   </refsynopsisdiv>
75
76   <refsect1>
77     <title>Description</title>
78
79     <para><function>sd_bus_request_name()</function> requests a well-known service name on a bus. It takes a bus
80     connection, a valid bus name and a flags parameter. The flags parameter is a combination of the following
81     flags:</para>
82
83     <variablelist>
84       <varlistentry>
85         <term><varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname></term>
86
87         <listitem><para>After acquiring the name successfully, permit other peers to take over the name when they try
88         to acquire it with the <varname>SD_BUS_NAME_REPLACE_EXISTING</varname> flag set. If
89         <varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname> is not set on the original request, such a request by other
90         peers will be denied.</para></listitem>
91       </varlistentry>
92
93       <varlistentry>
94         <term><varname>SD_BUS_NAME_REPLACE_EXISTING</varname></term>
95
96         <listitem><para>Take over the name if it is already acquired by another peer, and that other peer has permitted
97         takeover by setting <varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname> while acquiring it.</para></listitem>
98       </varlistentry>
99
100       <varlistentry>
101         <term><varname>SD_BUS_NAME_QUEUE</varname></term>
102
103         <listitem><para>Queue the acquisition of the name when the name is already taken.</para></listitem>
104       </varlistentry>
105     </variablelist>
106
107     <para><function>sd_bus_request_name()</function> operates in a synchronous fashion: a message requesting the name
108     is sent to the bus broker, and the call waits until the broker responds.</para>
109
110     <para><function>sd_bus_request_name_async()</function> is an asynchronous version of
111     <function>sd_bus_release_name()</function>. Instead of waiting for the request to complete, the request message is
112     enqueued. The specified <parameter>callback</parameter> will be called when the broker's response is received. If
113     the parameter is specified as <constant>NULL</constant> a default implementation is used instead which will
114     terminate the connection when the name cannot be acquired. The function returns a slot object in its
115     <parameter>slot</parameter> parameter — if it is passed as non-<constant>NULL</constant> — which may be used as a
116     reference to the name request operation. Use
117     <citerefentry><refentrytitle>sd_bus_slot_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry> to destroy
118     this reference. Note that destroying the reference will not unregister the name, but simply ensure the specified
119     callback is no longer called.</para>
120
121     <para><function>sd_bus_release_name()</function> releases an acquired well-known name. It takes a bus connection
122     and a valid bus name as parameters. This function operates synchronously, sending a release request message to the
123     bus broker and waiting for it to reply.</para>
124
125     <para><function>sd_bus_release_name_async()</function> is an asynchronous version of
126     <function>sd_bus_release_name()</function>. The specified <parameter>callback</parameter> function is called when
127     the name has been released successfully. If specified as <constant>NULL</constant> a generic implementation is used
128     that ignores the result of the operation. As above, the <parameter>slot</parameter> (if
129     non-<constant>NULL</constant>) is set to an object that may be used to reference the operation.</para>
130
131     <para>These functions are supported only on bus connections, i.e. connections to a bus broker and not on direct
132     connections.</para>
133   </refsect1>
134
135   <refsect1>
136     <title>Return Value</title>
137
138     <para>On success, these calls return 0 or a positive integer. On failure, these calls return a negative errno-style
139     error code.</para>
140
141     <para>If <varname>SD_BUS_NAME_QUEUE</varname> is specified, <function>sd_bus_request_name()</function> will return
142     0 when the name is already taken by another peer and the client has been added to the queue for the name. In that
143     case, the caller can subscribe to <literal>NameOwnerChanged</literal> signals to be notified when the name is
144     successfully acquired.  <function>sd_bus_request_name()</function> returns &gt; 0 when the name has immediately
145     been acquired successfully.</para>
146   </refsect1>
147
148   <refsect1>
149     <title>Errors</title>
150
151     <para>Returned errors may indicate the following problems:</para>
152
153     <variablelist>
154       <varlistentry>
155         <term><constant>-EALREADY</constant></term>
156
157         <listitem><para>The caller already is the owner of the specified name.</para></listitem>
158       </varlistentry>
159
160       <varlistentry>
161         <term><constant>-EEXIST</constant></term>
162
163         <listitem><para>The name has already been acquired by a different peer, and SD_BUS_NAME_REPLACE_EXISTING was
164         not specified or the other peer did not specify SD_BUS_NAME_ALLOW_REPLACEMENT while acquiring the
165         name.</para></listitem>
166       </varlistentry>
167
168       <varlistentry>
169         <term><constant>-ESRCH</constant></term>
170
171         <listitem><para>It was attempted to release a name that is currently not registered on the
172         bus.</para></listitem>
173       </varlistentry>
174
175       <varlistentry>
176         <term><constant>-EADDRINUSE</constant></term>
177
178         <listitem><para>It was attempted to release a name that is owned by a different peer on the
179         bus.</para></listitem>
180       </varlistentry>
181
182       <varlistentry>
183         <term><constant>-EINVAL</constant></term>
184
185         <listitem><para>A specified parameter is invalid. This is also generated when the requested name is a special
186         service name reserved by the D-Bus specification, or when the operation is requested on a connection that does
187         not refer to a bus.</para></listitem>
188       </varlistentry>
189
190       <varlistentry>
191         <term><constant>-ENOTCONN</constant></term>
192
193         <listitem><para>The bus connection has been disconnected.</para></listitem>
194       </varlistentry>
195
196       <varlistentry>
197         <term><constant>-ECHILD</constant></term>
198
199         <listitem><para>The bus connection has been created in a different process than the current
200         one.</para></listitem>
201       </varlistentry>
202     </variablelist>
203   </refsect1>
204
205   <refsect1>
206     <title>Notes</title>
207
208     <para>The <function>sd_bus_acquire_name()</function> and the other interfaces described here are available as a
209     shared library, which can be compiled and linked to with the <constant>libelogind</constant> <citerefentry
210     project='die-net'><refentrytitle>pkg-config</refentrytitle><manvolnum>1</manvolnum></citerefentry> file.</para>
211   </refsect1>
212
213   <refsect1>
214     <title>See Also</title>
215
216     <para>
217       <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
218       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
219       <citerefentry><refentrytitle>sd_bus_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
220       <citerefentry><refentrytitle>sd_bus_slot_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>
221     </para>
222   </refsect1>
223
224 </refentry>