dbus-message-private.h revision 5baf2f856a9c6625993234855b07680da1c8916f
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 205baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 237bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifndef DBUS_MESSAGE_PRIVATE_H 247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define DBUS_MESSAGE_PRIVATE_H 257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 267bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-message.h> 277bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-message-internal.h> 287bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-string.h> 297bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-dataslot.h> 307bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#include <dbus/dbus-marshal-header.h> 317bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 327bf62e31a3c820852271768fafc04ba95c31a19fHavoc PenningtonDBUS_BEGIN_DECLS 337bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 347bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 357bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @addtogroup DBusMessageInternals 367bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @{ 377bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 387bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 397bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 407bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @typedef DBusMessageLoader 417bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 427bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * The DBusMessageLoader object encapsulates the process of converting 437bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * a byte stream into a series of DBusMessage. It buffers the incoming 447bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * bytes as efficiently as possible, and generates a queue of 457bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * messages. DBusMessageLoader is typically used as part of a 467bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * DBusTransport implementation. The DBusTransport then hands off 477bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * the loaded messages to a DBusConnection, making the messages 487bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * visible to the application. 497bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 507bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @todo write tests for break-loader that a) randomly delete header 517bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * fields and b) set string fields to zero-length and other funky 527bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * values. 537bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 547bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 557bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 567bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 577bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Implementation details of DBusMessageLoader. 587bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * All members are private. 597bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 607bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstruct DBusMessageLoader 617bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 627bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int refcount; /**< Reference count. */ 637bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 647bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString data; /**< Buffered data */ 657bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 667bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusList *messages; /**< Complete messages. */ 677bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 687bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long max_message_size; /**< Maximum size of a message */ 697bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 707bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned int buffer_outstanding : 1; /**< Someone is using the buffer to read */ 717bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 727bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned int corrupted : 1; /**< We got broken data, and are no longer working */ 739d21554dd3b560952cd5aa607c4ec07898c0b260Havoc Pennington 749d21554dd3b560952cd5aa607c4ec07898c0b260Havoc Pennington DBusValidity corruption_reason; /**< why we were corrupted */ 757bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington}; 767bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 777bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 787bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** How many bits are in the changed_stamp used to validate iterators */ 797bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#define CHANGED_STAMP_BITS 21 807bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 817bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** 827bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * @brief Internals of DBusMessage 837bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * 847bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * Object representing a message received from or to be sent to 857bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * another application. This is an opaque object, all members 867bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington * are private. 877bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington */ 887bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtonstruct DBusMessage 897bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington{ 907bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusAtomic refcount; /**< Reference count */ 917bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 927bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusHeader header; /**< Header network data and associated cache */ 937bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 947bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusString body; /**< Body network data. */ 957bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 967bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington char byte_order; /**< Message byte order. */ 977bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 987bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington unsigned int locked : 1; /**< Message being sent, no modifications allowed. */ 997bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 10098ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington#ifndef DBUS_DISABLE_CHECKS 10198ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington unsigned int in_cache : 1; /**< Has been "freed" since it's in the cache (this is a debug feature) */ 10298ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington#endif 10398ad8a8ec6626f7f5c78915b6bdf2be688b4839fHavoc Pennington 1047bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusList *size_counters; /**< 0-N DBusCounter used to track message size. */ 1057bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington long size_counter_delta; /**< Size we incremented the size counters by. */ 1067bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1077bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington dbus_uint32_t changed_stamp : CHANGED_STAMP_BITS; /**< Incremented when iterators are invalidated. */ 1087bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1097bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusDataSlotList slot_list; /**< Data stored by allocated integer ID */ 1107bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1117bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#ifndef DBUS_DISABLE_CHECKS 1127bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int generation; /**< _dbus_current_generation when message was created */ 1137bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif 1147bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington}; 1157bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1167bf62e31a3c820852271768fafc04ba95c31a19fHavoc Penningtondbus_bool_t _dbus_message_iter_get_args_valist (DBusMessageIter *iter, 1177bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington DBusError *error, 1187bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington int first_arg_type, 1197bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington va_list var_args); 1207bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1217bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington/** @} */ 1227bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1237bf62e31a3c820852271768fafc04ba95c31a19fHavoc PenningtonDBUS_END_DECLS 1247bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington 1257bf62e31a3c820852271768fafc04ba95c31a19fHavoc Pennington#endif /* DBUS_MESSAGE_H */ 126