<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_bus_message_set_expect_reply" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_bus_message_set_expect_reply</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_bus_message_set_expect_reply</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_bus_message_set_expect_reply</refname>
    <refname>sd_bus_message_get_expect_reply</refname>
    <refname>sd_bus_message_set_auto_start</refname>
    <refname>sd_bus_message_get_auto_start</refname>
    <refname>sd_bus_message_set_allow_interactive_authorization</refname>
    <refname>sd_bus_message_get_allow_interactive_authorization</refname>

    <refpurpose>Set and query bus message metadata</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_set_expect_reply</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
        <paramdef>int <parameter>b</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_get_expect_reply</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_set_auto_start</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
        <paramdef>int <parameter>b</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_get_auto_start</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_set_allow_interactive_authorization</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
        <paramdef>int <parameter>b</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_get_allow_interactive_authorization</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_bus_message_set_expect_reply()</function> sets or clears the
    <constant>NO_REPLY_EXPECTED</constant> flag on the message <parameter>m</parameter>. This flag matters
    only for method call messages and is used to specify that no method return or error reply is expected.
    It is ignored for other types. Thus, for a method call message, calling
    <programlisting>sd_bus_message_set_expect_reply(…, 0)</programlisting> sets the flag and suppresses the
    reply.</para>

    <para><function>sd_bus_message_get_expect_reply()</function> checks if the
    <constant>NO_REPLY_EXPECTED</constant> flag is set on the message <parameter>m</parameter>. It will
    return positive if it is not set, and zero if it is.</para>

    <para><function>sd_bus_message_set_auto_start()</function> sets or clears the
    <constant>NO_AUTO_START</constant> flag on the message <parameter>m</parameter>. When the flag is set,
    the bus must not launch an owner for the destination name in response to this message. Calling
    <programlisting>sd_bus_message_set_auto_start(…, 0)</programlisting> sets the flag.</para>

    <para><function>sd_bus_message_get_auto_start()</function> checks if the
    <constant>NO_AUTO_START</constant> flag is set on the message <parameter>m</parameter>. It will return
    positive if it is not set, and zero if it is.</para>

    <para><function>sd_bus_message_set_allow_interactive_authorization()</function> sets or clears the
    <constant>ALLOW_INTERACTIVE_AUTHORIZATION</constant> flag on the message <parameter>m</parameter>.
    Setting this flag informs the receiver that the caller is prepared to wait for interactive authorization
    via polkit or a similar framework. Note that setting this flag does not guarantee that the receiver will
    actually perform interactive authorization. Also, make sure to set a suitable message timeout when using
    this flag since interactive authorization could potentially take a long time as it depends on user input.
    If <parameter>b</parameter> is non-zero, the flag is set.</para>

    <para><function>sd_bus_message_get_allow_interactive_authorization()</function> checks if the
    <constant>ALLOW_INTERACTIVE_AUTHORIZATION</constant> flag is set on the message <parameter>m</parameter>.
    It will return a positive integer if the flag is set. Otherwise, it returns zero.</para>
  </refsect1>

  <refsect1>
    <title>Return Value</title>

    <para>On success, these functions return a non-negative integer. On failure, they return a negative
    errno-style error code.</para>

    <refsect2>
      <title>Errors</title>

      <para>Returned errors may indicate the following problems:</para>

      <variablelist>
        <varlistentry>
          <term><constant>-EINVAL</constant></term>

          <listitem><para>The <parameter>message</parameter> parameter is <constant>NULL</constant>.
          </para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-EPERM</constant></term>

          <listitem>
          <para>The message <parameter>message</parameter> is sealed when trying to set a flag.</para>

          <para>The message <parameter>message</parameter> has wrong type.</para>
          </listitem>
        </varlistentry>
      </variablelist>
    </refsect2>
  </refsect1>

  <xi:include href="libsystemd-pkgconfig.xml" />

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_bus_set_description</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>
</refentry>
