diff options
Diffstat (limited to 'hcid')
-rw-r--r-- | hcid/dbus-service.c | 10 | ||||
-rw-r--r-- | hcid/main.c | 4 | ||||
-rw-r--r-- | hcid/server.c | 123 | ||||
-rw-r--r-- | hcid/server.h | 7 |
4 files changed, 12 insertions, 132 deletions
diff --git a/hcid/dbus-service.c b/hcid/dbus-service.c index df04a325..b6875833 100644 --- a/hcid/dbus-service.c +++ b/hcid/dbus-service.c @@ -435,7 +435,7 @@ static gboolean service_startup_timeout(gpointer data) int service_start(struct service *service, DBusConnection *conn) { DBusError derr; - char *addr, *argv[2], *envp[2], command[PATH_MAX], address[256]; + char *argv[2], *envp[1], command[PATH_MAX]; if (!dbus_connection_add_filter(conn, service_filter, service, NULL)) { error("Unable to add signal filter"); @@ -456,13 +456,7 @@ int service_start(struct service *service, DBusConnection *conn) argv[0] = command; argv[1] = NULL; - addr = get_local_server_address(); - - snprintf(address, sizeof(address) - 1, "BLUETOOTHD_ADDRESS=%s", addr); - envp[0] = address; - envp[1] = NULL; - - dbus_free(addr); + envp[0] = NULL; if (!g_spawn_async(SERVICEDIR, argv, envp, G_SPAWN_DO_NOT_REAP_CHILD, service_setup, service, &service->pid, NULL)) { diff --git a/hcid/main.c b/hcid/main.c index 3f2a0c76..3276d5c2 100644 --- a/hcid/main.c +++ b/hcid/main.c @@ -922,8 +922,6 @@ int main(int argc, char *argv[]) notify_init(); - init_local_server(); - init_services(CONFIGDIR); /* Start event processor */ @@ -938,8 +936,6 @@ int main(int argc, char *argv[]) notify_close(); - shutdown_local_server(); - cleanup_sdp_session(); plugin_cleanup(); diff --git a/hcid/server.c b/hcid/server.c index 5a6924cb..70bed47a 100644 --- a/hcid/server.c +++ b/hcid/server.c @@ -25,129 +25,20 @@ #include <config.h> #endif -#include <fcntl.h> -#include <unistd.h> -#include <string.h> -#include <sys/stat.h> +#include <glib.h> -#include <dbus.h> - -#include "dbus-database.h" - -#include "logging.h" #include "server.h" -static DBusHandlerResult filter_function(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - if (dbus_message_is_signal(msg, DBUS_INTERFACE_LOCAL, "Disconnected") && - strcmp(dbus_message_get_path(msg), DBUS_PATH_LOCAL) == 0) { - debug("Received local disconnected signal"); - name_listener_indicate_disconnect(conn); - return DBUS_HANDLER_RESULT_HANDLED; - } - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static DBusHandlerResult message_handler(DBusConnection *conn, - DBusMessage *msg, void *data) -{ - if (strcmp(dbus_message_get_interface(msg), DATABASE_INTERFACE) == 0) - return database_message(conn, msg, data); - - debug("%s -> %s.%s", dbus_message_get_path(msg), - dbus_message_get_interface(msg), dbus_message_get_member(msg)); - - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; -} - -static void unregister_handler(DBusConnection *conn, void *data) -{ - debug("Unregister local connection %p", conn); -} - -static void handle_connection(DBusServer *server, DBusConnection *conn, void *data) -{ - DBusObjectPathVTable vtable = { &unregister_handler, &message_handler, - NULL, NULL, NULL, NULL}; - - debug("New local connection %p", conn); - - dbus_connection_add_filter(conn, filter_function, NULL, NULL); - - if (dbus_connection_register_object_path(conn, "/org/bluez", - &vtable, NULL) == FALSE) { - error("Can't register local object path"); - return; - } - - dbus_connection_ref(conn); +static GSList *servers = NULL; - //dbus_connection_setup_with_g_main(conn, NULL); - setup_dbus_with_main_loop(conn); -} - -static DBusServer *server = NULL; - -char *get_local_server_address(void) -{ - return dbus_server_get_address(server); -} - -void init_local_server(void) +int bt_register_server(struct bt_server *server) { - const char *ext_only[] = { "EXTERNAL", NULL }; - char *address; - DBusError err; - int fd, len; - - dbus_error_init(&err); - - server = dbus_server_listen("unix:tmpdir=/var/run", &err); - if (server == NULL) { - error("Can't create local D-Bus server"); - dbus_error_free(&err); - return; - } - - address = dbus_server_get_address(server); - - info("Created local server at %s", address); + servers = g_slist_append(servers, server); - fd = open("/var/run/bluetoothd_address", - O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR); - if (fd < 0) { - error("Can't create server address file"); - } else { - len = write(fd, address, strlen(address)); - close(fd); - } - - dbus_free(address); - - //dbus_server_setup_with_g_main(server, NULL); - setup_dbus_server_with_main_loop(server); - - dbus_server_set_new_connection_function(server, handle_connection, - NULL, NULL); - - dbus_server_set_auth_mechanisms(server, ext_only); + return 0; } -void shutdown_local_server(void) +void bt_unregister_server(struct bt_server *server) { - if (server == NULL) - return; - - info("Shutting down local server"); - - if (unlink("/var/run/bluetoothd_address") < 0) - error("Can't remove server address file"); - - dbus_server_disconnect(server); - - dbus_server_unref(server); - - server = NULL; + servers = g_slist_remove(servers, server); } diff --git a/hcid/server.h b/hcid/server.h index 270245d7..fcd440ec 100644 --- a/hcid/server.h +++ b/hcid/server.h @@ -21,7 +21,6 @@ * */ -void init_local_server(void); -void shutdown_local_server(void); - -char *get_local_server_address(void); +struct bt_server { + const char *uuid; +}; |