summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlban Crequy <alban.crequy@collabora.co.uk>2012-05-25 16:58:50 +0000
committerRodrigo Moya <rodrigo@gnome-db.org>2012-05-28 12:10:42 +0200
commit3754fb507c40edb91228d401b5d83e6bc9957f27 (patch)
tree20ebe7900f16536994a26c587c0a87bbb782e819
parent4d8651c78d4802e9ab1e267027ea4dc919534a15 (diff)
downloaddbus-3754fb507c40edb91228d401b5d83e6bc9957f27.tar.gz
Use a separate name spaces for AF-BUS unique names :AF-BUS.BUSADDR.MAJOR.MINOR
-rw-r--r--bus/driver-afbus.c25
-rw-r--r--bus/driver-afbus.h8
-rw-r--r--bus/driver.c13
3 files changed, 42 insertions, 4 deletions
diff --git a/bus/driver-afbus.c b/bus/driver-afbus.c
index 0d45c274..64df160c 100644
--- a/bus/driver-afbus.c
+++ b/bus/driver-afbus.c
@@ -177,3 +177,28 @@ bus_driver_afbus_upload_match_rule (DBusConnection *connection,
return TRUE;
}
+
+dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
+ DBusString *str)
+{
+ struct sockaddr_bus address;
+ long len = sizeof(address);
+
+ memset (&address, 0, sizeof (address));
+ if (!dbus_connection_get_peer_address(connection, &address, &len))
+ {
+ /* Don't return an error if it is not a AF_BUS socket */
+ return TRUE;
+ }
+
+ if (!_dbus_string_append (str, "AF-BUS."))
+ return FALSE;
+
+ if (!_dbus_string_append_uint (str, address.sbus_addr.s_addr))
+ return FALSE;
+
+ if (!_dbus_string_append (str, "."))
+ return FALSE;
+
+ return TRUE;
+}
diff --git a/bus/driver-afbus.h b/bus/driver-afbus.h
index f9b0d87e..81dc09e2 100644
--- a/bus/driver-afbus.h
+++ b/bus/driver-afbus.h
@@ -32,6 +32,8 @@
dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
const char *rule,
DBusError *error);
+dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
+ DBusString *str);
#else
inline
dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
@@ -40,6 +42,12 @@ dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
{
return TRUE;
}
+inline
+dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
+ DBusString *str)
+{
+ return TRUE;
+}
#endif
#endif /* BUS_DRIVER_AFBUS_H */
diff --git a/bus/driver.c b/bus/driver.c
index b3f18da5..e0bbeebf 100644
--- a/bus/driver.c
+++ b/bus/driver.c
@@ -183,8 +183,9 @@ bus_driver_send_service_acquired (DBusConnection *connection,
}
static dbus_bool_t
-create_unique_client_name (BusRegistry *registry,
- DBusString *str)
+create_unique_client_name (DBusConnection *connection,
+ BusRegistry *registry,
+ DBusString *str)
{
/* We never want to use the same unique client name twice, because
* we want to guarantee that if you send a message to a given unique
@@ -215,11 +216,15 @@ create_unique_client_name (BusRegistry *registry,
_dbus_assert (next_major_number > 0);
_dbus_assert (next_minor_number >= 0);
- /* appname:MAJOR-MINOR */
+ /* unique name:
+ * :[AF-BUS.BUS-ADDRESS.]MAJOR.MINOR */
if (!_dbus_string_append (str, ":"))
return FALSE;
+ if (!bus_driver_afbus_append_unique_name (connection, str))
+ return FALSE;
+
if (!_dbus_string_append_int (str, next_major_number))
return FALSE;
@@ -288,7 +293,7 @@ bus_driver_handle_hello (DBusConnection *connection,
registry = bus_connection_get_registry (connection);
- if (!create_unique_client_name (registry, &unique_name))
+ if (!create_unique_client_name (connection, registry, &unique_name))
{
BUS_SET_OOM (error);
goto out_0;