diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2008-10-04 13:00:38 +0200 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2008-10-04 13:00:38 +0200 |
commit | 79c4a0e6df03808898cf3c1b592a02e5585c6bc9 (patch) | |
tree | 2aba5de800eb3f7a6a6f10a951ff6d910366ed35 /audio/manager.c | |
parent | ffcd40c827921adc5865b2bbf9662e1f259b15d1 (diff) |
Change SCO server socket into a generic one
Due to a kernel bug we can't initiate SCO connections if there's
a server socket bound to the same adapter. Therefore use a global
socket bound to BDADDR_ANY instead.
Diffstat (limited to 'audio/manager.c')
-rw-r--r-- | audio/manager.c | 56 |
1 files changed, 0 insertions, 56 deletions
diff --git a/audio/manager.c b/audio/manager.c index c4682726..a6a040fe 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -94,7 +94,6 @@ struct audio_adapter { GIOChannel *hsp_ag_server; GIOChannel *hfp_ag_server; GIOChannel *hsp_hs_server; - GIOChannel *sco_server; }; static DBusConnection *connection = NULL; @@ -470,49 +469,6 @@ static void auth_cb(DBusError *derr, void *user_data) } } -static void sco_server_cb(GIOChannel *chan, int err, const bdaddr_t *src, - const bdaddr_t *dst, gpointer data) -{ - int sk; - struct audio_device *device; - char addr[18]; - - if (err < 0) { - error("accept: %s (%d)", strerror(-err), -err); - return; - } - - device = manager_find_device(dst, NULL, FALSE); - if (!device) - goto drop; - - if (headset_get_state(device) < HEADSET_STATE_CONNECTED) { - debug("Refusing SCO from non-connected headset"); - goto drop; - } - - ba2str(dst, addr); - - if (!get_hfp_active(device)) { - error("Refusing non-HFP SCO connect attempt from %s", addr); - goto drop; - } - - sk = g_io_channel_unix_get_fd(chan); - fcntl(sk, F_SETFL, 0); - - if (headset_connect_sco(device, chan) == 0) { - debug("Accepted SCO connection from %s", addr); - headset_set_state(device, HEADSET_STATE_PLAYING); - } - - return; - -drop: - g_io_channel_close(chan); - g_io_channel_unref(chan); -} - static void ag_io_cb(GIOChannel *chan, int err, const bdaddr_t *src, const bdaddr_t *dst, gpointer data) { @@ -604,13 +560,6 @@ static int headset_server_init(struct audio_adapter *adapter) hfp = tmp; } - adapter->sco_server = bt_sco_listen(&adapter->src, 0, sco_server_cb, - adapter); - if (!adapter->sco_server) { - error("Unable to start SCO server socket"); - return -1; - } - flags = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT; if (master) @@ -662,11 +611,6 @@ static int headset_server_init(struct audio_adapter *adapter) return 0; failed: - if (adapter->sco_server) { - g_io_channel_unref(adapter->sco_server); - adapter->sco_server = NULL; - } - if (adapter->hsp_ag_server) { g_io_channel_unref(adapter->hsp_ag_server); adapter->hsp_ag_server = NULL; |