From 9c3d566e95c9080f6040c64531b0ccae22bd5d74 Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Sat, 15 Jan 2005 07:15:38 +0000 Subject: 2005-01-15 Havoc Pennington * Land the new message args API and type system. This patch is huge, but the public API change is not really large. The set of D-BUS types has changed somewhat, and the arg "getters" are more geared toward language bindings; they don't make a copy, etc. There are also some known issues. See these emails for details on this huge patch: http://lists.freedesktop.org/archives/dbus/2004-December/001836.html http://lists.freedesktop.org/archives/dbus/2005-January/001922.html * dbus/dbus-marshal-*: all the new stuff * dbus/dbus-message.c: basically rewritten * dbus/dbus-memory.c (check_guards): with "guards" enabled, init freed blocks to be all non-nul bytes so using freed memory is less likely to work right * dbus/dbus-internals.c (_dbus_test_oom_handling): add DBUS_FAIL_MALLOC=N environment variable, so you can do DBUS_FAIL_MALLOC=0 to skip the out-of-memory checking, or DBUS_FAIL_MALLOC=10 to make it really, really, really slow and thorough. * qt/message.cpp: port to the new message args API (operator<<): use str.utf8() rather than str.unicode() (pretty sure this is right from the Qt docs?) * glib/dbus-gvalue.c: port to the new message args API * bus/dispatch.c, bus/driver.c: port to the new message args API * dbus/dbus-string.c (_dbus_string_init_const_len): initialize the "locked" flag to TRUE and align_offset to 0; I guess we never looked at these anyhow, but seems cleaner. * dbus/dbus-string.h (_DBUS_STRING_ALLOCATION_PADDING): move allocation padding macro to this header; use it to implement (_DBUS_STRING_STATIC): ability to declare a static string. * dbus/dbus-message.c (_dbus_message_has_type_interface_member): change to return TRUE if the interface is not set. * dbus/dbus-string.[hc]: move the D-BUS specific validation stuff to dbus-marshal-validate.[hc] * dbus/dbus-marshal-basic.c (_dbus_type_to_string): move here from dbus-internals.c * dbus/Makefile.am: cut over from dbus-marshal.[hc] to dbus-marshal-*.[hc] * dbus/dbus-object-tree.c (_dbus_decompose_path): move this function here from dbus-marshal.c --- doc/TODO | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) (limited to 'doc') diff --git a/doc/TODO b/doc/TODO index a63b1f0d..f670df80 100644 --- a/doc/TODO +++ b/doc/TODO @@ -15,11 +15,11 @@ Important for 1.0 which of these functions to include, in light of the fact that GLib/Qt native stubs will probably also exist. - - the invalid messages in the test suite are all useless because - they are invalid for the wrong reasons due to protocol changes. - (Consider extending test suite to validate that they are - invalid for right reason, e.g. an "INVALID_ERROR Foo" line - in the message files) + - the "break loader" and valid/invalid message tests are all disabled; + they need to be fixed and re-enabled with the new message args stuff. + I think I want to drop the .message files thing and just have code + that generates messages, more like the tests for + dbus-marshal-recursive.c - modify the auth protocol to also support other initial-handshake type of information: @@ -30,26 +30,6 @@ Important for 1.0 since protocol probably modifies the API. But we could have it there as a safety net. - - re_align_field_recurse() in dbus-message.c is broken because it - crashes on some types of header field values. security problem. - - - modify the wire protocol to keep the args signature separate - from the args themselves. Make the name of TYPE_CUSTOM part - of the type signature, rather than part of the value. - Then you have the full typecheck in a single string. - See http://freedesktop.org/pipermail/dbus/2004-June/001169.html - - Subnote: STRING_OR_NIL is wrong, doesn't work in C++ etc. ; should - not have done that. Use empty string or special string values or separate functions/signals - or whatever instead. - - Subnote: For recursive types, one approach is that "structs" are done as parens, - so e.g. s(ii) is a string and struct { int; int; } etc. Type codes - then all have to be done as strings not single ints. - We could also put the type signature for the message body in a - header field. - An "any" type has the type string included in the value. - - need to define bus behavior if you send a message to yourself; is it an error, or allowed? If allowed, we need to have a test for it in the test suite. @@ -58,9 +38,12 @@ Important for 1.0 (though they are kind of a pita to pass in as size_t with the varargs, so maybe not - what does glib do with g_object_get()?) - - it's probably obnoxious that reading/writing bools doesn't return dbus_bool_t; - the only possible solution I think is to change dbus_bool_t to unsigned char, - but that may cause wackiness elsewhere. + - it's probably obnoxious that reading/writing bools doesn't return + dbus_bool_t; solution is probably to change bool to 32 bits on the + wire + + - maybe change and don't align variant bodies to 8-boundary, it uses + up lots of space in a typical header - rename the service thing. unique service names (":1") and well-known ("org.foo.bar") should have different names probably; something like @@ -68,6 +51,12 @@ Important for 1.0 "application id" for the unique and "common name" or "published name" for the well-known; not sure yet. + - things are broken now when mixing endianness, because DBusMessage + doesn't autoswap itself when you access a message of alternate + endian. + + - add string array support back to append_args() + Important for 1.0 GLib Bindings === @@ -103,6 +92,8 @@ Might as Well for 1.0 - connection_open/connection_disconnect lacks symmetry, open/close or connect/disconnect + - protocol version in each message is pretty silly + Can Be Post 1.0 === -- cgit