<?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_get_cookie"
          xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_bus_message_get_cookie</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_bus_message_get_cookie</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_bus_message_get_cookie</refname>
    <refname>sd_bus_message_get_reply_cookie</refname>
    <refpurpose>Returns the transaction cookie of a message</refpurpose>
  </refnamediv>

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

      <funcprototype>
        <funcdef>int <function>sd_bus_message_get_cookie</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
        <paramdef>uint64_t *<parameter>cookie</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_bus_message_get_reply_cookie</function></funcdef>
        <paramdef>sd_bus_message *<parameter>message</parameter></paramdef>
        <paramdef>uint64_t *<parameter>cookie</parameter></paramdef>
      </funcprototype>
    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_bus_message_get_cookie()</function> returns the
    transaction cookie of a message. The cookie uniquely identifies a
    message within each bus peer, but is not globally unique. It is
    assigned when a message is sent.</para>

    <para><function>sd_bus_message_get_reply_cookie()</function>
    returns the transaction cookie of the message the specified
    message is a response to. When a reply message is generated for a
    method call message, its cookie is copied over into this field.
    Note that while every message that is transferred is identified by
    a cookie, only response messages carry a reply cookie
    field.</para>

    <para>Both functions take a message object as first parameter and
    a place to store the 64-bit cookie in.</para>
  </refsect1>

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

    <para>On success, these calls return 0 or a positive integer. On failure, they return a negative
    errno-style error code.</para>

    <para>On success, the cookie/reply cookie is returned in the specified 64-bit unsigned integer
    variable.</para>

    <refsect2>
      <title>Errors</title>

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

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

          <listitem><para>A specified parameter is invalid.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-ENODATA</constant></term>

          <listitem><para>No cookie has been assigned to this message.  This either indicates that the
          message has not been sent yet and hence has no cookie assigned, or that the message is not a method
          response message and hence carries a reply cookie field.</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_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
