D-Bus 1.10.18

dbus-marshal-header.h
1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 /* dbus-marshal-header.h Managing marshaling/demarshaling of message headers
3 *
4 * Copyright (C) 2005 Red Hat, Inc.
5 *
6 * Licensed under the Academic Free License version 2.1
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 *
22 */
23
24 #ifndef DBUS_MARSHAL_HEADER_H
25 #define DBUS_MARSHAL_HEADER_H
26
27 #include <dbus/dbus-marshal-basic.h>
28 #include <dbus/dbus-marshal-validate.h>
29
30 typedef struct DBusHeader DBusHeader;
31 typedef struct DBusHeaderField DBusHeaderField;
32
33 #define _DBUS_HEADER_FIELD_VALUE_UNKNOWN -1
34 #define _DBUS_HEADER_FIELD_VALUE_NONEXISTENT -2
35
39 struct DBusHeaderField
40 {
41 int value_pos;
42 };
43
47 struct DBusHeader
48 {
49 DBusString data;
54 DBusHeaderField fields[DBUS_HEADER_FIELD_LAST + 1];
58 dbus_uint32_t padding : 3;
59 dbus_uint32_t byte_order : 8;
60 };
61
62 dbus_bool_t _dbus_header_init (DBusHeader *header);
63 void _dbus_header_free (DBusHeader *header);
64 void _dbus_header_reinit (DBusHeader *header);
65 dbus_bool_t _dbus_header_create (DBusHeader *header,
66 int byte_order,
67 int type,
68 const char *destination,
69 const char *path,
70 const char *interface,
71 const char *member,
72 const char *error_name);
73 dbus_bool_t _dbus_header_copy (const DBusHeader *header,
74 DBusHeader *dest);
75 int _dbus_header_get_message_type (DBusHeader *header);
76 void _dbus_header_set_serial (DBusHeader *header,
77 dbus_uint32_t serial);
78 dbus_uint32_t _dbus_header_get_serial (DBusHeader *header);
79 void _dbus_header_update_lengths (DBusHeader *header,
80 int body_len);
81 DBUS_PRIVATE_EXPORT
82 dbus_bool_t _dbus_header_set_field_basic (DBusHeader *header,
83 int field,
84 int type,
85 const void *value);
86 dbus_bool_t _dbus_header_get_field_basic (DBusHeader *header,
87 int field,
88 int type,
89 void *value);
90 DBUS_PRIVATE_EXPORT
91 dbus_bool_t _dbus_header_get_field_raw (DBusHeader *header,
92 int field,
93 const DBusString **str,
94 int *pos);
95 DBUS_PRIVATE_EXPORT
96 dbus_bool_t _dbus_header_delete_field (DBusHeader *header,
97 int field);
98 void _dbus_header_toggle_flag (DBusHeader *header,
99 dbus_uint32_t flag,
100 dbus_bool_t value);
101 dbus_bool_t _dbus_header_get_flag (DBusHeader *header,
102 dbus_uint32_t flag);
103 dbus_bool_t _dbus_header_ensure_signature (DBusHeader *header,
104 DBusString **type_str,
105 int *type_pos);
106 dbus_bool_t _dbus_header_have_message_untrusted (int max_message_length,
107 DBusValidity *validity,
108 int *byte_order,
109 int *fields_array_len,
110 int *header_len,
111 int *body_len,
112 const DBusString *str,
113 int start,
114 int len);
115 dbus_bool_t _dbus_header_load (DBusHeader *header,
116 DBusValidationMode mode,
117 DBusValidity *validity,
118 int byte_order,
119 int fields_array_len,
120 int header_len,
121 int body_len,
122 const DBusString *str,
123 int start,
124 int len);
125 void _dbus_header_byteswap (DBusHeader *header,
126 int new_order);
127 DBUS_PRIVATE_EXPORT
128 char _dbus_header_get_byte_order (const DBusHeader *header);
129
130
131
132 #endif /* DBUS_MARSHAL_HEADER_H */
dbus_uint32_t
unsigned int dbus_uint32_t
A 32-bit unsigned integer on all platforms.
Definition: dbus-arch-deps.h:43
_dbus_header_load
dbus_bool_t _dbus_header_load(DBusHeader *header, DBusValidationMode mode, DBusValidity *validity, int byte_order, int fields_array_len, int header_len, int body_len, const DBusString *str, int start, int len)
Creates a message header from potentially-untrusted data.
Definition: dbus-marshal-header.c:970
_dbus_header_copy
dbus_bool_t _dbus_header_copy(const DBusHeader *header, DBusHeader *dest)
Initializes dest with a copy of the given header.
Definition: dbus-marshal-header.c:490
DBusHeader::byte_order
dbus_uint32_t byte_order
byte order of header
Definition: dbus-marshal-header.h:59
DBusHeader::padding
dbus_uint32_t padding
bytes of alignment in header
Definition: dbus-marshal-header.h:58
_dbus_header_get_serial
dbus_uint32_t _dbus_header_get_serial(DBusHeader *header)
See dbus_message_get_serial()
Definition: dbus-marshal-header.c:427
_dbus_header_get_flag
dbus_bool_t _dbus_header_get_flag(DBusHeader *header, dbus_uint32_t flag)
Gets a message flag bit, returning TRUE if the bit is set.
Definition: dbus-marshal-header.c:1479
_dbus_header_init
dbus_bool_t _dbus_header_init(DBusHeader *header)
Initializes a header, but doesn&#39;t prepare it for use; to make the header valid, you have to call _dbu...
Definition: dbus-marshal-header.c:460
DBUS_HEADER_FIELD_LAST
#define DBUS_HEADER_FIELD_LAST
Value of the highest-numbered header field code, can be used to determine the size of an array indexe...
Definition: dbus-protocol.h:311
DBusHeader::data
DBusString data
Header network data, stored separately from body so we can independently realloc it.
Definition: dbus-marshal-header.h:49
DBusValidationMode
DBusValidationMode
This is used rather than a bool for high visibility.
Definition: dbus-marshal-validate.h:36
DBusValidity
DBusValidity
This is primarily used in unit testing, so we can verify that each invalid message is invalid for the...
Definition: dbus-marshal-validate.h:49
_dbus_header_get_message_type
int _dbus_header_get_message_type(DBusHeader *header)
Gets the type of the message.
Definition: dbus-marshal-header.c:386
DBusString
Definition: dbus-string.h:42
dbus_bool_t
dbus_uint32_t dbus_bool_t
A boolean, valid values are TRUE and FALSE.
Definition: dbus-types.h:35
DBusHeaderField::value_pos
int value_pos
Position of field value, or -1/-2.
Definition: dbus-marshal-header.h:41
_dbus_header_get_field_basic
dbus_bool_t _dbus_header_get_field_basic(DBusHeader *header, int field, int type, void *value)
Gets the value of a field with basic type.
Definition: dbus-marshal-header.c:1351
DBusHeaderField
Cached information about a header field in the message.
Definition: dbus-marshal-header.h:39
_dbus_header_byteswap
void _dbus_header_byteswap(DBusHeader *header, int new_order)
Swaps the header into the given order if required.
Definition: dbus-marshal-header.c:1496
_dbus_header_have_message_untrusted
dbus_bool_t _dbus_header_have_message_untrusted(int max_message_length, DBusValidity *validity, int *byte_order, int *fields_array_len, int *header_len, int *body_len, const DBusString *str, int start, int len)
Given data long enough to contain the length of the message body and the fields array, check whether the data is long enough to contain the entire message (assuming the claimed lengths are accurate).
Definition: dbus-marshal-header.c:673
_dbus_header_reinit
void _dbus_header_reinit(DBusHeader *header)
Re-initializes a header that was previously initialized and never freed.
Definition: dbus-marshal-header.c:443
_dbus_header_delete_field
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_header_delete_field(DBusHeader *header, int field)
Deletes a field, if it exists.
Definition: dbus-marshal-header.c:1416
_dbus_header_set_field_basic
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_header_set_field_basic(DBusHeader *header, int field, int type, const void *value)
Sets the value of a field with basic type.
Definition: dbus-marshal-header.c:1273
_dbus_header_create
dbus_bool_t _dbus_header_create(DBusHeader *header, int byte_order, int type, const char *destination, const char *path, const char *interface, const char *member, const char *error_name)
Fills in the primary fields of the header, so the header is ready for use.
Definition: dbus-marshal-header.c:528
_dbus_header_free
void _dbus_header_free(DBusHeader *header)
Frees a header.
Definition: dbus-marshal-header.c:476
_dbus_header_set_serial
void _dbus_header_set_serial(DBusHeader *header, dbus_uint32_t serial)
Sets the serial number of a header.
Definition: dbus-marshal-header.c:404
_dbus_header_get_byte_order
DBUS_PRIVATE_EXPORT char _dbus_header_get_byte_order(const DBusHeader *header)
Returns the header&#39;s byte order.
Definition: dbus-marshal-header.c:174
_dbus_header_get_field_raw
DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_header_get_field_raw(DBusHeader *header, int field, const DBusString **str, int *pos)
Gets the raw marshaled data for a field.
Definition: dbus-marshal-header.c:1392
DBusHeader
Message header data and some cached details of it.
Definition: dbus-marshal-header.h:47
_dbus_header_toggle_flag
void _dbus_header_toggle_flag(DBusHeader *header, dbus_uint32_t flag, dbus_bool_t value)
Toggles a message flag bit, turning on the bit if value = TRUE and flipping it off if value = FALSE...
Definition: dbus-marshal-header.c:1457
_dbus_header_update_lengths
void _dbus_header_update_lengths(DBusHeader *header, int body_len)
Fills in the correct body length.
Definition: dbus-marshal-header.c:1196