dbus-message-private.h revision a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46ae
1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 27bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/* dbus-message-private.h header shared between dbus-message.c and dbus-message-util.c 37bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 47bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Copyright (C) 2005 Red Hat Inc. 57bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 67bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Licensed under the Academic Free License version 2.1 77bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 87bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * This program is free software; you can redistribute it and/or modify 97bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * it under the terms of the GNU General Public License as published by 107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the Free Software Foundation; either version 2 of the License, or 117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * (at your option) any later version. 127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * This program is distributed in the hope that it will be useful, 147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * GNU General Public License for more details. 177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * You should have received a copy of the GNU General Public License 197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * along with this program; if not, write to the Free Software 207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifndef DBUS_MESSAGE_PRIVATE_H 247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define DBUS_MESSAGE_PRIVATE_H 257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 26a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering#include <config.h> 27a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-message.h> 297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-message-internal.h> 307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-string.h> 317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-dataslot.h> 327bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-marshal-header.h> 337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 347bf62e31a3c820852271768fafc04ba95c31a19fHavoc PenningtonDBUS_BEGIN_DECLS 357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @addtogroup DBusMessageInternals 387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @{ 397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @typedef DBusMessageLoader 437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * The DBusMessageLoader object encapsulates the process of converting 457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * a byte stream into a series of DBusMessage. It buffers the incoming 467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * bytes as efficiently as possible, and generates a queue of 477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * messages. DBusMessageLoader is typically used as part of a 487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * DBusTransport implementation. The DBusTransport then hands off 497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the loaded messages to a DBusConnection, making the messages 507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * visible to the application. 517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo write tests for break-loader that a) randomly delete header 537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * fields and b) set string fields to zero-length and other funky 547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * values. 557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Implementation details of DBusMessageLoader. 607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * All members are private. 617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstruct DBusMessageLoader 637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int refcount; /**< Reference count. */ 657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString data; /**< Buffered data */ 677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusList *messages; /**< Complete messages. */ 697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long max_message_size; /**< Maximum size of a message */ 71a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering long max_message_unix_fds; /**< Maximum unix fds in a message */ 727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 73a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering DBusValidity corruption_reason; /**< why we were corrupted */ 747bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned int corrupted : 1; /**< We got broken data, and are no longer working */ 769d21554dd3b560952cd5aa607c4ec07898c0b260Havoc Pennington 77a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned int buffer_outstanding : 1; /**< Someone is using the buffer to read */ 78a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 79a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering#ifdef HAVE_UNIX_FD_PASSING 80a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned int unix_fds_outstanding : 1; /**< Someone is using the unix fd array to read */ 81a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 82a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering int *unix_fds; /**< File descriptors that have been read from the transport but not yet been handed to any message. Array will be allocated at first use. */ 83a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned n_unix_fds_allocated; /**< Number of file descriptors this array has space for */ 84a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned n_unix_fds; /**< Number of valid file descriptors in array */ 85a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering#endif 867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington}; 877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** How many bits are in the changed_stamp used to validate iterators */ 907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define CHANGED_STAMP_BITS 21 917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @brief Internals of DBusMessage 947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Object representing a message received from or to be sent to 967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * another application. This is an opaque object, all members 977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * are private. 987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstruct DBusMessage 1007bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 1017bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusAtomic refcount; /**< Reference count */ 1027bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1037bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusHeader header; /**< Header network data and associated cache */ 1047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString body; /**< Body network data. */ 1067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington char byte_order; /**< Message byte order. */ 1087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned int locked : 1; /**< Message being sent, no modifications allowed. */ 1107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 11198ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington#ifndef DBUS_DISABLE_CHECKS 11298ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington unsigned int in_cache : 1; /**< Has been "freed" since it's in the cache (this is a debug feature) */ 11398ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington#endif 114a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 1157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusList *size_counters; /**< 0-N DBusCounter used to track message size. */ 1167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long size_counter_delta; /**< Size we incremented the size counters by. */ 1177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_uint32_t changed_stamp : CHANGED_STAMP_BITS; /**< Incremented when iterators are invalidated. */ 1197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */ 1217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifndef DBUS_DISABLE_CHECKS 1237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int generation; /**< _dbus_current_generation when message was created */ 1247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif 125a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 126a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering#ifdef HAVE_UNIX_FD_PASSING 127a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering int *unix_fds; 128a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering /**< Unix file descriptors associated with this message. These are 129a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering closed when the message is destroyed, hence make sure to dup() 130a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering them when adding or removing them here. */ 131a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned n_unix_fds; /**< Number of valid fds in the array */ 132a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering unsigned n_unix_fds_allocated; /**< Allocated size of the array */ 133a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering#endif 1347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington}; 1357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t _dbus_message_iter_get_args_valist (DBusMessageIter *iter, 1377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusError *error, 1387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int first_arg_type, 1397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington va_list var_args); 1407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 141a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 142a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poetteringvoid _dbus_check_fdleaks(void); 143a0cc21f8bb6752ffe0ee5f4f5b575dc50d6d46aeLennart Poettering 1447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** @} */ 1457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1467bf62e31a3c820852271768fafc04ba95c31a19fHavoc PenningtonDBUS_END_DECLS 1477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif /* DBUS_MESSAGE_H */ 149