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