diff options
author | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-03-28 13:44:27 +0000 |
---|---|---|
committer | Claudio Takahasi <claudio.takahasi@openbossa.org> | 2007-03-28 13:44:27 +0000 |
commit | 45bddf6307e9a6f017a313d2b3e16ef6ce8db376 (patch) | |
tree | ced384d85be93578b13aa766b3343476584375cc /network/server.c | |
parent | e7b6b11e91bb59eccf844abe4bb47b015b0c3cdf (diff) |
network: Remove the service record when the server path is unregistered
Diffstat (limited to 'network/server.c')
-rw-r--r-- | network/server.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/network/server.c b/network/server.c index e33e7133..0dd29d0d 100644 --- a/network/server.c +++ b/network/server.c @@ -563,6 +563,39 @@ static uint32_t add_server_record(DBusConnection *conn, uint16_t id) return rec_id; } +static int remove_server_record(DBusConnection *conn, uint32_t rec_id) +{ + DBusMessage *msg, *reply; + DBusError derr; + + msg = dbus_message_new_method_call("org.bluez", "/org/bluez", + "org.bluez.Database", "RemoveServiceRecord"); + if (!msg) { + error("Can't allocate new method call"); + return -ENOMEM; + } + + dbus_message_append_args(msg, + DBUS_TYPE_UINT32, &rec_id, + DBUS_TYPE_INVALID); + + dbus_error_init(&derr); + reply = dbus_connection_send_with_reply_and_block(conn, msg, -1, &derr); + + dbus_message_unref(msg); + + if (dbus_error_is_set(&derr)) { + error("Removing service record 0x%x failed: %s", + rec_id, derr.message); + dbus_error_free(&derr); + return -1; + } + + dbus_message_unref(reply); + + return 0; +} + static DBusHandlerResult get_uuid(DBusConnection *conn, DBusMessage *msg, void *data) { @@ -794,6 +827,10 @@ static void server_free(struct network_server *ns) if (!ns) return; + /* FIXME: Missing release/free all bnepX interfaces */ + if (ns->record_id) + remove_server_record(ns->conn, ns->record_id); + if (ns->iface) g_free(ns->iface); @@ -809,8 +846,6 @@ static void server_free(struct network_server *ns) if (ns->io) g_io_channel_unref(ns->io); - /* FIXME: Missing release/free all bnepX interfaces */ - g_free(ns); } |