diff options
author | Alban Crequy <alban.crequy@collabora.co.uk> | 2012-05-25 16:58:50 +0000 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2012-05-28 12:10:42 +0200 |
commit | 3754fb507c40edb91228d401b5d83e6bc9957f27 (patch) | |
tree | 20ebe7900f16536994a26c587c0a87bbb782e819 | |
parent | 4d8651c78d4802e9ab1e267027ea4dc919534a15 (diff) | |
download | dbus-3754fb507c40edb91228d401b5d83e6bc9957f27.tar.gz |
Use a separate name spaces for AF-BUS unique names :AF-BUS.BUSADDR.MAJOR.MINOR
-rw-r--r-- | bus/driver-afbus.c | 25 | ||||
-rw-r--r-- | bus/driver-afbus.h | 8 | ||||
-rw-r--r-- | bus/driver.c | 13 |
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; |