diff --git a/sap/server.c b/sap/server.c
index 95f621b..ee2624d 100644
--- a/sap/server.c
+++ b/sap/server.c
};
static DBusConnection *connection;
-static struct sap_server *sap_server;
static void start_guard_timer(struct sap_server *server, guint interval);
static void stop_guard_timer(struct sap_server *server);
{ }
};
-static void server_free(struct sap_server *server)
+static void server_remove(struct sap_server *server)
{
if (!server)
return;
sap_server_remove_conn(server);
+
+ remove_record_from_server(server->record_id);
+
+ if (server->listen_io) {
+ g_io_channel_shutdown(server->listen_io, TRUE, NULL);
+ g_io_channel_unref(server->listen_io);
+ server->listen_io = NULL;
+ }
+
g_free(server->path);
g_free(server);
- server = NULL;
}
static void destroy_sap_interface(void *data)
DBG("Unregistered interface %s on path %s", SAP_SERVER_INTERFACE,
server->path);
- server_free(server);
+ server_remove(server);
}
int sap_server_register(const char *path, bdaddr_t *src)
sdp_record_t *record = NULL;
GError *gerr = NULL;
GIOChannel *io;
+ struct sap_server *server;
if (sap_init() < 0) {
error("Sap driver initialization failed.");
return -1;
}
- sap_server = g_try_new0(struct sap_server, 1);
- if (!sap_server) {
- sap_exit();
- return -ENOMEM;
- }
-
- sap_server->path = g_strdup(path);
-
record = create_sap_record(SAP_SERVER_CHANNEL);
if (!record) {
error("Creating SAP SDP record failed.");
goto sdp_err;
}
- sap_server->record_id = record->handle;
+ server = g_new0(struct sap_server, 1);
+ server->path = g_strdup(path);
+ server->record_id = record->handle;
- io = bt_io_listen(BT_IO_RFCOMM, NULL, connect_confirm_cb, sap_server,
+ io = bt_io_listen(BT_IO_RFCOMM, NULL, connect_confirm_cb, server,
NULL, &gerr,
BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_CHANNEL, SAP_SERVER_CHANNEL,
g_error_free(gerr);
goto server_err;
}
+ server->listen_io = io;
- DBG("Listen socket 0x%02x", g_io_channel_unix_get_fd(io));
-
- sap_server->listen_io = io;
- sap_server->conn = NULL;
-
- if (!g_dbus_register_interface(connection, path, SAP_SERVER_INTERFACE,
+ if (!g_dbus_register_interface(connection, server->path,
+ SAP_SERVER_INTERFACE,
server_methods, server_signals, NULL,
- sap_server, destroy_sap_interface)) {
+ server, destroy_sap_interface)) {
error("D-Bus failed to register %s interface",
SAP_SERVER_INTERFACE);
goto server_err;
}
+ DBG("server %p, listen socket 0x%02x", server,
+ g_io_channel_unix_get_fd(io));
+
return 0;
server_err:
- remove_record_from_server(sap_server->record_id);
+ server_remove(server);
sdp_err:
- server_free(sap_server);
sap_exit();
return -1;
}
-int sap_server_unregister(const char *path)
+void sap_server_unregister(const char *path)
{
- if (!sap_server)
- return -EINVAL;
-
- remove_record_from_server(sap_server->record_id);
-
- sap_server_remove_conn(sap_server);
-
- if (sap_server->listen_io) {
- g_io_channel_shutdown(sap_server->listen_io, TRUE, NULL);
- g_io_channel_unref(sap_server->listen_io);
- sap_server->listen_io = NULL;
- }
-
g_dbus_unregister_interface(connection, path, SAP_SERVER_INTERFACE);
sap_exit();
-
- return 0;
}
int sap_server_init(DBusConnection *conn)
diff --git a/sap/server.h b/sap/server.h
index ef2b7b8..6d2f5e9 100644
--- a/sap/server.h
+++ b/sap/server.h
int sap_server_init(DBusConnection *conn);
void sap_server_exit(void);
int sap_server_register(const char *path, bdaddr_t *src);
-int sap_server_unregister(const char *path);
+void sap_server_unregister(const char *path);