Home | History | Annotate | Download | only in dbus
      1 /* -*- mode: C; c-file-style: "gnu" -*- */
      2 /* dbus-marshal-header.h  Managing marshaling/demarshaling of message headers
      3  *
      4  * Copyright (C) 2005  Red Hat, Inc.
      5  *
      6  * Licensed under the Academic Free License version 2.1
      7  *
      8  * This program is free software; you can redistribute it and/or modify
      9  * it under the terms of the GNU General Public License as published by
     10  * the Free Software Foundation; either version 2 of the License, or
     11  * (at your option) any later version.
     12  *
     13  * This program is distributed in the hope that it will be useful,
     14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  * GNU General Public License for more details.
     17  *
     18  * You should have received a copy of the GNU General Public License
     19  * along with this program; if not, write to the Free Software
     20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     21  *
     22  */
     23 
     24 #ifndef DBUS_MARSHAL_HEADER_H
     25 #define DBUS_MARSHAL_HEADER_H
     26 
     27 #include <config.h>
     28 #include <dbus/dbus-marshal-basic.h>
     29 #include <dbus/dbus-marshal-validate.h>
     30 
     31 #ifndef PACKAGE
     32 #error "config.h not included here"
     33 #endif
     34 
     35 typedef struct DBusHeader      DBusHeader;
     36 typedef struct DBusHeaderField DBusHeaderField;
     37 
     38 #define _DBUS_HEADER_FIELD_VALUE_UNKNOWN -1
     39 #define _DBUS_HEADER_FIELD_VALUE_NONEXISTENT -2
     40 
     41 /**
     42  * Cached information about a header field in the message
     43  */
     44 struct DBusHeaderField
     45 {
     46   int            value_pos; /**< Position of field value, or -1/-2 */
     47 };
     48 
     49 /**
     50  * Message header data and some cached details of it.
     51  */
     52 struct DBusHeader
     53 {
     54   DBusString data; /**< Header network data, stored
     55                     * separately from body so we can
     56                     * independently realloc it.
     57                     */
     58 
     59   DBusHeaderField fields[DBUS_HEADER_FIELD_LAST + 1]; /**< Track the location
     60                                                        * of each field in header
     61                                                        */
     62 
     63   dbus_uint32_t padding : 3;        /**< bytes of alignment in header */
     64   dbus_uint32_t byte_order : 8;     /**< byte order of header */
     65 };
     66 
     67 dbus_bool_t   _dbus_header_init                   (DBusHeader        *header,
     68                                                    int                byte_order);
     69 void          _dbus_header_free                   (DBusHeader        *header);
     70 void          _dbus_header_reinit                 (DBusHeader        *header,
     71                                                    int                byte_order);
     72 dbus_bool_t   _dbus_header_create                 (DBusHeader        *header,
     73                                                    int                type,
     74                                                    const char        *destination,
     75                                                    const char        *path,
     76                                                    const char        *interface,
     77                                                    const char        *member,
     78                                                    const char        *error_name);
     79 dbus_bool_t   _dbus_header_copy                   (const DBusHeader  *header,
     80                                                    DBusHeader        *dest);
     81 int           _dbus_header_get_message_type       (DBusHeader        *header);
     82 void          _dbus_header_set_serial             (DBusHeader        *header,
     83                                                    dbus_uint32_t      serial);
     84 dbus_uint32_t _dbus_header_get_serial             (DBusHeader        *header);
     85 void          _dbus_header_update_lengths         (DBusHeader        *header,
     86                                                    int                body_len);
     87 dbus_bool_t   _dbus_header_set_field_basic        (DBusHeader        *header,
     88                                                    int                field,
     89                                                    int                type,
     90                                                    const void        *value);
     91 dbus_bool_t   _dbus_header_get_field_basic        (DBusHeader        *header,
     92                                                    int                field,
     93                                                    int                type,
     94                                                    void              *value);
     95 dbus_bool_t   _dbus_header_get_field_raw          (DBusHeader        *header,
     96                                                    int                field,
     97                                                    const DBusString **str,
     98                                                    int               *pos);
     99 dbus_bool_t   _dbus_header_delete_field           (DBusHeader        *header,
    100                                                    int                field);
    101 void          _dbus_header_toggle_flag            (DBusHeader        *header,
    102                                                    dbus_uint32_t      flag,
    103                                                    dbus_bool_t        value);
    104 dbus_bool_t   _dbus_header_get_flag               (DBusHeader        *header,
    105                                                    dbus_uint32_t      flag);
    106 dbus_bool_t   _dbus_header_ensure_signature       (DBusHeader        *header,
    107                                                    DBusString       **type_str,
    108                                                    int               *type_pos);
    109 dbus_bool_t   _dbus_header_have_message_untrusted (int                max_message_length,
    110                                                    DBusValidity      *validity,
    111                                                    int               *byte_order,
    112                                                    int               *fields_array_len,
    113                                                    int               *header_len,
    114                                                    int               *body_len,
    115                                                    const DBusString  *str,
    116                                                    int                start,
    117                                                    int                len);
    118 dbus_bool_t   _dbus_header_load                   (DBusHeader        *header,
    119                                                    DBusValidationMode mode,
    120                                                    DBusValidity      *validity,
    121                                                    int                byte_order,
    122                                                    int                fields_array_len,
    123                                                    int                header_len,
    124                                                    int                body_len,
    125                                                    const DBusString  *str,
    126                                                    int                start,
    127                                                    int                len);
    128 void          _dbus_header_byteswap               (DBusHeader        *header,
    129                                                    int                new_order);
    130 
    131 
    132 
    133 #endif /* DBUS_MARSHAL_HEADER_H */
    134