D-Bus 1.16.0
Data Structures | Macros | Typedefs | Enumerations | Functions
DBusMessage implementation details

DBusMessage private implementation details. More...

Data Structures

struct  DBusMessageLoader
 Implementation details of DBusMessageLoader. More...
 
struct  DBusMessage
 Internals of DBusMessage. More...
 
struct  DBusMessageRealIter
 Internals of DBusMessageIter. More...
 
struct  DBusMessageIter_1_10_0
 Layout of a DBusMessageIter on the stack in dbus 1.10.0. More...
 
struct  DBusVariant
 An opaque data structure containing the serialized form of any single D-Bus message item, whose signature is a single complete type. More...
 

Macros

#define CHANGED_STAMP_BITS   21
 How many bits are in the changed_stamp used to validate iterators.
 
#define _dbus_enable_message_cache()   (TRUE)
 
#define CHECK_DBUS_1_10_BINARY_COMPATIBILITY   1
 
#define ensure_byte_order(message)   _dbus_message_byteswap (message)
 byte-swap the message if it doesn't match our byte order.
 
#define MAX_MESSAGE_SIZE_TO_CACHE   10 * _DBUS_ONE_KILOBYTE
 Avoid caching huge messages.
 
#define MAX_MESSAGE_CACHE_SIZE   5
 Avoid caching too many messages.
 
#define INITIAL_LOADER_DATA_LEN   32
 The initial buffer size of the message loader.
 

Typedefs

typedef struct DBusMessageRealIter DBusMessageRealIter
 typedef for internals of message iterator
 

Enumerations

enum  { DBUS_MESSAGE_ITER_TYPE_READER = 3 , DBUS_MESSAGE_ITER_TYPE_WRITER = 7 }
 

Functions

DBUS_PRIVATE_EXPORT dbus_bool_t _dbus_message_iter_get_args_valist (DBusMessageIter *iter, DBusError *error, int first_arg_type, va_list var_args)
 Implementation of the varargs arg-getting functions.
 
unsigned int _dbus_message_get_n_unix_fds (DBusMessage *message)
 Gets the number of unix fds attached to this message.
 
void _dbus_message_trace_ref (DBusMessage *message, int old_refcount, int new_refcount, const char *why)
 
 _DBUS_STRING_DEFINE_STATIC (_dbus_empty_signature_str, "")
 An static string representing an empty signature.
 
void _dbus_message_get_network_data (DBusMessage *message, const DBusString **header, const DBusString **body)
 Gets the data to be sent over the network for this message.
 
void _dbus_message_get_unix_fds (DBusMessage *message, const int **fds, unsigned *n_fds)
 Gets the unix fds to be sent over the network for this message.
 
dbus_bool_t _dbus_message_remove_unknown_fields (DBusMessage *message)
 Remove every header field not known to this version of dbus.
 
void dbus_message_set_serial (DBusMessage *message, dbus_uint32_t serial)
 Sets the serial number of a message.
 
void _dbus_message_add_counter_link (DBusMessage *message, DBusList *link)
 Adds a counter to be incremented immediately with the size/unix fds of this message, and decremented by the size/unix fds of this message when this message if finalized.
 
dbus_bool_t _dbus_message_add_counter (DBusMessage *message, DBusCounter *counter)
 Adds a counter to be incremented immediately with the size/unix fds of this message, and decremented by the size/unix fds of this message when this message if finalized.
 
void _dbus_message_remove_counter (DBusMessage *message, DBusCounter *counter)
 Removes a counter tracking the size/unix fds of this message, and decrements the counter by the size/unix fds of this message.
 
void dbus_message_lock (DBusMessage *message)
 Locks a message.
 
void dbus_message_iter_init_closed (DBusMessageIter *iter)
 Initialize iter as if with DBUS_MESSAGE_ITER_INIT_CLOSED.
 
DBusMessageLoader_dbus_message_loader_new (void)
 Creates a new message loader.
 
DBusMessageLoader_dbus_message_loader_ref (DBusMessageLoader *loader)
 Increments the reference count of the loader.
 
void _dbus_message_loader_unref (DBusMessageLoader *loader)
 Decrements the reference count of the loader and finalizes the loader when the count reaches zero.
 
void _dbus_message_loader_get_buffer (DBusMessageLoader *loader, DBusString **buffer, int *max_to_read, dbus_bool_t *may_read_fds)
 Gets the buffer to use for reading data from the network.
 
void _dbus_message_loader_return_buffer (DBusMessageLoader *loader, DBusString *buffer)
 Returns a buffer obtained from _dbus_message_loader_get_buffer(), indicating to the loader how many bytes of the buffer were filled in.
 
dbus_bool_t _dbus_message_loader_queue_messages (DBusMessageLoader *loader)
 Converts buffered data into messages, if we have enough data.
 
DBusMessage_dbus_message_loader_peek_message (DBusMessageLoader *loader)
 Peeks at first loaded message, returns NULL if no messages have been queued.
 
DBusMessage_dbus_message_loader_pop_message (DBusMessageLoader *loader)
 Pops a loaded message (passing ownership of the message to the caller).
 
DBusList_dbus_message_loader_pop_message_link (DBusMessageLoader *loader)
 Pops a loaded message inside a list link (passing ownership of the message and link to the caller).
 
void _dbus_message_loader_putback_message_link (DBusMessageLoader *loader, DBusList *link)
 Returns a popped message link, used to undo a pop.
 
dbus_bool_t _dbus_message_loader_get_is_corrupted (DBusMessageLoader *loader)
 Checks whether the loader is confused due to bad data.
 
DBusValidity _dbus_message_loader_get_corruption_reason (DBusMessageLoader *loader)
 Checks what kind of bad data confused the loader.
 
void _dbus_message_loader_set_max_message_size (DBusMessageLoader *loader, long size)
 Sets the maximum size message we allow.
 
long _dbus_message_loader_get_max_message_size (DBusMessageLoader *loader)
 Gets the maximum allowed message size in bytes.
 
void _dbus_message_loader_set_max_message_unix_fds (DBusMessageLoader *loader, long n)
 Sets the maximum unix fds per message we allow.
 
long _dbus_message_loader_get_max_message_unix_fds (DBusMessageLoader *loader)
 Gets the maximum allowed number of unix fds per message.
 
int _dbus_message_loader_get_pending_fds_count (DBusMessageLoader *loader)
 Return how many file descriptors are pending in the loader.
 
void _dbus_message_loader_set_pending_fds_function (DBusMessageLoader *loader, void(*callback)(void *), void *data)
 Register a function to be called whenever the number of pending file descriptors in the loader change.
 
dbus_bool_t dbus_message_allocate_data_slot (dbus_int32_t *slot_p)
 Allocates an integer ID to be used for storing application-specific data on any DBusMessage.
 
void dbus_message_free_data_slot (dbus_int32_t *slot_p)
 Deallocates a global ID for message data slots.
 
dbus_bool_t dbus_message_set_data (DBusMessage *message, dbus_int32_t slot, void *data, DBusFreeFunction free_data_func)
 Stores a pointer on a DBusMessage, along with an optional function to be used for freeing the data when the data is set again, or when the message is finalized.
 
void * dbus_message_get_data (DBusMessage *message, dbus_int32_t slot)
 Retrieves data previously set with dbus_message_set_data().
 
int dbus_message_type_from_string (const char *type_str)
 Utility function to convert a machine-readable (not translated) string into a D-Bus message type.
 
const char * dbus_message_type_to_string (int type)
 Utility function to convert a D-Bus message type into a machine-readable string (not translated).
 
dbus_bool_t dbus_message_marshal (DBusMessage *msg, char **marshalled_data_p, int *len_p)
 Turn a DBusMessage into the marshalled form as described in the D-Bus specification.
 
DBusMessagedbus_message_demarshal (const char *str, int len, DBusError *error)
 Demarshal a D-Bus message from the format described in the D-Bus specification.
 
int dbus_message_demarshal_bytes_needed (const char *buf, int len)
 Returns the number of bytes required to be in the buffer to demarshal a D-Bus message.
 
void dbus_message_set_allow_interactive_authorization (DBusMessage *message, dbus_bool_t allow)
 Sets a flag indicating that the caller of the method is prepared to wait for interactive authorization to take place (for instance via Polkit) before the actual method is processed.
 
dbus_bool_t dbus_message_get_allow_interactive_authorization (DBusMessage *message)
 Returns whether the flag controlled by dbus_message_set_allow_interactive_authorization() has been set.
 
DBusVariant_dbus_variant_read (DBusMessageIter *reader)
 Copy a single D-Bus message item from reader into a newly-allocated DBusVariant.
 
const char * _dbus_variant_get_signature (DBusVariant *self)
 Return the signature of the item stored in self.
 
dbus_bool_t _dbus_variant_write (DBusVariant *self, DBusMessageIter *writer)
 Copy the single D-Bus message item from self into writer.
 
int _dbus_variant_get_length (DBusVariant *self)
 
const DBusString_dbus_variant_peek (DBusVariant *self)
 
void _dbus_variant_free (DBusVariant *self)
 

Detailed Description

DBusMessage private implementation details.

The guts of DBusMessage and its methods.

Macro Definition Documentation

◆ _dbus_enable_message_cache

#define _dbus_enable_message_cache ( )    (TRUE)

Definition at line 90 of file dbus-message.c.

◆ CHANGED_STAMP_BITS

#define CHANGED_STAMP_BITS   21

How many bits are in the changed_stamp used to validate iterators.

Definition at line 92 of file dbus-message-private.h.

◆ CHECK_DBUS_1_10_BINARY_COMPATIBILITY

#define CHECK_DBUS_1_10_BINARY_COMPATIBILITY   1

Definition at line 149 of file dbus-message.c.

◆ ensure_byte_order

#define ensure_byte_order (   message)    _dbus_message_byteswap (message)

byte-swap the message if it doesn't match our byte order.

Called only when we need the message in our own byte order, normally when reading arrays of integers or doubles. Otherwise should not be called since it would do needless work.

Definition at line 230 of file dbus-message.c.

◆ INITIAL_LOADER_DATA_LEN

#define INITIAL_LOADER_DATA_LEN   32

The initial buffer size of the message loader.

Definition at line 4168 of file dbus-message.c.

◆ MAX_MESSAGE_CACHE_SIZE

#define MAX_MESSAGE_CACHE_SIZE   5

Avoid caching too many messages.

Definition at line 511 of file dbus-message.c.

◆ MAX_MESSAGE_SIZE_TO_CACHE

#define MAX_MESSAGE_SIZE_TO_CACHE   10 * _DBUS_ONE_KILOBYTE

Avoid caching huge messages.

Definition at line 508 of file dbus-message.c.

Typedef Documentation

◆ DBusMessageRealIter

typedef for internals of message iterator

Definition at line 121 of file dbus-message.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Definition at line 115 of file dbus-message.c.

Function Documentation

◆ _dbus_message_add_counter()

dbus_bool_t _dbus_message_add_counter ( DBusMessage message,
DBusCounter counter 
)

Adds a counter to be incremented immediately with the size/unix fds of this message, and decremented by the size/unix fds of this message when this message if finalized.

This function may be called with locks held. As a result, the counter's notify function is not called; the caller is expected to either call _dbus_counter_notify() on the counter when they are no longer holding locks, or take the same action that would be taken by the notify function.

Parameters
messagethe message
counterthe counter
Returns
FALSE if no memory

Definition at line 376 of file dbus-message.c.

References _dbus_counter_ref(), _dbus_list_alloc_link(), _dbus_message_add_counter_link(), FALSE, NULL, and TRUE.

Referenced by _dbus_transport_queue_messages().

◆ _dbus_message_add_counter_link()

void _dbus_message_add_counter_link ( DBusMessage message,
DBusList link 
)

Adds a counter to be incremented immediately with the size/unix fds of this message, and decremented by the size/unix fds of this message when this message if finalized.

The link contains a counter with its refcount already incremented, but the counter itself not incremented. Ownership of link and counter refcount is passed to the message.

This function may be called with locks held. As a result, the counter's notify function is not called; the caller is expected to either call _dbus_counter_notify() on the counter when they are no longer holding locks, or take the same action that would be taken by the notify function.

Parameters
messagethe message
linklink with counter as data

Definition at line 327 of file dbus-message.c.

References _dbus_counter_adjust_size(), _dbus_counter_adjust_unix_fd(), _dbus_list_append_link(), DBusMessage::body, DBusMessage::counters, DBusList::data, DBusHeader::data, DBusMessage::header, NULL, and DBusMessage::size_counter_delta.

Referenced by _dbus_message_add_counter().

◆ _dbus_message_get_n_unix_fds()

unsigned int _dbus_message_get_n_unix_fds ( DBusMessage message)

Gets the number of unix fds attached to this message.

Parameters
messagethe message
Returns
the number of file descriptors

Definition at line 42 of file dbus-message-util.c.

◆ _dbus_message_get_network_data()

void _dbus_message_get_network_data ( DBusMessage message,
const DBusString **  header,
const DBusString **  body 
)

Gets the data to be sent over the network for this message.

The header and then the body should be written out. This function is guaranteed to always return the same data once a message is locked (with dbus_message_lock()).

Parameters
messagethe message.
headerreturn location for message header data.
bodyreturn location for message body data.

Definition at line 243 of file dbus-message.c.

References _dbus_assert, DBusMessage::body, DBusHeader::data, DBusMessage::header, and DBusMessage::locked.

◆ _dbus_message_get_unix_fds()

void _dbus_message_get_unix_fds ( DBusMessage message,
const int **  fds,
unsigned *  n_fds 
)

Gets the unix fds to be sent over the network for this message.

This function is guaranteed to always return the same data once a message is locked (with dbus_message_lock()).

Parameters
messagethe message.
fdsreturn location of unix fd array
n_fdsreturn number of entries in array

Definition at line 262 of file dbus-message.c.

References _dbus_assert, DBusMessage::locked, and NULL.

◆ _dbus_message_iter_get_args_valist()

dbus_bool_t _dbus_message_iter_get_args_valist ( DBusMessageIter iter,
DBusError error,
int  first_arg_type,
va_list  var_args 
)

◆ _dbus_message_loader_get_buffer()

void _dbus_message_loader_get_buffer ( DBusMessageLoader loader,
DBusString **  buffer,
int *  max_to_read,
dbus_bool_t *  may_read_fds 
)

Gets the buffer to use for reading data from the network.

Network data is read directly into an allocated buffer, which is then used in the DBusMessage, to avoid as many extra memcpy's as possible. The buffer must always be returned immediately using _dbus_message_loader_return_buffer(), even if no bytes are successfully read.

Parameters
loaderthe message loader.
bufferthe buffer

Definition at line 4274 of file dbus-message.c.

References _dbus_assert, _dbus_header_have_message_untrusted(), DBusMessageLoader::buffer_outstanding, DBusMessageLoader::data, DBUS_MAXIMUM_MESSAGE_LENGTH, DBUS_MINIMUM_HEADER_SIZE, DBUS_VALID, FALSE, DBusMessageLoader::max_message_size, NULL, and TRUE.

Referenced by dbus_message_demarshal().

◆ _dbus_message_loader_get_corruption_reason()

DBusValidity _dbus_message_loader_get_corruption_reason ( DBusMessageLoader loader)

Checks what kind of bad data confused the loader.

Parameters
loaderthe loader
Returns
why the loader is hosed, or DBUS_VALID if it isn't.

Definition at line 4828 of file dbus-message.c.

References _dbus_assert, DBusMessageLoader::corrupted, DBusMessageLoader::corruption_reason, and DBUS_VALID.

◆ _dbus_message_loader_get_is_corrupted()

dbus_bool_t _dbus_message_loader_get_is_corrupted ( DBusMessageLoader loader)

Checks whether the loader is confused due to bad data.

If messages are received that are invalid, the loader gets confused and gives up permanently. This state is called "corrupted."

Parameters
loaderthe loader
Returns
TRUE if the loader is hosed.

Definition at line 4814 of file dbus-message.c.

References _dbus_assert, DBusMessageLoader::corrupted, DBusMessageLoader::corruption_reason, and DBUS_VALID.

Referenced by _dbus_transport_queue_messages(), and dbus_message_demarshal().

◆ _dbus_message_loader_get_max_message_size()

long _dbus_message_loader_get_max_message_size ( DBusMessageLoader loader)

Gets the maximum allowed message size in bytes.

Parameters
loaderthe loader
Returns
max size in bytes

Definition at line 4862 of file dbus-message.c.

References DBusMessageLoader::max_message_size.

Referenced by _dbus_transport_get_max_message_size().

◆ _dbus_message_loader_get_max_message_unix_fds()

long _dbus_message_loader_get_max_message_unix_fds ( DBusMessageLoader loader)

Gets the maximum allowed number of unix fds per message.

Parameters
loaderthe loader
Returns
max unix fds

Definition at line 4893 of file dbus-message.c.

References DBusMessageLoader::max_message_unix_fds.

Referenced by _dbus_transport_get_max_message_unix_fds().

◆ _dbus_message_loader_get_pending_fds_count()

int _dbus_message_loader_get_pending_fds_count ( DBusMessageLoader loader)

Return how many file descriptors are pending in the loader.

Parameters
loaderthe loader

Definition at line 4904 of file dbus-message.c.

Referenced by _dbus_transport_get_pending_fds_count().

◆ _dbus_message_loader_new()

DBusMessageLoader * _dbus_message_loader_new ( void  )

◆ _dbus_message_loader_peek_message()

DBusMessage * _dbus_message_loader_peek_message ( DBusMessageLoader loader)

Peeks at first loaded message, returns NULL if no messages have been queued.

Parameters
loaderthe loader.
Returns
the next message, or NULL if none.

Definition at line 4755 of file dbus-message.c.

References DBusList::data, DBusMessageLoader::messages, and NULL.

Referenced by _dbus_transport_get_dispatch_status().

◆ _dbus_message_loader_pop_message()

DBusMessage * _dbus_message_loader_pop_message ( DBusMessageLoader loader)

Pops a loaded message (passing ownership of the message to the caller).

Returns NULL if no messages have been queued.

Parameters
loaderthe loader.
Returns
the next message, or NULL if none.

Definition at line 4772 of file dbus-message.c.

References _dbus_list_pop_first(), and DBusMessageLoader::messages.

Referenced by dbus_message_demarshal().

◆ _dbus_message_loader_pop_message_link()

DBusList * _dbus_message_loader_pop_message_link ( DBusMessageLoader loader)

Pops a loaded message inside a list link (passing ownership of the message and link to the caller).

Returns NULL if no messages have been loaded.

Parameters
loaderthe loader.
Returns
the next message link, or NULL if none.

Definition at line 4786 of file dbus-message.c.

References _dbus_list_pop_first_link(), and DBusMessageLoader::messages.

Referenced by _dbus_transport_queue_messages().

◆ _dbus_message_loader_putback_message_link()

void _dbus_message_loader_putback_message_link ( DBusMessageLoader loader,
DBusList link 
)

Returns a popped message link, used to undo a pop.

Parameters
loaderthe loader
linkthe link with a message in it

Definition at line 4798 of file dbus-message.c.

References _dbus_list_prepend_link(), and DBusMessageLoader::messages.

Referenced by _dbus_transport_queue_messages().

◆ _dbus_message_loader_queue_messages()

dbus_bool_t _dbus_message_loader_queue_messages ( DBusMessageLoader loader)

Converts buffered data into messages, if we have enough data.

If we don't have enough data, does nothing.

Parameters
loaderthe loader.
Returns
TRUE if we had enough memory to finish.

Definition at line 4692 of file dbus-message.c.

References _dbus_assert, _dbus_header_have_message_untrusted(), _dbus_list_find_last(), DBusMessageLoader::corrupted, DBusMessageLoader::corruption_reason, DBusMessageLoader::data, dbus_message_unref(), DBUS_MINIMUM_HEADER_SIZE, DBUS_VALID, FALSE, DBusMessageLoader::max_message_size, DBusMessageLoader::messages, NULL, and TRUE.

Referenced by _dbus_transport_get_dispatch_status(), and dbus_message_demarshal().

◆ _dbus_message_loader_ref()

DBusMessageLoader * _dbus_message_loader_ref ( DBusMessageLoader loader)

Increments the reference count of the loader.

Parameters
loaderthe loader.
Returns
the loader

Definition at line 4225 of file dbus-message.c.

References DBusMessageLoader::refcount.

◆ _dbus_message_loader_return_buffer()

void _dbus_message_loader_return_buffer ( DBusMessageLoader loader,
DBusString buffer 
)

Returns a buffer obtained from _dbus_message_loader_get_buffer(), indicating to the loader how many bytes of the buffer were filled in.

This function must always be called, even if no bytes were successfully read.

Parameters
loaderthe loader.
bufferthe buffer.

Definition at line 4380 of file dbus-message.c.

References _dbus_assert, DBusMessageLoader::buffer_outstanding, DBusMessageLoader::data, and FALSE.

Referenced by dbus_message_demarshal().

◆ _dbus_message_loader_set_max_message_size()

void _dbus_message_loader_set_max_message_size ( DBusMessageLoader loader,
long  size 
)

Sets the maximum size message we allow.

Parameters
loaderthe loader
sizethe max message size in bytes

Definition at line 4843 of file dbus-message.c.

References DBUS_MAXIMUM_MESSAGE_LENGTH, and DBusMessageLoader::max_message_size.

Referenced by _dbus_transport_set_max_message_size().

◆ _dbus_message_loader_set_max_message_unix_fds()

void _dbus_message_loader_set_max_message_unix_fds ( DBusMessageLoader loader,
long  n 
)

Sets the maximum unix fds per message we allow.

Parameters
loaderthe loader
nthe max number of unix fds in a message

Definition at line 4874 of file dbus-message.c.

References DBUS_MAXIMUM_MESSAGE_UNIX_FDS, and DBusMessageLoader::max_message_unix_fds.

Referenced by _dbus_transport_set_max_message_unix_fds().

◆ _dbus_message_loader_set_pending_fds_function()

void _dbus_message_loader_set_pending_fds_function ( DBusMessageLoader loader,
void(*)(void *)  callback,
void *  data 
)

Register a function to be called whenever the number of pending file descriptors in the loader change.

Parameters
loaderthe loader
callbackthe callback
datathe data for the callback

Definition at line 4922 of file dbus-message.c.

Referenced by _dbus_transport_set_pending_fds_function().

◆ _dbus_message_loader_unref()

void _dbus_message_loader_unref ( DBusMessageLoader loader)

Decrements the reference count of the loader and finalizes the loader when the count reaches zero.

Parameters
loaderthe loader.

Definition at line 4239 of file dbus-message.c.

References _dbus_list_clear_full(), _dbus_string_free(), DBusMessageLoader::data, dbus_free(), dbus_message_unref(), DBusMessageLoader::messages, and DBusMessageLoader::refcount.

Referenced by _dbus_transport_finalize_base(), _dbus_transport_init_base(), and dbus_message_demarshal().

◆ _dbus_message_remove_counter()

void _dbus_message_remove_counter ( DBusMessage message,
DBusCounter counter 
)

Removes a counter tracking the size/unix fds of this message, and decrements the counter by the size/unix fds of this message.

Parameters
messagethe message
counterthe counter

Definition at line 399 of file dbus-message.c.

References _dbus_assert, _dbus_counter_adjust_size(), _dbus_counter_adjust_unix_fd(), _dbus_counter_notify(), _dbus_counter_unref(), _dbus_list_find_last(), _dbus_list_remove_link(), DBusMessage::counters, NULL, and DBusMessage::size_counter_delta.

Referenced by _dbus_connection_message_sent_unlocked().

◆ _dbus_message_remove_unknown_fields()

dbus_bool_t _dbus_message_remove_unknown_fields ( DBusMessage message)

Remove every header field not known to this version of dbus.

Parameters
messagethe message
Returns
FALSE if no memory

Definition at line 284 of file dbus-message.c.

References _dbus_header_remove_unknown_fields(), and DBusMessage::header.

◆ _dbus_message_trace_ref()

void _dbus_message_trace_ref ( DBusMessage message,
int  old_refcount,
int  new_refcount,
const char *  why 
)

Definition at line 95 of file dbus-message.c.

◆ _dbus_variant_free()

void _dbus_variant_free ( DBusVariant self)

Definition at line 5565 of file dbus-message.c.

◆ _dbus_variant_get_length()

int _dbus_variant_get_length ( DBusVariant self)

Definition at line 5551 of file dbus-message.c.

◆ _dbus_variant_get_signature()

const char * _dbus_variant_get_signature ( DBusVariant self)

Return the signature of the item stored in self.

It is a single complete type.

Parameters
selfthe variant

Definition at line 5485 of file dbus-message.c.

References _dbus_assert, and NULL.

◆ _dbus_variant_peek()

const DBusString * _dbus_variant_peek ( DBusVariant self)

Definition at line 5558 of file dbus-message.c.

◆ _dbus_variant_read()

DBusVariant * _dbus_variant_read ( DBusMessageIter reader)

Copy a single D-Bus message item from reader into a newly-allocated DBusVariant.

For example, if a message contains three string arguments, and reader points to the second string, the resulting DBusVariant will have signature DBUS_TYPE_STRING_AS_STRING and contain only that second string.

Parameters
readerAn iterator over message items, pointing to one item to copy
Returns
The variant, or NULL if out of memory

Definition at line 5349 of file dbus-message.c.

References _dbus_assert, _dbus_string_copy_len(), _dbus_string_free(), _dbus_string_init(), _dbus_string_init_const(), _dbus_type_reader_get_signature(), _dbus_type_writer_init_values_only(), _dbus_type_writer_recurse(), _dbus_type_writer_unrecurse(), _dbus_type_writer_write_basic(), _dbus_type_writer_write_reader(), dbus_free(), dbus_message_iter_get_arg_type(), dbus_message_iter_get_basic(), dbus_message_iter_recurse(), dbus_new0, DBUS_TYPE_ARRAY, DBUS_TYPE_DICT_ENTRY, dbus_type_is_basic(), DBUS_TYPE_STRUCT, DBUS_TYPE_VARIANT, DBUS_TYPE_VARIANT_AS_STRING, FALSE, DBusMessageRealIter::iter_type, NULL, DBusMessageRealIter::reader, TRUE, and DBusMessageRealIter::u.

◆ _dbus_variant_write()

dbus_bool_t _dbus_variant_write ( DBusVariant self,
DBusMessageIter writer 
)

Copy the single D-Bus message item from self into writer.

For example, if writer points into the body of an empty message and self has signature DBUS_TYPE_STRING_AS_STRING, then the message will have signature DBUS_TYPE_STRING_AS_STRING after this function returns

Parameters
selfthe variant
writerthe place to write the contents of the variant
Returns
TRUE on success, FALSE if out of memory

Definition at line 5516 of file dbus-message.c.

References _dbus_assert, _dbus_string_init_const(), _dbus_type_reader_init(), _dbus_type_reader_recurse(), _dbus_type_writer_write_reader(), DBUS_TYPE_VARIANT_AS_STRING, FALSE, DBusMessageRealIter::iter_type, NULL, DBusMessageRealIter::u, and DBusMessageRealIter::writer.

◆ dbus_message_allocate_data_slot()

dbus_bool_t dbus_message_allocate_data_slot ( dbus_int32_t *  slot_p)

Allocates an integer ID to be used for storing application-specific data on any DBusMessage.

The allocated ID may then be used with dbus_message_set_data() and dbus_message_get_data(). The passed-in slot must be initialized to -1, and is filled in with the slot ID. If the passed-in slot is not -1, it's assumed to be already allocated, and its refcount is incremented.

The allocated slot is global, i.e. all DBusMessage objects will have a slot with the given integer ID reserved.

Parameters
slot_paddress of a global variable storing the slot
Returns
FALSE on failure (no memory)

Definition at line 4950 of file dbus-message.c.

References _dbus_data_slot_allocator_alloc().

◆ dbus_message_demarshal()

DBusMessage * dbus_message_demarshal ( const char *  str,
int  len,
DBusError error 
)

Demarshal a D-Bus message from the format described in the D-Bus specification.

Generally, this function is only useful for encapsulating D-Bus messages in a different protocol.

Parameters
strthe marshalled DBusMessage
lenthe length of str
errorthe location to save errors to
Returns
NULL if there was an error

Definition at line 5173 of file dbus-message.c.

References _dbus_message_loader_get_buffer(), _dbus_message_loader_get_is_corrupted(), _dbus_message_loader_new(), _dbus_message_loader_pop_message(), _dbus_message_loader_queue_messages(), _dbus_message_loader_return_buffer(), _dbus_message_loader_unref(), _dbus_string_append_len(), DBusMessageLoader::corruption_reason, DBUS_ERROR_INVALID_ARGS, dbus_set_error(), DBUS_VALIDITY_UNKNOWN_OOM_ERROR, and NULL.

◆ dbus_message_demarshal_bytes_needed()

int dbus_message_demarshal_bytes_needed ( const char *  buf,
int  len 
)

Returns the number of bytes required to be in the buffer to demarshal a D-Bus message.

Generally, this function is only useful for encapsulating D-Bus messages in a different protocol.

Parameters
bufdata to be marshalled
lenthe length of buf
Returns
-1 if there was no valid data to be demarshalled, 0 if there wasn't enough data to determine how much should be demarshalled. Otherwise returns the number of bytes to be demarshalled

Definition at line 5240 of file dbus-message.c.

References _dbus_assert, _dbus_header_have_message_untrusted(), _dbus_string_free(), _dbus_string_init_const_len(), DBUS_MAXIMUM_MESSAGE_LENGTH, DBUS_MINIMUM_HEADER_SIZE, and DBUS_VALID.

◆ dbus_message_free_data_slot()

void dbus_message_free_data_slot ( dbus_int32_t *  slot_p)

Deallocates a global ID for message data slots.

dbus_message_get_data() and dbus_message_set_data() may no longer be used with this slot. Existing data stored on existing DBusMessage objects will be freed when the message is finalized, but may not be retrieved (and may only be replaced if someone else reallocates the slot). When the refcount on the passed-in slot reaches 0, it is set to -1.

Parameters
slot_paddress storing the slot to deallocate

Definition at line 4968 of file dbus-message.c.

References _dbus_data_slot_allocator_free().

◆ dbus_message_get_allow_interactive_authorization()

dbus_bool_t dbus_message_get_allow_interactive_authorization ( DBusMessage message)

Returns whether the flag controlled by dbus_message_set_allow_interactive_authorization() has been set.

Parameters
messagethe message

Definition at line 5318 of file dbus-message.c.

References _dbus_header_get_flag(), DBUS_HEADER_FLAG_ALLOW_INTERACTIVE_AUTHORIZATION, FALSE, DBusMessage::header, and NULL.

◆ dbus_message_get_data()

void * dbus_message_get_data ( DBusMessage message,
dbus_int32_t  slot 
)

Retrieves data previously set with dbus_message_set_data().

The slot must still be allocated (must not have been freed).

Parameters
messagethe message
slotthe slot to get data from
Returns
the data, or NULL if not found

Definition at line 5025 of file dbus-message.c.

References _dbus_data_slot_list_get(), NULL, and DBusMessage::slot_list.

◆ dbus_message_iter_init_closed()

void dbus_message_iter_init_closed ( DBusMessageIter iter)

Initialize iter as if with DBUS_MESSAGE_ITER_INIT_CLOSED.

The only valid operation for such an iterator is dbus_message_iter_abandon_container_if_open(), which does nothing.

Definition at line 755 of file dbus-message.c.

References NULL.

◆ dbus_message_lock()

void dbus_message_lock ( DBusMessage message)

Locks a message.

Allows checking that applications don't keep a reference to a message in the outgoing queue and change it underneath us. Messages are locked when they enter the outgoing queue (dbus_connection_send_message()), and the library complains if the message is modified while locked. This function may also called externally, for applications wrapping D-Bus in another protocol.

Parameters
messagethe message to lock.

Definition at line 431 of file dbus-message.c.

References _dbus_assert, _dbus_header_update_lengths(), DBusMessage::body, dbus_message_get_signature(), DBusMessage::header, DBusMessage::locked, NULL, and TRUE.

Referenced by dbus_message_marshal().

◆ dbus_message_marshal()

dbus_bool_t dbus_message_marshal ( DBusMessage msg,
char **  marshalled_data_p,
int *  len_p 
)

Turn a DBusMessage into the marshalled form as described in the D-Bus specification.

Generally, this function is only useful for encapsulating D-Bus messages in a different protocol.

Parameters
msgthe DBusMessage
marshalled_data_pthe location to save the marshalled form to
len_pthe location to save the length of the marshalled form to
Returns
FALSE if there was not enough memory

Definition at line 5111 of file dbus-message.c.

References _dbus_string_copy(), _dbus_string_free(), _dbus_string_init(), _dbus_string_steal_data(), DBusMessage::body, DBusHeader::data, dbus_message_lock(), FALSE, DBusMessage::header, DBusMessage::locked, NULL, and TRUE.

◆ dbus_message_set_allow_interactive_authorization()

void dbus_message_set_allow_interactive_authorization ( DBusMessage message,
dbus_bool_t  allow 
)

Sets a flag indicating that the caller of the method is prepared to wait for interactive authorization to take place (for instance via Polkit) before the actual method is processed.

The flag is FALSE by default; that is, by default the other end is expected to make any authorization decisions non-interactively and promptly. It may use the error DBUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED to signal that authorization failed, but could have succeeded if this flag had been used.

For messages whose type is not DBUS_MESSAGE_TYPE_METHOD_CALL, this flag is meaningless and should not be set.

On the protocol level this toggles DBUS_HEADER_FLAG_ALLOW_INTERACTIVE_AUTHORIZATION.

Parameters
messagethe message
allowTRUE if interactive authorization is acceptable

Definition at line 5300 of file dbus-message.c.

References _dbus_header_toggle_flag(), DBUS_HEADER_FLAG_ALLOW_INTERACTIVE_AUTHORIZATION, DBusMessage::header, DBusMessage::locked, and NULL.

◆ dbus_message_set_data()

dbus_bool_t dbus_message_set_data ( DBusMessage message,
dbus_int32_t  slot,
void *  data,
DBusFreeFunction  free_data_func 
)

Stores a pointer on a DBusMessage, along with an optional function to be used for freeing the data when the data is set again, or when the message is finalized.

The slot number must have been allocated with dbus_message_allocate_data_slot().

Parameters
messagethe message
slotthe slot number
datathe data to store
free_data_funcfinalizer function for the data
Returns
TRUE if there was enough memory to store the data

Definition at line 4989 of file dbus-message.c.

References _dbus_data_slot_list_set(), FALSE, NULL, and DBusMessage::slot_list.

◆ dbus_message_set_serial()

void dbus_message_set_serial ( DBusMessage message,
dbus_uint32_t  serial 
)

Sets the serial number of a message.

This can only be done once on a message.

DBusConnection will automatically set the serial to an appropriate value when the message is sent; this function is only needed when encapsulating messages in another protocol, or otherwise bypassing DBusConnection.

Parameters
messagethe message
serialthe serial

Definition at line 301 of file dbus-message.c.

References _dbus_header_set_serial(), DBusMessage::header, DBusMessage::locked, and NULL.

Referenced by dbus_connection_send_with_reply().

◆ dbus_message_type_from_string()

int dbus_message_type_from_string ( const char *  type_str)

Utility function to convert a machine-readable (not translated) string into a D-Bus message type.

anything else -> DBUS_MESSAGE_TYPE_INVALID
#define DBUS_MESSAGE_TYPE_METHOD_CALL
Message type of a method call message, see dbus_message_get_type()
#define DBUS_MESSAGE_TYPE_ERROR
Message type of an error reply message, see dbus_message_get_type()
#define DBUS_MESSAGE_TYPE_METHOD_RETURN
Message type of a method return message, see dbus_message_get_type()
#define DBUS_MESSAGE_TYPE_SIGNAL
Message type of a signal message, see dbus_message_get_type()
#define DBUS_MESSAGE_TYPE_INVALID
This value is never a valid message type, see dbus_message_get_type()

Definition at line 5053 of file dbus-message.c.

References DBUS_MESSAGE_TYPE_ERROR, DBUS_MESSAGE_TYPE_INVALID, DBUS_MESSAGE_TYPE_METHOD_CALL, DBUS_MESSAGE_TYPE_METHOD_RETURN, and DBUS_MESSAGE_TYPE_SIGNAL.

◆ dbus_message_type_to_string()

const char * dbus_message_type_to_string ( int  type)

Utility function to convert a D-Bus message type into a machine-readable string (not translated).

Definition at line 5081 of file dbus-message.c.

References DBUS_MESSAGE_TYPE_ERROR, DBUS_MESSAGE_TYPE_METHOD_CALL, DBUS_MESSAGE_TYPE_METHOD_RETURN, and DBUS_MESSAGE_TYPE_SIGNAL.

Referenced by _dbus_connection_message_sent_unlocked(), _dbus_connection_queue_received_message_link(), and dbus_connection_dispatch().