1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 24 #ifndef DBUS_MARSHAL_HEADER_H 25 #define DBUS_MARSHAL_HEADER_H 26 27 #include <dbus/dbus-marshal-basic.h> 28 #include <dbus/dbus-marshal-validate.h> 29 30 typedef struct DBusHeader DBusHeader; 31 typedef struct DBusHeaderField DBusHeaderField; 32 33 #define _DBUS_HEADER_FIELD_VALUE_UNKNOWN -1 34 #define _DBUS_HEADER_FIELD_VALUE_NONEXISTENT -2 35 36 /** 37 * Cached information about a header field in the message 38 */ 39 struct DBusHeaderField 40 { 41 int value_pos; /**< Position of field value, or -1/-2 */ 42 }; 43 44 /** 45 * Message header data and some cached details of it. 46 */ 47 struct DBusHeader 48 { 49 DBusString data; /**< Header network data, stored 50 * separately from body so we can 51 * independently realloc it. 52 */ 53 54 DBusHeaderField fields[DBUS_HEADER_FIELD_LAST + 1]; /**< Track the location 55 * of each field in header 56 */ 57 58 dbus_uint32_t padding : 3; /**< bytes of alignment in header */ 59 dbus_uint32_t byte_order : 8; /**< byte order of header */ 60 }; 61 62 dbus_bool_t _dbus_header_init (DBusHeader *header); 63 void _dbus_header_free (DBusHeader *header); 64 void _dbus_header_reinit (DBusHeader *header); 65 dbus_bool_t _dbus_header_create (DBusHeader *header, 66 int byte_order, 67 int type, 68 const char *destination, 69 const char *path, 70 const char *interface, 71 const char *member, 72 const char *error_name); 73 dbus_bool_t _dbus_header_copy (const DBusHeader *header, 74 DBusHeader *dest); 75 int _dbus_header_get_message_type (DBusHeader *header); 76 void _dbus_header_set_serial (DBusHeader *header, 77 dbus_uint32_t serial); 78 dbus_uint32_t _dbus_header_get_serial (DBusHeader *header); 79 void _dbus_header_update_lengths (DBusHeader *header, 80 int body_len); 81 dbus_bool_t _dbus_header_set_field_basic (DBusHeader *header, 82 int field, 83 int type, 84 const void *value); 85 dbus_bool_t _dbus_header_get_field_basic (DBusHeader *header, 86 int field, 87 int type, 88 void *value); 89 dbus_bool_t _dbus_header_get_field_raw (DBusHeader *header, 90 int field, 91 const DBusString **str, 92 int *pos); 93 dbus_bool_t _dbus_header_delete_field (DBusHeader *header, 94 int field); 95 void _dbus_header_toggle_flag (DBusHeader *header, 96 dbus_uint32_t flag, 97 dbus_bool_t value); 98 dbus_bool_t _dbus_header_get_flag (DBusHeader *header, 99 dbus_uint32_t flag); 100 dbus_bool_t _dbus_header_ensure_signature (DBusHeader *header, 101 DBusString **type_str, 102 int *type_pos); 103 dbus_bool_t _dbus_header_have_message_untrusted (int max_message_length, 104 DBusValidity *validity, 105 int *byte_order, 106 int *fields_array_len, 107 int *header_len, 108 int *body_len, 109 const DBusString *str, 110 int start, 111 int len); 112 dbus_bool_t _dbus_header_load (DBusHeader *header, 113 DBusValidationMode mode, 114 DBusValidity *validity, 115 int byte_order, 116 int fields_array_len, 117 int header_len, 118 int body_len, 119 const DBusString *str, 120 int start, 121 int len); 122 void _dbus_header_byteswap (DBusHeader *header, 123 int new_order); 124 char _dbus_header_get_byte_order (const DBusHeader *header); 125 126 127 128 #endif /* DBUS_MARSHAL_HEADER_H */ 129