mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-10-27 18:55:09 +03:00
Merge pull request #14645 from keszybz/sd-bus-message-dump
sd_bus_message_dump
This commit is contained in:
commit
d58f31793a
@ -233,6 +233,7 @@ manpages = [
|
||||
''],
|
||||
['sd_bus_message_append_strv', '3', [], ''],
|
||||
['sd_bus_message_copy', '3', [], ''],
|
||||
['sd_bus_message_dump', '3', [], ''],
|
||||
['sd_bus_message_get_cookie', '3', ['sd_bus_message_get_reply_cookie'], ''],
|
||||
['sd_bus_message_get_monotonic_usec',
|
||||
'3',
|
||||
|
@ -58,6 +58,7 @@
|
||||
<citerefentry><refentrytitle>sd_bus_message_append_string_memfd</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_append_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_copy</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_dump</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_get_cookie</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
<citerefentry><refentrytitle>sd_bus_message_get_signature</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
||||
|
107
man/sd_bus_message_dump.xml
Normal file
107
man/sd_bus_message_dump.xml
Normal file
@ -0,0 +1,107 @@
|
||||
<?xml version='1.0'?>
|
||||
<!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+ -->
|
||||
|
||||
<refentry id="sd_bus_message_dump"
|
||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
||||
|
||||
<refentryinfo>
|
||||
<title>sd_bus_message_dump</title>
|
||||
<productname>systemd</productname>
|
||||
</refentryinfo>
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>sd_bus_message_dump</refentrytitle>
|
||||
<manvolnum>3</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>sd_bus_message_dump</refname>
|
||||
|
||||
<refpurpose>Produce a string representation of a message for debugging purposes</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<funcsynopsis>
|
||||
<funcsynopsisinfo>#include <systemd/sd-bus.h></funcsynopsisinfo>
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int sd_bus_message_dump</funcdef>
|
||||
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
|
||||
<paramdef>FILE *<parameter>f</parameter></paramdef>
|
||||
<paramdef>uint64_t <parameter>flags</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
|
||||
<para>
|
||||
<constant>SD_BUS_MESSAGE_DUMP_WITH_HEADER</constant>,
|
||||
<constant>SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY</constant>
|
||||
</para>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para>The <function>sd_bus_message_dump()</function> function writes a textual representation of the
|
||||
message <parameter>m</parameter> to the stream <parameter>f</parameter>. This function is intended to be
|
||||
used for debugging purposes, and the output is neither stable nor designed to be machine readable.
|
||||
</para>
|
||||
|
||||
<para>The <parameter>flags</parameter> parameter may be used to modify the output. With
|
||||
<constant>SD_BUS_MESSAGE_DUMP_WITH_HEADER</constant>, a header that specifies the message type and flags
|
||||
and some additional metadata is printed. When <constant>SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY</constant> is
|
||||
not passed, the contents of the whole message are printed. When it <emphasis>is</emphasis> passed,
|
||||
only the current container in printed.</para>
|
||||
|
||||
<para>Note that this function moves the read pointer of the message. It may be necessary to reset the
|
||||
position afterwards, for example with
|
||||
<citerefentry><refentrytitle>sd_bus_message_rewind</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Examples</title>
|
||||
|
||||
<para>Output for a signal message (with <constant>SD_BUS_MESSAGE_DUMP_WITH_HEADER</constant>):
|
||||
<programlisting>
|
||||
‣ Type=signal Endian=l Flags=1 Version=1 Priority=0 Cookie=22
|
||||
Path=/value/a Interface=org.freedesktop.DBus.Properties Member=PropertiesChanged
|
||||
MESSAGE "sa{sv}as" {
|
||||
STRING "org.freedesktop.systemd.ValueTest";
|
||||
ARRAY "{sv}" {
|
||||
DICT_ENTRY "sv" {
|
||||
STRING "Value";
|
||||
VARIANT "s" {
|
||||
STRING "object 0x1e, path /value/a";
|
||||
};
|
||||
};
|
||||
};
|
||||
ARRAY "s" {
|
||||
STRING "Value2";
|
||||
STRING "AnExplicitProperty";
|
||||
};
|
||||
};
|
||||
</programlisting>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>On success, this function returns 0 or a positive integer. On failure, it returns a negative
|
||||
errno-style error code. No error codes are currently defined.</para>
|
||||
</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>
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
@ -1158,7 +1158,7 @@ static int introspect(int argc, char **argv, void *userdata) {
|
||||
}
|
||||
|
||||
static int message_dump(sd_bus_message *m, FILE *f) {
|
||||
return bus_message_dump(m, f, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
return sd_bus_message_dump(m, f, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
}
|
||||
|
||||
static int message_pcap(sd_bus_message *m, FILE *f) {
|
||||
@ -2052,7 +2052,7 @@ static int call(int argc, char **argv, void *userdata) {
|
||||
} else if (arg_verbose) {
|
||||
(void) pager_open(arg_pager_flags);
|
||||
|
||||
r = bus_message_dump(reply, stdout, 0);
|
||||
r = sd_bus_message_dump(reply, stdout, 0);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else {
|
||||
@ -2158,7 +2158,7 @@ static int get_property(int argc, char **argv, void *userdata) {
|
||||
} else if (arg_verbose) {
|
||||
(void) pager_open(arg_pager_flags);
|
||||
|
||||
r = bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_SUBTREE_ONLY);
|
||||
r = sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY);
|
||||
if (r < 0)
|
||||
return r;
|
||||
} else {
|
||||
|
@ -36,7 +36,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
|
||||
if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0)
|
||||
assert_se(g = open_memstream_unlocked(&out, &out_size));
|
||||
|
||||
bus_message_dump(m, g ?: stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(m, g ?: stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
r = sd_bus_message_rewind(m, true);
|
||||
assert_se(r >= 0);
|
||||
|
@ -685,6 +685,7 @@ global:
|
||||
|
||||
LIBSYSTEMD_245 {
|
||||
global:
|
||||
sd_bus_message_dump;
|
||||
sd_bus_message_sensitive;
|
||||
sd_event_add_child_pidfd;
|
||||
sd_event_source_get_child_pidfd;
|
||||
|
@ -18,23 +18,23 @@
|
||||
#include "terminal-util.h"
|
||||
#include "util.h"
|
||||
|
||||
static char *indent(unsigned level, unsigned flags) {
|
||||
static char *indent(unsigned level, uint64_t flags) {
|
||||
char *p;
|
||||
unsigned n, i = 0;
|
||||
|
||||
n = 0;
|
||||
|
||||
if (flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY && level > 0)
|
||||
if (flags & SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY && level > 0)
|
||||
level -= 1;
|
||||
|
||||
if (flags & BUS_MESSAGE_DUMP_WITH_HEADER)
|
||||
if (flags & SD_BUS_MESSAGE_DUMP_WITH_HEADER)
|
||||
n += 2;
|
||||
|
||||
p = new(char, n + level*8 + 1);
|
||||
if (!p)
|
||||
return NULL;
|
||||
|
||||
if (flags & BUS_MESSAGE_DUMP_WITH_HEADER) {
|
||||
if (flags & SD_BUS_MESSAGE_DUMP_WITH_HEADER) {
|
||||
p[i++] = ' ';
|
||||
p[i++] = ' ';
|
||||
}
|
||||
@ -45,7 +45,7 @@ static char *indent(unsigned level, unsigned flags) {
|
||||
return p;
|
||||
}
|
||||
|
||||
int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags) {
|
||||
_public_ int sd_bus_message_dump(sd_bus_message *m, FILE *f, uint64_t flags) {
|
||||
unsigned level = 1;
|
||||
int r;
|
||||
|
||||
@ -54,7 +54,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags) {
|
||||
if (!f)
|
||||
f = stdout;
|
||||
|
||||
if (flags & BUS_MESSAGE_DUMP_WITH_HEADER) {
|
||||
if (flags & SD_BUS_MESSAGE_DUMP_WITH_HEADER) {
|
||||
fprintf(f,
|
||||
"%s%s%s Type=%s%s%s Endian=%c Flags=%u Version=%u Priority=%"PRIi64,
|
||||
m->header->type == SD_BUS_MESSAGE_METHOD_ERROR ? ansi_highlight_red() :
|
||||
@ -118,11 +118,11 @@ int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags) {
|
||||
bus_creds_dump(&m->creds, f, true);
|
||||
}
|
||||
|
||||
r = sd_bus_message_rewind(m, !(flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY));
|
||||
r = sd_bus_message_rewind(m, !(flags & SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY));
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to rewind: %m");
|
||||
|
||||
if (!(flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY)) {
|
||||
if (!(flags & SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY)) {
|
||||
_cleanup_free_ char *prefix = NULL;
|
||||
|
||||
prefix = indent(0, flags);
|
||||
@ -259,7 +259,7 @@ int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!(flags & BUS_MESSAGE_DUMP_SUBTREE_ONLY)) {
|
||||
if (!(flags & SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY)) {
|
||||
_cleanup_free_ char *prefix = NULL;
|
||||
|
||||
prefix = indent(0, flags);
|
||||
|
@ -6,13 +6,6 @@
|
||||
|
||||
#include "sd-bus.h"
|
||||
|
||||
enum {
|
||||
BUS_MESSAGE_DUMP_WITH_HEADER = 1 << 0,
|
||||
BUS_MESSAGE_DUMP_SUBTREE_ONLY = 1 << 1,
|
||||
};
|
||||
|
||||
int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags);
|
||||
|
||||
int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse);
|
||||
|
||||
int bus_pcap_header(size_t snaplen, FILE *f);
|
||||
|
@ -145,7 +145,7 @@ static int server(sd_bus *bus) {
|
||||
strna(sd_bus_message_get_member(m)),
|
||||
pid,
|
||||
strna(label));
|
||||
/* bus_message_dump(m); */
|
||||
/* sd_bus_message_dump(m); */
|
||||
/* sd_bus_message_rewind(m, true); */
|
||||
|
||||
if (sd_bus_message_is_method_call(m, "org.freedesktop.systemd.test", "LowerCase")) {
|
||||
|
@ -175,7 +175,7 @@ static int test_marshal(void) {
|
||||
}
|
||||
#endif
|
||||
|
||||
assert_se(bus_message_dump(m, NULL, BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
assert_se(sd_bus_message_dump(m, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
|
||||
assert_se(bus_message_get_blob(m, &blob, &sz) >= 0);
|
||||
|
||||
@ -196,7 +196,7 @@ static int test_marshal(void) {
|
||||
assert_se(bus_message_from_malloc(bus, blob, sz, NULL, 0, NULL, &n) >= 0);
|
||||
blob = NULL;
|
||||
|
||||
assert_se(bus_message_dump(n, NULL, BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
assert_se(sd_bus_message_dump(n, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
|
||||
m = sd_bus_message_unref(m);
|
||||
|
||||
@ -205,7 +205,7 @@ static int test_marshal(void) {
|
||||
assert_se(sd_bus_message_append(m, "as", 0) >= 0);
|
||||
|
||||
assert_se(sd_bus_message_seal(m, 4712, 0) >= 0);
|
||||
assert_se(bus_message_dump(m, NULL, BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
assert_se(sd_bus_message_dump(m, NULL, SD_BUS_MESSAGE_DUMP_WITH_HEADER) >= 0);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
@ -188,10 +188,10 @@ int main(int argc, char *argv[]) {
|
||||
r = sd_bus_message_seal(m, 4711, 0);
|
||||
assert_se(r >= 0);
|
||||
|
||||
bus_message_dump(m, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(m, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
ms = open_memstream_unlocked(&first, &first_size);
|
||||
bus_message_dump(m, ms, 0);
|
||||
sd_bus_message_dump(m, ms, 0);
|
||||
fflush(ms);
|
||||
assert_se(!ferror(ms));
|
||||
|
||||
@ -244,11 +244,11 @@ int main(int argc, char *argv[]) {
|
||||
r = bus_message_from_malloc(bus, buffer, sz, NULL, 0, NULL, &m);
|
||||
assert_se(r >= 0);
|
||||
|
||||
bus_message_dump(m, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(m, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
fclose(ms);
|
||||
ms = open_memstream_unlocked(&second, &second_size);
|
||||
bus_message_dump(m, ms, 0);
|
||||
sd_bus_message_dump(m, ms, 0);
|
||||
fflush(ms);
|
||||
assert_se(!ferror(ms));
|
||||
assert_se(first_size == second_size);
|
||||
@ -354,7 +354,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
fclose(ms);
|
||||
ms = open_memstream_unlocked(&third, &third_size);
|
||||
bus_message_dump(copy, ms, 0);
|
||||
sd_bus_message_dump(copy, ms, 0);
|
||||
fflush(ms);
|
||||
assert_se(!ferror(ms));
|
||||
|
||||
|
@ -399,7 +399,7 @@ static int client(struct context *c) {
|
||||
r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/foo", "org.freedesktop.DBus.Properties", "GetAll", &error, &reply, "s", "");
|
||||
assert_se(r >= 0);
|
||||
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -417,7 +417,7 @@ static int client(struct context *c) {
|
||||
r = sd_bus_call_method(bus, "org.freedesktop.systemd.test", "/value", "org.freedesktop.DBus.ObjectManager", "GetManagedObjects", &error, &reply, "");
|
||||
assert_se(r >= 0);
|
||||
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -429,7 +429,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.Properties", "PropertiesChanged"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -441,7 +441,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.Properties", "PropertiesChanged"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -453,7 +453,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -465,7 +465,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesRemoved"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -477,7 +477,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesAdded"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
@ -489,7 +489,7 @@ static int client(struct context *c) {
|
||||
assert_se(r > 0);
|
||||
|
||||
assert_se(sd_bus_message_is_signal(reply, "org.freedesktop.DBus.ObjectManager", "InterfacesRemoved"));
|
||||
bus_message_dump(reply, stdout, BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
sd_bus_message_dump(reply, stdout, SD_BUS_MESSAGE_DUMP_WITH_HEADER);
|
||||
|
||||
sd_bus_message_unref(reply);
|
||||
reply = NULL;
|
||||
|
@ -19,6 +19,7 @@
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/uio.h>
|
||||
|
||||
@ -105,6 +106,11 @@ enum {
|
||||
SD_BUS_NAME_QUEUE = 1ULL << 2
|
||||
};
|
||||
|
||||
enum {
|
||||
SD_BUS_MESSAGE_DUMP_WITH_HEADER = 1ULL << 0,
|
||||
SD_BUS_MESSAGE_DUMP_SUBTREE_ONLY = 1ULL << 1,
|
||||
};
|
||||
|
||||
/* Callbacks */
|
||||
|
||||
typedef int (*sd_bus_message_handler_t)(sd_bus_message *m, void *userdata, sd_bus_error *ret_error);
|
||||
@ -330,6 +336,8 @@ int sd_bus_message_at_end(sd_bus_message *m, int complete);
|
||||
int sd_bus_message_rewind(sd_bus_message *m, int complete);
|
||||
int sd_bus_message_sensitive(sd_bus_message *m);
|
||||
|
||||
int sd_bus_message_dump(sd_bus_message *m, FILE *f, uint64_t flags);
|
||||
|
||||
/* Bus management */
|
||||
|
||||
int sd_bus_get_unique_name(sd_bus *bus, const char **unique);
|
||||
|
Loading…
Reference in New Issue
Block a user