diff options
Diffstat (limited to 'audio/avdtp.c')
| -rw-r--r-- | audio/avdtp.c | 22 | 
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; | 
