From b29ea9115ea3277354b7ccbe442026279220f4ac Mon Sep 17 00:00:00 2001 From: Havoc Pennington Date: Mon, 11 Aug 2003 02:11:58 +0000 Subject: 2003-08-10 Havoc Pennington * tools/dbus-send.c (main): add --type argument, for now supporting only method_call and signal types. * tools/dbus-print-message.c: print message type * dbus/dbus-connection.c (_dbus_connection_new_for_transport): init connection->objects * doc/dbus-specification.sgml: fix sgml * bus/*.c: port over to object-instance API changes * test/test-service.c: ditto * dbus/dbus-message.c (dbus_message_create_header): allow #NULL name, we will have to fix up the rest of the code to also handle this (dbus_message_new): generic message-creation call (set_string_field): allow appending name field --- dbus/dbus-connection.c | 1 + dbus/dbus-message.c | 106 +++++++++++++++++++++++++++++++++++++++++--- dbus/dbus-message.h | 5 +++ dbus/dbus-object-registry.c | 2 +- 4 files changed, 107 insertions(+), 7 deletions(-) (limited to 'dbus') diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index 407b4d24..d30ccb0a 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -753,6 +753,7 @@ _dbus_connection_new_for_transport (DBusTransport *transport) connection->outgoing_counter = outgoing_counter; connection->filter_list = NULL; connection->last_dispatch_status = DBUS_DISPATCH_COMPLETE; /* so we're notified first time there's data */ + connection->objects = objects; _dbus_data_slot_list_init (&connection->slot_list); diff --git a/dbus/dbus-message.c b/dbus/dbus-message.c index 8ea653f0..8f25e076 100644 --- a/dbus/dbus-message.c +++ b/dbus/dbus-message.c @@ -593,6 +593,14 @@ set_string_field (DBusMessage *message, return append_string_field (message, field, DBUS_HEADER_FIELD_SENDER, value); + case FIELD_NAME: + return append_string_field (message, field, + DBUS_HEADER_FIELD_NAME, + value); + case FIELD_SERVICE: + return append_string_field (message, field, + DBUS_HEADER_FIELD_SERVICE, + value); default: _dbus_assert_not_reached ("appending a string field we don't support appending"); return FALSE; @@ -849,12 +857,14 @@ dbus_message_create_header (DBusMessage *message, return FALSE; } - _dbus_assert (name != NULL); - if (!append_string_field (message, - FIELD_NAME, - DBUS_HEADER_FIELD_NAME, - name)) - return FALSE; + if (name != NULL) + { + if (!append_string_field (message, + FIELD_NAME, + DBUS_HEADER_FIELD_NAME, + name)) + return FALSE; + } return TRUE; } @@ -948,6 +958,35 @@ dbus_message_new_empty_header (void) return message; } +/** + * Constructs a new message of the given message type. + * Types include #DBUS_MESSAGE_TYPE_METHOD_CALL, + * #DBUS_MESSAGE_TYPE_SIGNAL, and so forth. + * + * @param message_type type of message + * @returns new message or #NULL If no memory + */ +DBusMessage* +dbus_message_new (int message_type) +{ + DBusMessage *message; + + _dbus_return_val_if_fail (message_type != DBUS_MESSAGE_TYPE_INVALID, NULL); + + message = dbus_message_new_empty_header (); + if (message == NULL) + return NULL; + + if (!dbus_message_create_header (message, + message_type, + NULL, NULL)) + { + dbus_message_unref (message); + return NULL; + } + + return message; +} /** * Constructs a new message to invoke a method on a remote @@ -1273,6 +1312,34 @@ dbus_message_get_type (DBusMessage *message) return type; } + +/** + * Sets the message name. + * + * @param message the message + * @param name the name + * @returns #FALSE if not enough memory + */ +dbus_bool_t +dbus_message_set_name (DBusMessage *message, + const char *name) +{ + _dbus_return_val_if_fail (message != NULL, FALSE); + _dbus_return_val_if_fail (!message->locked, FALSE); + + if (name == NULL) + { + delete_string_field (message, FIELD_NAME); + return TRUE; + } + else + { + return set_string_field (message, + FIELD_NAME, + name); + } +} + /** * Gets the name of a message. * @@ -1287,6 +1354,33 @@ dbus_message_get_name (DBusMessage *message) return get_string_field (message, FIELD_NAME, NULL); } +/** + * Sets the message's destination service. + * + * @param message the message + * @param destination the destination service name + * @returns #FALSE if not enough memory + */ +dbus_bool_t +dbus_message_set_destination (DBusMessage *message, + const char *destination) +{ + _dbus_return_val_if_fail (message != NULL, FALSE); + _dbus_return_val_if_fail (!message->locked, FALSE); + + if (destination == NULL) + { + delete_string_field (message, FIELD_SERVICE); + return TRUE; + } + else + { + return set_string_field (message, + FIELD_SERVICE, + destination); + } +} + /** * Gets the destination service of a message. * diff --git a/dbus/dbus-message.h b/dbus/dbus-message.h index de5dc833..1b61c8d1 100644 --- a/dbus/dbus-message.h +++ b/dbus/dbus-message.h @@ -57,6 +57,7 @@ struct DBusMessageIter void *pad3; }; +DBusMessage* dbus_message_new (int message_type); DBusMessage* dbus_message_new_method_call (const char *name, const char *destination_service); DBusMessage* dbus_message_new_method_return (DBusMessage *method_call); @@ -70,7 +71,11 @@ DBusMessage *dbus_message_copy (const DBusMessage *message); void dbus_message_ref (DBusMessage *message); void dbus_message_unref (DBusMessage *message); int dbus_message_get_type (DBusMessage *message); +dbus_bool_t dbus_message_set_name (DBusMessage *message, + const char *name); const char* dbus_message_get_name (DBusMessage *message); +dbus_bool_t dbus_message_set_destination (DBusMessage *message, + const char *destination); const char* dbus_message_get_destination (DBusMessage *message); dbus_bool_t dbus_message_set_sender (DBusMessage *message, const char *sender); diff --git a/dbus/dbus-object-registry.c b/dbus/dbus-object-registry.c index 55f8f749..f86a365f 100644 --- a/dbus/dbus-object-registry.c +++ b/dbus/dbus-object-registry.c @@ -827,7 +827,7 @@ handle_signal_and_unlock (DBusObjectRegistry *registry, object_entry = validate_id (registry, &objects[i].id); if (object_entry != NULL) { - DBusObjectVTable *vtable; + const DBusObjectVTable *vtable; DBusObjectInfo info; info_from_entry (registry, &info, object_entry); -- cgit