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