diff options
| author | John (J5) Palmieri <johnp@redhat.com> | 2005-11-22 20:37:00 +0000 | 
|---|---|---|
| committer | John (J5) Palmieri <johnp@redhat.com> | 2005-11-22 20:37:00 +0000 | 
| commit | 1a163e765c0d6a86d2aa2ffb18a1d7e29a052e7a (patch) | |
| tree | f03b91de2eea70ffcb02aebcb265e3552dd9e48d /glib | |
| parent | c33af17b934fcc8528b393ed2dca603e4940e6b3 (diff) | |
	* configure.in: Add test/name-test/Makefile to the generated
	Makefile list
	* dbus/dbus-shared.h (#define DBUS_NAME_FLAG_ALLOW_REPLACEMENT):
	New flag which replaces DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT
	(#define DBUS_NAME_FLAG_DO_NOT_QUEUE): New flag for specifying
	not to queue an ower if it can't be the primary owner
	* bus/bus.h: Add new internal BusOwner struct
	* bus/driver.c (bus_driver_handle_hello): Send flags (0 for default)
	to bus_registry_ensure and don't set the prohibit_replacement flag
	since they are now set per BusOwner and not per name.
	(bus_driver_handle_list_queued_owners): bus method (ListQueuedOwners)
	that returns the list of connections in a name's connection queue
	* bus/services.c (struct BusService): remove prohibit_replacement field
	(struct BusOwner): new struct for keeping track of queued connections
	and their associated flags for the queue
	(struct BusRegistry): add a BusOwner memory pool
	(bus_registry_new): initialize the BusOwner memory pool
	(bus_registry_unref): free the BusOwner memory pool
	(_bus_service_find_owner_link): new internal method for
	searching the queue for a specific connection
	(bus_owner_set_flags): new method for adding setting the flags on a
	bus owner
	(bus_owner_new): new method that creates a BusOwner object from the
	pool and sets its flags
	(bus_owner_ref, bus_owner_unref): ref counting for BusOwner objects
	(bus_registry_ensure): Add the flags parameter
	(bus_registry_acquire_service): Switch from using raw connections to
	using the BusOwner struct
	Add new state machine for dealing with the new set of flags
	(bus_registry_set_service_context_table, struct OwnershipCancelData,
	cancel_ownership, free_ownership_cancel_data,
	add_cancel_ownership_to_transaction, struct OwnershipRestoreData,
	restore_ownership, free_ownership_restore_data,
	add_restore_ownership_to_transaction): Switch to using BusOwner
	instead of raw connections
	(bus_service_add_owner): Add flags parameter
	Switch to using BusOwner instead of raw connections
	Add state machine for dealing with the new set of flags
	(bus_service_swap_owner): Swaps the first and second owners in the
	queue.  Used to make sure proper signals are sent when a service looses
	or gains primary ownership.  We never insert an owner at the top of the
	queue.  Instead we insert it in the second position and then swap.
	(bus_service_remove_owner): Remove the owner from the queue sending
	out the NameLost and NameOwnerChanged signals if the we were the
	primary owner
	(bus_service_get_primary_owners_connection): New method that extracts
	the connection from the primary owner
	(bus_service_get_primary_owner): Returns the BusOwner instead of the
	connection
	(bus_service_get_allow_replacement): Changed from the old
	bus_service_get_prohibit_replacement method.  Checks the flags of the
	primary owner and returns if it can be replaced or not
	(bus_service_set_prohibit_replacement): removed
	(bus_service_has_owner): returns TRUE if and owner with
	the specified connection exists in the queue
	* dbus/dbus-bus.c (dbus_bus_connection_get_unique_name): New helper
	method that only compiles if tests are enabled.  Allows us to get the
	unique name of a connection so we can check it against the queue when
	doing regression tests
	* bus/activation.c (bus_activation_send_pending_auto_activate),
	bus/dispatch.c (bus_dispatch),
	bus/driver.c (bus_driver_handle_get_service_owner,
	bus_driver_handle_get_connection_unix_user,
	bus_driver_handle_get_connection_unix_process_id,
	bus_driver_handle_get_connection_selinux_security_context),
	bus/signals.c (connection_is_primary_owner):
	use bus_service_get_primary_owners_connection instead of
	bus_service_get_primary_owner
	* dbus/dbus-sysdeps.c (_dbus_connect_unix_socket,
	_dbus_listen_unix_socket): Calculate the length of the socket
	path and use that instead of using a fixed length which was
	causing socket names to contain many trailing Nul bytes.
	* dbus/dbus-glib-lowlevel.h, glib/dbus-gobject.c
	(dbus_g_method_get_sender): New method for extracting the sender
	from a DBusGMethodInvocation
	(dbus_g_method_return_get_reply): changed name to
	dbus_g_method_get_reply
	(dbus_g_method_return_send_reply): changed name to
	dbus_g_method_send reply
	* doc/dbus-specification.xml: New docs that describe how the new
	queueing system works and talks about the changes to the how
	we specify socket names
	* glib/examples/example-service.c,
	glib/examples/example-signal-emitter.c,
	glib/examples/statemachine/statemachine-server.c:
	Changed the RequestName flags to the new system
	* test/name-test/ (test-names.c, run-test.sh, Makefile.am): New
	regression test suite for testing various states of the new
	queueing system
Diffstat (limited to 'glib')
| -rw-r--r-- | glib/dbus-gobject.c | 28 | ||||
| -rw-r--r-- | glib/examples/example-service.c | 2 | ||||
| -rw-r--r-- | glib/examples/example-signal-emitter.c | 2 | ||||
| -rw-r--r-- | glib/examples/statemachine/statemachine-server.c | 2 | 
4 files changed, 28 insertions, 6 deletions
diff --git a/glib/dbus-gobject.c b/glib/dbus-gobject.c index 1abe2581..0a019cc2 100644 --- a/glib/dbus-gobject.c +++ b/glib/dbus-gobject.c @@ -1858,6 +1858,28 @@ dbus_g_object_register_marshaller_array (GClosureMarshal  marshaller,    g_static_rw_lock_writer_unlock (&globals_lock);  } +/** + * Get the sender of a message so we can send a + * "reply" later (i.e. send a message directly + * to a service which invoked the method at a  + * later time). + * + * @param context the method context + * + * @return the unique name of teh sender + */ +gchar * +dbus_g_method_get_sender (DBusGMethodInvocation *context) +{ +  const gchar *sender; + +  sender = dbus_message_get_sender (dbus_g_message_get_message (context->message)); + +  if (sender == NULL) +    return NULL; +     +  return strdup (sender); +}  /**   * Get the reply message to append reply values @@ -1867,9 +1889,9 @@ dbus_g_object_register_marshaller_array (GClosureMarshal  marshaller,   * @param context the method context   */  DBusMessage * -dbus_g_method_return_get_reply (DBusGMethodInvocation *context) +dbus_g_method_get_reply (DBusGMethodInvocation *context)  { -    return dbus_message_new_method_return (dbus_g_message_get_message (context->message)); +  return dbus_message_new_method_return (dbus_g_message_get_message (context->message));  }  /** @@ -1881,7 +1903,7 @@ dbus_g_method_return_get_reply (DBusGMethodInvocation *context)   * @param reply the reply message, will be unreffed   */  void -dbus_g_method_return_send_reply (DBusGMethodInvocation *context, DBusMessage *reply) +dbus_g_method_send_reply (DBusGMethodInvocation *context, DBusMessage *reply)  {    dbus_connection_send (dbus_g_connection_get_connection (context->connection), reply, NULL);    dbus_message_unref (reply); diff --git a/glib/examples/example-service.c b/glib/examples/example-service.c index 5e58175f..a66855c1 100644 --- a/glib/examples/example-service.c +++ b/glib/examples/example-service.c @@ -135,7 +135,7 @@ main (int argc, char **argv)    if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,  			  G_TYPE_STRING, "org.designfu.SampleService", -			  G_TYPE_UINT, DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, +			  G_TYPE_UINT, 0,  			  G_TYPE_INVALID,  			  G_TYPE_UINT, &request_name_result,  			  G_TYPE_INVALID)) diff --git a/glib/examples/example-signal-emitter.c b/glib/examples/example-signal-emitter.c index d1cc444c..c60865d2 100644 --- a/glib/examples/example-signal-emitter.c +++ b/glib/examples/example-signal-emitter.c @@ -114,7 +114,7 @@ main (int argc, char **argv)    if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,  			  G_TYPE_STRING, "org.designfu.TestService", -			  G_TYPE_UINT, DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, +			  G_TYPE_UINT, 0,  			  G_TYPE_INVALID,  			  G_TYPE_UINT, &request_name_result,  			  G_TYPE_INVALID)) diff --git a/glib/examples/statemachine/statemachine-server.c b/glib/examples/statemachine/statemachine-server.c index 2cbf39fe..cc9ca4bd 100644 --- a/glib/examples/statemachine/statemachine-server.c +++ b/glib/examples/statemachine/statemachine-server.c @@ -211,7 +211,7 @@ main (int argc, char **argv)    if (!dbus_g_proxy_call (bus_proxy, "RequestName", &error,  			  G_TYPE_STRING, "com.example.StateServer", -			  G_TYPE_UINT, DBUS_NAME_FLAG_PROHIBIT_REPLACEMENT, +			  G_TYPE_UINT, 0,  			  G_TYPE_INVALID,  			  G_TYPE_UINT, &request_name_result,  			  G_TYPE_INVALID))  | 
