From 05e28841e373ae34278288724d3d3f8af5ae68b0 Mon Sep 17 00:00:00 2001 From: Johan Hedberg Date: Fri, 10 Oct 2008 14:53:30 +0200 Subject: Make server_is_enabled simply use the config file values for now There's something broken in the "profile enabled" logic at the moment which makes server_is_enabled return FALSE sometimes when it shouldn't which causes the necessary interface not to be added to remote device objects. Use simply the config file values for now since we don't support per-adapter server configuration anyway. --- audio/manager.c | 65 ++++++++++++++++++--------------------------------------- audio/manager.h | 1 + 2 files changed, 21 insertions(+), 45 deletions(-) diff --git a/audio/manager.c b/audio/manager.c index a73d7e0c..ae63b997 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -103,6 +103,7 @@ static GSList *adapters = NULL; static GSList *devices = NULL; static struct enabled_interfaces enabled = { + .hfp = TRUE, .headset = TRUE, .gateway = FALSE, .sink = TRUE, @@ -124,54 +125,25 @@ static struct audio_adapter *find_adapter(GSList *list, const char *path) return NULL; } -static struct audio_adapter *find_adapter_by_address(GSList *list, - const bdaddr_t *src) -{ - GSList *l; - - for (l = list; l; l = l->next) { - struct audio_adapter *adapter = l->data; - - if (bacmp(&adapter->src, src) == 0) - return adapter; - } - - return NULL; -} - gboolean server_is_enabled(bdaddr_t *src, uint16_t svc) { - struct audio_adapter *adp; - gboolean ret; - - adp = find_adapter_by_address(adapters, src); - if (!adp) - return FALSE; - switch (svc) { case HEADSET_SVCLASS_ID: - ret = (adp->hsp_ag_server != NULL); - break; + return enabled.headset; case HEADSET_AGW_SVCLASS_ID: - ret = (adp->hsp_hs_server != NULL); - break; + return enabled.gateway; case HANDSFREE_SVCLASS_ID: - ret = (adp->hfp_ag_server != NULL); - break; + return enabled.headset && enabled.hfp; case HANDSFREE_AGW_SVCLASS_ID: - ret = FALSE; - break; + return FALSE; case AUDIO_SINK_SVCLASS_ID: return enabled.sink; case AV_REMOTE_TARGET_SVCLASS_ID: case AV_REMOTE_SVCLASS_ID: return enabled.control; default: - ret = FALSE; - break; + return FALSE; } - - return ret; } static void handle_uuid(const char *uuidstr, struct audio_device *device) @@ -523,7 +495,7 @@ static int headset_server_init(struct audio_adapter *adapter) { uint8_t chan = DEFAULT_HS_AG_CHANNEL; sdp_record_t *record; - gboolean hfp = TRUE, master = TRUE; + gboolean master = TRUE; GError *err = NULL; uint32_t features, flags; @@ -538,15 +510,6 @@ static int headset_server_init(struct audio_adapter *adapter) err = NULL; } else master = tmp; - - tmp = g_key_file_get_boolean(config, "Headset", "HFP", - &err); - if (err) { - debug("audio.conf: %s", err->message); - g_error_free(err); - err = NULL; - } else - hfp = tmp; } flags = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT; @@ -574,7 +537,7 @@ static int headset_server_init(struct audio_adapter *adapter) features = headset_config_init(config); - if (!hfp) + if (!enabled.hfp) return 0; chan = DEFAULT_HF_AG_CHANNEL; @@ -904,6 +867,8 @@ int audio_manager_init(DBusConnection *conn, GKeyFile *conf) { char **list; int i; + gboolean b; + GError *err; connection = dbus_connection_ref(conn); @@ -944,6 +909,16 @@ int audio_manager_init(DBusConnection *conn, GKeyFile *conf) } g_strfreev(list); + err = NULL; + b = g_key_file_get_boolean(config, "Headset", "HFP", + &err); + if (err) { + debug("audio.conf: %s", err->message); + g_error_free(err); + err = NULL; + } else + enabled.hfp = b; + proceed: if (enabled.headset) { telephony_init(); diff --git a/audio/manager.h b/audio/manager.h index 3af580ff..6dfd7ef3 100644 --- a/audio/manager.h +++ b/audio/manager.h @@ -23,6 +23,7 @@ */ struct enabled_interfaces { + gboolean hfp; gboolean headset; gboolean gateway; gboolean sink; -- cgit