summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--audio/avdtp.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/audio/avdtp.c b/audio/avdtp.c
index 63b9bdc4..98cbbab4 100644
--- a/audio/avdtp.c
+++ b/audio/avdtp.c
@@ -1041,6 +1041,8 @@ static gboolean avdtp_setconf_cmd(struct avdtp *session,
struct avdtp_local_sep *sep;
struct avdtp_stream *stream;
uint8_t err, category = 0x00;
+ struct audio_device *dev;
+ bdaddr_t src, dst;
if (size < sizeof(struct setconf_req)) {
error("Too short getcap request");
@@ -1058,6 +1060,23 @@ static gboolean avdtp_setconf_cmd(struct avdtp *session,
goto failed;
}
+ avdtp_get_peers(session, &src, &dst);
+ dev = manager_get_device(&src, &dst, NULL);
+ if (!dev) {
+ error("Unable to get a audio device object");
+ goto failed;
+ }
+
+ switch (sep->info.type) {
+ case AVDTP_SEP_TYPE_SOURCE:
+ if (!dev->sink)
+ dev->sink = sink_init(dev);
+ break;
+ case AVDTP_SEP_TYPE_SINK:
+ /* Do source_init() here when it's implemented */
+ break;
+ }
+
stream = g_new0(struct avdtp_stream, 1);
stream->session = session;
stream->lsep = sep;
@@ -2788,9 +2807,6 @@ static void avdtp_server_cb(GIOChannel *chan, int err, const bdaddr_t *src,
goto drop;
}
- if (!dev->sink)
- dev->sink = sink_init(dev);
-
session->mtu = l2o.imtu;
session->sock = sk;