diff options
author | Mark McLoughlin <mark@skynet.ie> | 2003-09-21 18:43:20 +0000 |
---|---|---|
committer | Mark McLoughlin <mark@skynet.ie> | 2003-09-21 18:43:20 +0000 |
commit | daf8d6579e1ae0ea748810b63180bd5eea2ab9c4 (patch) | |
tree | 940fca6401e72cfbf8ed47fd9b185f21377483b2 /dbus/dbus-message-builder.c | |
parent | fafc38bb45db8031fc6f252e86df86dc585fefc9 (diff) |
2003-09-21 Mark McLoughlin <mark@skynet.ie>
* doc/dbus-specification.sgml: Change the header field name
to be an enum and update the rest of the spec to reference
the fields using the conventinal name.
* dbus/dbus-protocol.h: update to reflect the spec.
* doc/TODO: add item to remove the 4 byte alignment requirement.
* dbus/dbus-message.c: Remove the code to generalise the
header/body length and serial number header fields as named
header fields so we can reference field names using the
protocol values.
(append_int_field), (append_uint_field), (append_string_field):
Append the field name as a byte rather than four chars.
(delete_int_or_uint_field), (delete_string_field): reflect the
fact that the field name and typecode now occupy 4 bytes instead
of 8.
(decode_string_field), (decode_header_data): update to reflect
protocol changes and move the field specific encoding from
decode_string_field() back into decode_header_data().
* dbus/dbus-internals.[ch]: (_dbus_header_field_to_string):
Add utility to aid debugging.
* dbus/dbus-message-builder.c:
(append_string_field), (_dbus_message_data_load): Update to
reflect protocol changes; Change the FIELD_NAME directive
to HEADER_FIELD and allow it to take the field's conventional
name rather than the actual value.
* test/data/*/*.message: Update to use HEADER_FIELD instead
of FIELD_NAME; Always align the header on an 8 byte boundary
*before* updating the header length.
Diffstat (limited to 'dbus/dbus-message-builder.c')
-rw-r--r-- | dbus/dbus-message-builder.c | 46 |
1 files changed, 34 insertions, 12 deletions
diff --git a/dbus/dbus-message-builder.c b/dbus/dbus-message-builder.c index 52c78227..7e2dff0d 100644 --- a/dbus/dbus-message-builder.c +++ b/dbus/dbus-message-builder.c @@ -294,7 +294,7 @@ message_type_from_string (const DBusString *str, static dbus_bool_t append_string_field (DBusString *dest, int endian, - const char *field_name, + int field, int type, const char *value) { @@ -306,9 +306,9 @@ append_string_field (DBusString *dest, return FALSE; } - if (!_dbus_string_append (dest, field_name)) + if (!_dbus_string_append_byte (dest, field)) { - _dbus_warn ("couldn't append field name\n"); + _dbus_warn ("couldn't append field name byte\n"); return FALSE; } @@ -363,7 +363,7 @@ append_string_field (DBusString *dest, * (or if no START_LENGTH, absolute length) * LENGTH <name> inserts the saved length of the same name * CHOP <N> chops last N bytes off the data - * FIELD_NAME <abcd> inserts 4-byte field name + * HEADER_FIELD <fieldname> inserts a header field name byte * TYPE <typename> inserts a typecode byte * @endcode * @@ -679,14 +679,34 @@ _dbus_message_data_load (DBusString *dest, PERFORM_UNALIGN (dest); } else if (_dbus_string_starts_with_c_str (&line, - "FIELD_NAME")) + "HEADER_FIELD")) { + int field; + _dbus_string_delete_first_word (&line); - if (_dbus_string_get_length (&line) != 4) + if (_dbus_string_starts_with_c_str (&line, "INVALID")) + field = DBUS_HEADER_FIELD_INVALID; + else if (_dbus_string_starts_with_c_str (&line, "PATH")) + field = DBUS_HEADER_FIELD_PATH; + else if (_dbus_string_starts_with_c_str (&line, "INTERFACE")) + field = DBUS_HEADER_FIELD_INTERFACE; + else if (_dbus_string_starts_with_c_str (&line, "MEMBER")) + field = DBUS_HEADER_FIELD_MEMBER; + else if (_dbus_string_starts_with_c_str (&line, "ERROR_NAME")) + field = DBUS_HEADER_FIELD_ERROR_NAME; + else if (_dbus_string_starts_with_c_str (&line, "REPLY_SERIAL")) + field = DBUS_HEADER_FIELD_REPLY_SERIAL; + else if (_dbus_string_starts_with_c_str (&line, "SERVICE")) + field = DBUS_HEADER_FIELD_SERVICE; + else if (_dbus_string_starts_with_c_str (&line, "SENDER_SERVICE")) + field = DBUS_HEADER_FIELD_SENDER_SERVICE; + else if (_dbus_string_starts_with_c_str (&line, "UNKNOWN")) + field = 22; /* random unknown header field */ + else { - _dbus_warn ("Field name must be four characters not \"%s\"\n", - _dbus_string_get_const_data (&line)); + _dbus_warn ("%s is not a valid header field name\n", + _dbus_string_get_const_data (&line)); goto parse_failed; } @@ -694,10 +714,12 @@ _dbus_message_data_load (DBusString *dest, unalign = FALSE; else _dbus_string_align_length (dest, 4); - - if (!_dbus_string_copy (&line, 0, dest, - _dbus_string_get_length (dest))) - goto parse_failed; + + if (!_dbus_string_append_byte (dest, field)) + { + _dbus_warn ("could not append header field name byte\n"); + goto parse_failed; + } } else if (_dbus_string_starts_with_c_str (&line, "TYPE")) |