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;  | 
