From 9344ad5be80ae4bf3724a45e58e866ad540eb183 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Dalleau?= Date: Fri, 23 Sep 2011 14:59:23 +0200 Subject: [PATCH] Check all states before allowing gw connection --- audio/gateway.c | 10 ++++++++++ audio/gateway.h | 1 + audio/manager.c | 2 +- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/audio/gateway.c b/audio/gateway.c index f3e6c6afa..ca44576d8 100644 --- a/audio/gateway.c +++ b/audio/gateway.c @@ -764,6 +764,16 @@ gboolean gateway_is_connected(struct audio_device *dev) dev->gateway->state == GATEWAY_STATE_CONNECTED); } +gboolean gateway_is_active(struct audio_device *dev) +{ + struct gateway *gw = dev->gateway; + + if (gw->state != GATEWAY_STATE_DISCONNECTED) + return TRUE; + + return FALSE; +} + int gateway_connect_rfcomm(struct audio_device *dev, GIOChannel *io) { if (!io) diff --git a/audio/gateway.h b/audio/gateway.h index a8ed2f249..77f57872b 100644 --- a/audio/gateway.h +++ b/audio/gateway.h @@ -57,6 +57,7 @@ typedef void (*gateway_stream_cb_t) (struct audio_device *dev, GError *err, void gateway_set_state(struct audio_device *dev, gateway_state_t new_state); void gateway_unregister(struct audio_device *dev); struct gateway *gateway_init(struct audio_device *device); +gboolean gateway_is_active(struct audio_device *dev); gboolean gateway_is_connected(struct audio_device *dev); int gateway_connect_rfcomm(struct audio_device *dev, GIOChannel *io); int gateway_connect_sco(struct audio_device *dev, GIOChannel *chan); diff --git a/audio/manager.c b/audio/manager.c index 053562eed..06d3f0e7d 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -594,7 +594,7 @@ static void hf_io_cb(GIOChannel *chan, gpointer data) goto drop; } - if (gateway_is_connected(device)) { + if (gateway_is_active(device)) { DBG("Refusing new connection since one already exists"); goto drop; } -- 2.47.3