summaryrefslogtreecommitdiffstats
path: root/network/server.c
diff options
context:
space:
mode:
authorClaudio Takahasi <claudio.takahasi@openbossa.org>2007-03-28 13:44:27 +0000
committerClaudio Takahasi <claudio.takahasi@openbossa.org>2007-03-28 13:44:27 +0000
commit45bddf6307e9a6f017a313d2b3e16ef6ce8db376 (patch)
treeced384d85be93578b13aa766b3343476584375cc /network/server.c
parente7b6b11e91bb59eccf844abe4bb47b015b0c3cdf (diff)
network: Remove the service record when the server path is unregistered
Diffstat (limited to 'network/server.c')
-rw-r--r--network/server.c39
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);
}