1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
29c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington/* dbus-marshal-header.h  Managing marshaling/demarshaling of message headers
39c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
49c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * Copyright (C) 2005  Red Hat, Inc.
59c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
69c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * Licensed under the Academic Free License version 2.1
79c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
89c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * This program is free software; you can redistribute it and/or modify
99c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * it under the terms of the GNU General Public License as published by
109c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * the Free Software Foundation; either version 2 of the License, or
119c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * (at your option) any later version.
129c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
139c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * This program is distributed in the hope that it will be useful,
149c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of
159c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
169c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * GNU General Public License for more details.
179c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
189c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * You should have received a copy of the GNU General Public License
199c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc 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
219c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington *
229c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington */
239c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
249c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#ifndef DBUS_MARSHAL_HEADER_H
259c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#define DBUS_MARSHAL_HEADER_H
269c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
279c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#include <dbus/dbus-marshal-basic.h>
289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#include <dbus/dbus-marshal-validate.h>
299c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
309c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtontypedef struct DBusHeader      DBusHeader;
319c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtontypedef struct DBusHeaderField DBusHeaderField;
329c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
339c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#define _DBUS_HEADER_FIELD_VALUE_UNKNOWN -1
349c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#define _DBUS_HEADER_FIELD_VALUE_NONEXISTENT -2
359c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
369c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington/**
379c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington * Cached information about a header field in the message
389c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington */
399c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonstruct DBusHeaderField
409c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington{
419c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington  int            value_pos; /**< Position of field value, or -1/-2 */
429c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington};
439c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
4431988af4089f3793940417535f8eabaae1ac26c8Havoc Pennington/**
4531988af4089f3793940417535f8eabaae1ac26c8Havoc Pennington * Message header data and some cached details of it.
4631988af4089f3793940417535f8eabaae1ac26c8Havoc Pennington */
479c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonstruct DBusHeader
489c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington{
499c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington  DBusString data; /**< Header network data, stored
509c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                    * separately from body so we can
519c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                    * independently realloc it.
529c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                    */
539c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
549c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington  DBusHeaderField fields[DBUS_HEADER_FIELD_LAST + 1]; /**< Track the location
559c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                       * of each field in header
569c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                       */
579c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
589c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington  dbus_uint32_t padding : 3;        /**< bytes of alignment in header */
599c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington  dbus_uint32_t byte_order : 8;     /**< byte order of header */
609c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington};
619c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
629c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_init                   (DBusHeader        *header,
639c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                byte_order);
649c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonvoid          _dbus_header_free                   (DBusHeader        *header);
659c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonvoid          _dbus_header_reinit                 (DBusHeader        *header,
669c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                byte_order);
679c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_create                 (DBusHeader        *header,
689c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                type,
699c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const char        *destination,
709c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const char        *path,
719c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const char        *interface,
729c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const char        *member,
739c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const char        *error_name);
749c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_copy                   (const DBusHeader  *header,
759c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   DBusHeader        *dest);
769c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonint           _dbus_header_get_message_type       (DBusHeader        *header);
779c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonvoid          _dbus_header_set_serial             (DBusHeader        *header,
789c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   dbus_uint32_t      serial);
799c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_uint32_t _dbus_header_get_serial             (DBusHeader        *header);
809c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonvoid          _dbus_header_update_lengths         (DBusHeader        *header,
819c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                body_len);
829c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_set_field_basic        (DBusHeader        *header,
839c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                field,
849c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                type,
859c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const void        *value);
869c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_get_field_basic        (DBusHeader        *header,
879c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                field,
889c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                type,
899c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   void              *value);
909c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_get_field_raw          (DBusHeader        *header,
919c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                field,
929c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const DBusString **str,
939c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *pos);
949c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_delete_field           (DBusHeader        *header,
959c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                field);
969c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtonvoid          _dbus_header_toggle_flag            (DBusHeader        *header,
979c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   dbus_uint32_t      flag,
989c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   dbus_bool_t        value);
999c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_get_flag               (DBusHeader        *header,
1009c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   dbus_uint32_t      flag);
1019c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_ensure_signature       (DBusHeader        *header,
1029c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   DBusString       **type_str,
1039c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *type_pos);
1049c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Penningtondbus_bool_t   _dbus_header_have_message_untrusted (int                max_message_length,
1059c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   DBusValidity      *validity,
1069c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *byte_order,
1079c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *fields_array_len,
1089c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *header_len,
1099c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int               *body_len,
1109c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const DBusString  *str,
1119c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                start,
1129c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                len);
113606eb2106b3d7f5cd36a4f1786d281b771bb1bf7Havoc Penningtondbus_bool_t   _dbus_header_load                   (DBusHeader        *header,
114606eb2106b3d7f5cd36a4f1786d281b771bb1bf7Havoc Pennington                                                   DBusValidationMode mode,
1159c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   DBusValidity      *validity,
1169c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                byte_order,
1179c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                fields_array_len,
1189c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                header_len,
1199c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                body_len,
1209c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   const DBusString  *str,
1219c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                start,
1229c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington                                                   int                len);
123fddbc09c4a9125fcb168fb31ff300d4132919ea6Havoc Penningtonvoid          _dbus_header_byteswap               (DBusHeader        *header,
124fddbc09c4a9125fcb168fb31ff300d4132919ea6Havoc Pennington                                                   int                new_order);
1259c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
1269c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
1279c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington
1289c3d566e95c9080f6040c64531b0ccae22bd5d74Havoc Pennington#endif /* DBUS_MARSHAL_HEADER_H */
129