1:255.16-alt1
[systemd_ALT.git] / man / sd_bus_emit_signal.xml
blob7444e1249c6d2be8dc0ab9d069d7f23574086c8c
1 <?xml version='1.0'?> <!--*-nxml-*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4 <!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
6 <refentry id="sd_bus_emit_signal"
7           xmlns:xi="http://www.w3.org/2001/XInclude">
9   <refentryinfo>
10     <title>sd_bus_emit_signal</title>
11     <productname>systemd</productname>
12   </refentryinfo>
14   <refmeta>
15     <refentrytitle>sd_bus_emit_signal</refentrytitle>
16     <manvolnum>3</manvolnum>
17   </refmeta>
19   <refnamediv>
20     <refname>sd_bus_emit_signal</refname>
21     <refname>sd_bus_emit_signalv</refname>
22     <refname>sd_bus_emit_signal_to</refname>
23     <refname>sd_bus_emit_signal_tov</refname>
24     <refname>sd_bus_emit_interfaces_added</refname>
25     <refname>sd_bus_emit_interfaces_added_strv</refname>
26     <refname>sd_bus_emit_interfaces_removed</refname>
27     <refname>sd_bus_emit_interfaces_removed_strv</refname>
28     <refname>sd_bus_emit_properties_changed</refname>
29     <refname>sd_bus_emit_properties_changed_strv</refname>
30     <refname>sd_bus_emit_object_added</refname>
31     <refname>sd_bus_emit_object_removed</refname>
33     <refpurpose>Convenience functions for emitting (standard) D-Bus signals</refpurpose>
34   </refnamediv>
36   <refsynopsisdiv>
37     <funcsynopsis>
38       <funcsynopsisinfo>#include &lt;systemd/sd-bus-vtable.h&gt;</funcsynopsisinfo>
40       <funcprototype>
41         <funcdef>int <function>sd_bus_emit_signal</function></funcdef>
42         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
43         <paramdef>const char *<parameter>path</parameter></paramdef>
44         <paramdef>const char *<parameter>interface</parameter></paramdef>
45         <paramdef>const char *<parameter>member</parameter></paramdef>
46         <paramdef>const char *<parameter>types</parameter></paramdef>
47         <paramdef>...</paramdef>
48       </funcprototype>
50       <funcprototype>
51         <funcdef>int <function>sd_bus_emit_signalv</function></funcdef>
52         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
53         <paramdef>const char *<parameter>path</parameter></paramdef>
54         <paramdef>const char *<parameter>interface</parameter></paramdef>
55         <paramdef>const char *<parameter>member</parameter></paramdef>
56         <paramdef>const char *<parameter>types</parameter></paramdef>
57         <paramdef>va_list <parameter>ap</parameter></paramdef>
58       </funcprototype>
60       <funcprototype>
61         <funcdef>int <function>sd_bus_emit_signal_to</function></funcdef>
62         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
63         <paramdef>const char *<parameter>destination</parameter></paramdef>
64         <paramdef>const char *<parameter>path</parameter></paramdef>
65         <paramdef>const char *<parameter>interface</parameter></paramdef>
66         <paramdef>const char *<parameter>member</parameter></paramdef>
67         <paramdef>const char *<parameter>types</parameter></paramdef>
68         <paramdef>...</paramdef>
69       </funcprototype>
71       <funcprototype>
72         <funcdef>int <function>sd_bus_emit_signal_tov</function></funcdef>
73         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
74         <paramdef>const char *<parameter>destination</parameter></paramdef>
75         <paramdef>const char *<parameter>path</parameter></paramdef>
76         <paramdef>const char *<parameter>interface</parameter></paramdef>
77         <paramdef>const char *<parameter>member</parameter></paramdef>
78         <paramdef>const char *<parameter>types</parameter></paramdef>
79         <paramdef>va_list <parameter>ap</parameter></paramdef>
80       </funcprototype>
82       <funcprototype>
83         <funcdef>int <function>sd_bus_emit_interfaces_added</function></funcdef>
84         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
85         <paramdef>const char *<parameter>path</parameter></paramdef>
86         <paramdef>const char *<parameter>interface</parameter></paramdef>
87         <paramdef>...</paramdef>
88       </funcprototype>
90       <funcprototype>
91         <funcdef>int <function>sd_bus_emit_interfaces_added_strv</function></funcdef>
92         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
93         <paramdef>const char *<parameter>path</parameter></paramdef>
94         <paramdef>const char **<parameter>interfaces</parameter></paramdef>
95       </funcprototype>
97       <funcprototype>
98         <funcdef>int <function>sd_bus_emit_interfaces_removed</function></funcdef>
99         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
100         <paramdef>const char *<parameter>path</parameter></paramdef>
101         <paramdef>const char *<parameter>interface</parameter></paramdef>
102         <paramdef>...</paramdef>
103       </funcprototype>
105       <funcprototype>
106         <funcdef>int <function>sd_bus_emit_interfaces_removed_strv</function></funcdef>
107         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
108         <paramdef>const char *<parameter>path</parameter></paramdef>
109         <paramdef>const char **<parameter>interfaces</parameter></paramdef>
110       </funcprototype>
112       <funcprototype>
113         <funcdef>int <function>sd_bus_emit_properties_changed</function></funcdef>
114         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
115         <paramdef>const char *<parameter>path</parameter></paramdef>
116         <paramdef>const char *<parameter>interface</parameter></paramdef>
117         <paramdef>const char *<parameter>name</parameter></paramdef>
118         <paramdef>...</paramdef>
119       </funcprototype>
121       <funcprototype>
122         <funcdef>int <function>sd_bus_emit_properties_changed_strv</function></funcdef>
123         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
124         <paramdef>const char *<parameter>path</parameter></paramdef>
125         <paramdef>const char *<parameter>interface</parameter></paramdef>
126         <paramdef>const char **<parameter>names</parameter></paramdef>
127       </funcprototype>
129       <funcprototype>
130         <funcdef>int <function>sd_bus_emit_object_added</function></funcdef>
131         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
132         <paramdef>const char *<parameter>path</parameter></paramdef>
133       </funcprototype>
135       <funcprototype>
136         <funcdef>int <function>sd_bus_emit_object_removed</function></funcdef>
137         <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
138         <paramdef>const char *<parameter>path</parameter></paramdef>
139       </funcprototype>
140     </funcsynopsis>
141   </refsynopsisdiv>
143   <refsect1>
144     <title>Description</title>
146     <para><function>sd_bus_emit_signal()</function> is a convenience function for initializing a
147     bus message object and emitting the corresponding D-Bus signal. It combines the
148     <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
149     <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry> and
150     <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>
151     functions into a single function call. <function>sd_bus_emit_signalv()</function> is
152     equivalent to <function>sd_bus_message_append()</function>, except that it is called with a
153     <literal>va_list</literal> instead of a variable number of arguments.</para>
155     <para><function>sd_bus_emit_signal_to()</function> and <function>sd_bus_emit_signal_tov()</function> are
156     identical to <function>sd_bus_emit_signal()</function> and <function>sd_bus_emit_signalv()</function>, except
157     that they can emit the signal to a single destination. Give <parameter>destination</parameter> as
158     <constant>NULL</constant> to broadcast the signal.</para>
160     <para><function>sd_bus_emit_interfaces_added()</function> and
161     <function>sd_bus_emit_interfaces_removed()</function> are used to implement the
162     <function>InterfacesAdded</function> and <function>InterfacesRemoved</function> signals of the
163     <constant>org.freedesktop.DBus.ObjectManager</constant> interface. They take a path whose
164     interfaces have been modified as an argument and a variable list of interfaces that have been
165     added or removed, respectively. The final argument passed to
166     <function>sd_bus_emit_interfaces_added()</function> and
167     <function>sd_bus_emit_interfaces_removed()</function> <emphasis>must</emphasis> be
168     <constant>NULL</constant>. This allows both functions to safely determine the number of passed
169     interface arguments. <function>sd_bus_emit_interfaces_added_strv()</function> and
170     <function>sd_bus_emit_interfaces_removed_strv()</function> are identical to their respective
171     counterparts but both take the list of interfaces as a single argument instead of a variable
172     number of arguments.</para>
174     <para><function>sd_bus_emit_properties_changed()</function> is used to implement the
175     <function>PropertiesChanged</function> signal of the
176     <constant>org.freedesktop.DBus.Properties</constant> interface. It takes an object path,
177     interface and a variable list of property names as its arguments.  The final argument passed to
178     <function>sd_bus_emit_properties_changed()</function> <emphasis>must</emphasis> be
179     <constant>NULL</constant>. This allows it to safely determine the number of passed property
180     names. <function>sd_bus_emit_properties_changed_strv()</function> is identical to
181     <function>sd_bus_emit_properties_changed()</function> but takes the list of property names as a
182     single argument instead of a variable number of arguments.</para>
184     <para><function>sd_bus_emit_object_added()</function> and
185     <function>sd_bus_emit_object_removed()</function> are convenience functions for emitting the
186     <function>InterfacesAdded</function> or <function>InterfacesRemoved</function> signals for all
187     interfaces registered on a specific object path, respectively. This includes any parent fallback
188     vtables if they are not overridden by a more applicable child vtable. It also includes all the
189     standard D-Bus interfaces implemented by sd-bus itself on any registered object.</para>
191     <para>Note that <function>sd_bus_emit_interfaces_added()</function>,
192     <function>sd_bus_emit_interfaces_removed()</function>,
193     <function>sd_bus_emit_object_added()</function> and
194     <function>sd_bus_emit_object_removed()</function> require an object manager to have been
195     registered on the given object path or one of its parent object paths using
196     <citerefentry><refentrytitle>sd_bus_add_object_manager</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
197     </para>
198   </refsect1>
200   <refsect1>
201     <title>Return Value</title>
203     <para>On success, these functions return a non-negative integer. On failure, they return a
204     negative errno-style error code.</para>
206     <refsect2>
207       <title>Errors</title>
209       <para>Returned errors may indicate the following problems:</para>
211       <variablelist>
212         <varlistentry>
213           <term><constant>-EINVAL</constant></term>
215           <listitem><para>One of the required parameters is <constant>NULL</constant> or invalid. A
216           reserved D-Bus interface was passed as the <replaceable>interface</replaceable> parameter.
217           </para>
219           <xi:include href="version-info.xml" xpointer="v246"/></listitem>
220         </varlistentry>
222         <varlistentry>
223           <term><constant>-ENOPKG</constant></term>
225           <listitem><para>The bus cannot be resolved.</para>
227           <xi:include href="version-info.xml" xpointer="v246"/></listitem>
228         </varlistentry>
230         <varlistentry>
231           <term><constant>-ECHILD</constant></term>
233           <listitem><para>The bus was created in a different process, library or module instance.</para>
235           <xi:include href="version-info.xml" xpointer="v246"/></listitem>
236         </varlistentry>
238         <varlistentry>
239           <term><constant>-ENOMEM</constant></term>
241           <listitem><para>Memory allocation failed.</para>
243           <xi:include href="version-info.xml" xpointer="v246"/></listitem>
244         </varlistentry>
246         <varlistentry>
247           <term><constant>-ESRCH</constant></term>
249           <listitem><para>One of <function>sd_bus_emit_interfaces_added()</function>,
250           <function>sd_bus_emit_interfaces_removed()</function>,
251           <function>sd_bus_emit_object_added()</function> or
252           <function>sd_bus_emit_object_removed()</function> was called on an object without an
253           object manager registered on its own object path or one of its parent object paths.
254           </para>
256           <xi:include href="version-info.xml" xpointer="v246"/></listitem>
257         </varlistentry>
258       </variablelist>
260       <para>See the man pages of
261       <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
262       <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry> and
263       <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>
264       for more possible errors.</para>
265     </refsect2>
266   </refsect1>
268   <xi:include href="libsystemd-pkgconfig.xml" />
270   <refsect1>
271     <title>History</title>
272     <para><function>sd_bus_emit_signal()</function>,
273     <function>sd_bus_emit_signalv()</function>,
274     <function>sd_bus_emit_interfaces_added()</function>,
275     <function>sd_bus_emit_interfaces_added_strv()</function>,
276     <function>sd_bus_emit_interfaces_removed()</function>,
277     <function>sd_bus_emit_interfaces_removed_strv()</function>,
278     <function>sd_bus_emit_properties_changed()</function>,
279     <function>sd_bus_emit_properties_changed_strv()</function>,
280     <function>sd_bus_emit_object_added()</function>, and
281     <function>sd_bus_emit_object_removed()</function> were added in version 246.</para>
282     <para><function>sd_bus_emit_signal_to()</function> and
283     <function>sd_bus_emit_signal_tov()</function> were added in version 253.</para>
284   </refsect1>
286   <refsect1>
287     <title>See Also</title>
289     <para>
290       <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
291       <citerefentry><refentrytitle>busctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
292       <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
293       <citerefentry><refentrytitle>sd_bus_message_append</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
294       <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
295       <citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry>
296     </para>
297   </refsect1>
298 </refentry>