diff options
Diffstat (limited to 'audio/avdtp.c')
-rw-r--r-- | audio/avdtp.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/audio/avdtp.c b/audio/avdtp.c index d1cb5ef3..a45b7d28 100644 --- a/audio/avdtp.c +++ b/audio/avdtp.c @@ -391,6 +391,9 @@ struct avdtp { guint dc_timer; + /* Attempt stream setup instead of disconnecting */ + gboolean stream_setup; + DBusPendingCall *pending_auth; }; @@ -597,12 +600,21 @@ static gboolean stream_open_timeout(gpointer user_data) static gboolean disconnect_timeout(gpointer user_data) { struct avdtp *session = user_data; + struct audio_device *dev; + gboolean stream_setup; assert(session->ref == 1); session->dc_timer = 0; + stream_setup = session->stream_setup; + session->stream_setup = FALSE; - connection_lost(session, -ETIMEDOUT); + dev = manager_get_device(&session->server->src, &session->dst); + + if (dev && dev->sink && stream_setup) + sink_setup_stream(dev->sink, session); + else + connection_lost(session, -ETIMEDOUT); return FALSE; } @@ -611,6 +623,7 @@ static void remove_disconnect_timer(struct avdtp *session) { g_source_remove(session->dc_timer); session->dc_timer = 0; + session->stream_setup = FALSE; } static void set_disconnect_timer(struct avdtp *session) @@ -2963,6 +2976,7 @@ static void auth_cb(DBusError *derr, void *user_data) /* Here we set the disconnect timer so we don't stay in IDLE state * indefinitely but set auto_dc to FALSE so that when a stream is * finally opened it doesn't get closed due to a timeout */ + session->stream_setup = TRUE; set_disconnect_timer(session); avdtp_set_auto_disconnect(session, FALSE); |