Home | History | Annotate | Download | only in audio
      1 /*
      2  *
      3  *  BlueZ - Bluetooth protocol stack for Linux
      4  *
      5  *  Copyright (C) 2006-2007  Nokia Corporation
      6  *  Copyright (C) 2004-2009  Marcel Holtmann <marcel (at) holtmann.org>
      7  *
      8  *
      9  *  This program is free software; you can redistribute it and/or modify
     10  *  it under the terms of the GNU General Public License as published by
     11  *  the Free Software Foundation; either version 2 of the License, or
     12  *  (at your option) any later version.
     13  *
     14  *  This program is distributed in the hope that it will be useful,
     15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17  *  GNU General Public License for more details.
     18  *
     19  *  You should have received a copy of the GNU General Public License
     20  *  along with this program; if not, write to the Free Software
     21  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
     22  *
     23  */
     24 
     25 #ifdef HAVE_CONFIG_H
     26 #include <config.h>
     27 #endif
     28 
     29 #include <stdio.h>
     30 #include <stdlib.h>
     31 #include <stdarg.h>
     32 #include <errno.h>
     33 #include <unistd.h>
     34 #include <fcntl.h>
     35 #include <stdint.h>
     36 #include <sys/stat.h>
     37 #include <dirent.h>
     38 #include <ctype.h>
     39 #include <signal.h>
     40 
     41 #include <bluetooth/bluetooth.h>
     42 #include <bluetooth/hci.h>
     43 #include <bluetooth/hci_lib.h>
     44 #include <bluetooth/rfcomm.h>
     45 #include <bluetooth/sdp.h>
     46 #include <bluetooth/sdp_lib.h>
     47 
     48 #include <glib.h>
     49 #include <dbus/dbus.h>
     50 #include <gdbus.h>
     51 
     52 #include "glib-helper.h"
     53 #include "btio.h"
     54 #include "../src/manager.h"
     55 #include "../src/adapter.h"
     56 #include "../src/device.h"
     57 
     58 #include "logging.h"
     59 #include "textfile.h"
     60 #include "ipc.h"
     61 #include "device.h"
     62 #include "error.h"
     63 #include "avdtp.h"
     64 #include "a2dp.h"
     65 #include "headset.h"
     66 #include "gateway.h"
     67 #include "sink.h"
     68 #include "source.h"
     69 #include "control.h"
     70 #include "manager.h"
     71 #include "sdpd.h"
     72 #include "telephony.h"
     73 
     74 typedef enum {
     75 	HEADSET	= 1 << 0,
     76 	GATEWAY	= 1 << 1,
     77 	SINK	= 1 << 2,
     78 	SOURCE	= 1 << 3,
     79 	CONTROL	= 1 << 4,
     80 	TARGET	= 1 << 5,
     81 	INVALID	= 1 << 6
     82 } audio_service_type;
     83 
     84 typedef enum {
     85 		GENERIC_AUDIO = 0,
     86 		ADVANCED_AUDIO,
     87 		AV_REMOTE,
     88 		GET_RECORDS
     89 } audio_sdp_state_t;
     90 
     91 struct audio_adapter {
     92 	struct btd_adapter *btd_adapter;
     93 	uint32_t hsp_ag_record_id;
     94 	uint32_t hfp_ag_record_id;
     95 	uint32_t hfp_hs_record_id;
     96 	GIOChannel *hsp_ag_server;
     97 	GIOChannel *hfp_ag_server;
     98 	GIOChannel *hfp_hs_server;
     99 	gint ref;
    100 };
    101 
    102 static gboolean auto_connect = TRUE;
    103 static int max_connected_headsets = 1;
    104 static DBusConnection *connection = NULL;
    105 static GKeyFile *config = NULL;
    106 static GSList *adapters = NULL;
    107 static GSList *devices = NULL;
    108 
    109 static struct enabled_interfaces enabled = {
    110 	.hfp		= TRUE,
    111 	.headset	= TRUE,
    112 	.gateway	= FALSE,
    113 	.sink		= TRUE,
    114 	.source		= FALSE,
    115 	.control	= TRUE,
    116 };
    117 
    118 static struct audio_adapter *find_adapter(GSList *list,
    119 					struct btd_adapter *btd_adapter)
    120 {
    121 	GSList *l;
    122 
    123 	for (l = list; l; l = l->next) {
    124 		struct audio_adapter *adapter = l->data;
    125 
    126 		if (adapter->btd_adapter == btd_adapter)
    127 			return adapter;
    128 	}
    129 
    130 	return NULL;
    131 }
    132 
    133 gboolean server_is_enabled(bdaddr_t *src, uint16_t svc)
    134 {
    135 	switch (svc) {
    136 	case HEADSET_SVCLASS_ID:
    137 		return enabled.headset;
    138 	case HEADSET_AGW_SVCLASS_ID:
    139 		return FALSE;
    140 	case HANDSFREE_SVCLASS_ID:
    141 		return enabled.headset && enabled.hfp;
    142 	case HANDSFREE_AGW_SVCLASS_ID:
    143 		return enabled.gateway;
    144 	case AUDIO_SINK_SVCLASS_ID:
    145 		return enabled.sink;
    146 	case AUDIO_SOURCE_SVCLASS_ID:
    147 		return enabled.source;
    148 	case AV_REMOTE_TARGET_SVCLASS_ID:
    149 	case AV_REMOTE_SVCLASS_ID:
    150 		return enabled.control;
    151 	default:
    152 		return FALSE;
    153 	}
    154 }
    155 
    156 static void handle_uuid(const char *uuidstr, struct audio_device *device)
    157 {
    158 	uuid_t uuid;
    159 	uint16_t uuid16;
    160 
    161 	if (bt_string2uuid(&uuid, uuidstr) < 0) {
    162 		error("%s not detected as an UUID-128", uuidstr);
    163 		return;
    164 	}
    165 
    166 	if (!sdp_uuid128_to_uuid(&uuid) && uuid.type != SDP_UUID16) {
    167 		error("Could not convert %s to a UUID-16", uuidstr);
    168 		return;
    169 	}
    170 
    171 	uuid16 = uuid.value.uuid16;
    172 
    173 	if (!server_is_enabled(&device->src, uuid16)) {
    174 		debug("audio handle_uuid: server not enabled for %s (0x%04x)",
    175 				uuidstr, uuid16);
    176 		return;
    177 	}
    178 
    179 	switch (uuid16) {
    180 	case HEADSET_SVCLASS_ID:
    181 		debug("Found Headset record");
    182 		if (device->headset)
    183 			headset_update(device, uuid16, uuidstr);
    184 		else
    185 			device->headset = headset_init(device, uuid16,
    186 							uuidstr);
    187 		break;
    188 	case HEADSET_AGW_SVCLASS_ID:
    189 		debug("Found Headset AG record");
    190 		break;
    191 	case HANDSFREE_SVCLASS_ID:
    192 		debug("Found Handsfree record");
    193 		if (device->headset)
    194 			headset_update(device, uuid16, uuidstr);
    195 		else
    196 			device->headset = headset_init(device, uuid16,
    197 							uuidstr);
    198 		break;
    199 	case HANDSFREE_AGW_SVCLASS_ID:
    200 		debug("Found Handsfree AG record");
    201 		if (device->gateway == NULL)
    202 			device->gateway = gateway_init(device);
    203 		break;
    204 	case AUDIO_SINK_SVCLASS_ID:
    205 		debug("Found Audio Sink");
    206 		if (device->sink == NULL)
    207 			device->sink = sink_init(device);
    208 		break;
    209 	case AUDIO_SOURCE_SVCLASS_ID:
    210 		debug("Found Audio Source");
    211 		if (device->source == NULL)
    212 			device->source = source_init(device);
    213 		break;
    214 	case AV_REMOTE_SVCLASS_ID:
    215 	case AV_REMOTE_TARGET_SVCLASS_ID:
    216 		debug("Found AV %s", uuid16 == AV_REMOTE_SVCLASS_ID ?
    217 							"Remote" : "Target");
    218 		if (device->control)
    219 			control_update(device, uuid16);
    220 		else
    221 			device->control = control_init(device, uuid16);
    222 		if (device->sink && sink_is_active(device))
    223 			avrcp_connect(device);
    224 		break;
    225 	default:
    226 		debug("Unrecognized UUID: 0x%04X", uuid16);
    227 		break;
    228 	}
    229 }
    230 
    231 static sdp_record_t *hsp_ag_record(uint8_t ch)
    232 {
    233 	sdp_list_t *svclass_id, *pfseq, *apseq, *root;
    234 	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid;
    235 	uuid_t l2cap_uuid, rfcomm_uuid;
    236 	sdp_profile_desc_t profile;
    237 	sdp_record_t *record;
    238 	sdp_list_t *aproto, *proto[2];
    239 	sdp_data_t *channel;
    240 
    241 	record = sdp_record_alloc();
    242 	if (!record)
    243 		return NULL;
    244 
    245 	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
    246 	root = sdp_list_append(0, &root_uuid);
    247 	sdp_set_browse_groups(record, root);
    248 
    249 	sdp_uuid16_create(&svclass_uuid, HEADSET_AGW_SVCLASS_ID);
    250 	svclass_id = sdp_list_append(0, &svclass_uuid);
    251 	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);
    252 	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);
    253 	sdp_set_service_classes(record, svclass_id);
    254 
    255 	sdp_uuid16_create(&profile.uuid, HEADSET_PROFILE_ID);
    256 	profile.version = 0x0102;
    257 	pfseq = sdp_list_append(0, &profile);
    258 	sdp_set_profile_descs(record, pfseq);
    259 
    260 	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
    261 	proto[0] = sdp_list_append(0, &l2cap_uuid);
    262 	apseq = sdp_list_append(0, proto[0]);
    263 
    264 	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
    265 	proto[1] = sdp_list_append(0, &rfcomm_uuid);
    266 	channel = sdp_data_alloc(SDP_UINT8, &ch);
    267 	proto[1] = sdp_list_append(proto[1], channel);
    268 	apseq = sdp_list_append(apseq, proto[1]);
    269 
    270 	aproto = sdp_list_append(0, apseq);
    271 	sdp_set_access_protos(record, aproto);
    272 
    273 	sdp_set_info_attr(record, "Headset Audio Gateway", 0, 0);
    274 
    275 	sdp_data_free(channel);
    276 	sdp_list_free(proto[0], 0);
    277 	sdp_list_free(proto[1], 0);
    278 	sdp_list_free(apseq, 0);
    279 	sdp_list_free(pfseq, 0);
    280 	sdp_list_free(aproto, 0);
    281 	sdp_list_free(root, 0);
    282 	sdp_list_free(svclass_id, 0);
    283 
    284 	return record;
    285 }
    286 
    287 static sdp_record_t *hfp_hs_record(uint8_t ch)
    288 {
    289 	sdp_list_t *svclass_id, *pfseq, *apseq, *root;
    290 	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid;
    291 	uuid_t l2cap_uuid, rfcomm_uuid;
    292 	sdp_profile_desc_t profile;
    293 	sdp_record_t *record;
    294 	sdp_list_t *aproto, *proto[2];
    295 	sdp_data_t *channel;
    296 
    297 	record = sdp_record_alloc();
    298 	if (!record)
    299 		return NULL;
    300 
    301 	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
    302 	root = sdp_list_append(0, &root_uuid);
    303 	sdp_set_browse_groups(record, root);
    304 
    305 	sdp_uuid16_create(&svclass_uuid, HANDSFREE_SVCLASS_ID);
    306 	svclass_id = sdp_list_append(0, &svclass_uuid);
    307 	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);
    308 	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);
    309 	sdp_set_service_classes(record, svclass_id);
    310 
    311 	sdp_uuid16_create(&profile.uuid, HANDSFREE_PROFILE_ID);
    312 	profile.version = 0x0100;
    313 	pfseq = sdp_list_append(0, &profile);
    314 	sdp_set_profile_descs(record, pfseq);
    315 
    316 	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
    317 	proto[0] = sdp_list_append(0, &l2cap_uuid);
    318 	apseq = sdp_list_append(0, proto[0]);
    319 
    320 	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
    321 	proto[1] = sdp_list_append(0, &rfcomm_uuid);
    322 	channel = sdp_data_alloc(SDP_UINT8, &ch);
    323 	proto[1] = sdp_list_append(proto[1], channel);
    324 	apseq = sdp_list_append(apseq, proto[1]);
    325 
    326 	aproto = sdp_list_append(0, apseq);
    327 	sdp_set_access_protos(record, aproto);
    328 
    329 	sdp_set_info_attr(record, "Hands-Free", 0, 0);
    330 
    331 	sdp_data_free(channel);
    332 	sdp_list_free(proto[0], 0);
    333 	sdp_list_free(proto[1], 0);
    334 	sdp_list_free(apseq, 0);
    335 	sdp_list_free(pfseq, 0);
    336 	sdp_list_free(aproto, 0);
    337 	sdp_list_free(root, 0);
    338 	sdp_list_free(svclass_id, 0);
    339 
    340 	return record;
    341 }
    342 
    343 static sdp_record_t *hfp_ag_record(uint8_t ch, uint32_t feat)
    344 {
    345 	sdp_list_t *svclass_id, *pfseq, *apseq, *root;
    346 	uuid_t root_uuid, svclass_uuid, ga_svclass_uuid;
    347 	uuid_t l2cap_uuid, rfcomm_uuid;
    348 	sdp_profile_desc_t profile;
    349 	sdp_list_t *aproto, *proto[2];
    350 	sdp_record_t *record;
    351 	sdp_data_t *channel, *features;
    352 	uint8_t netid = 0x01;
    353 	uint16_t sdpfeat;
    354 	sdp_data_t *network = sdp_data_alloc(SDP_UINT8, &netid);
    355 
    356 	record = sdp_record_alloc();
    357 	if (!record)
    358 		return NULL;
    359 
    360 	sdp_uuid16_create(&root_uuid, PUBLIC_BROWSE_GROUP);
    361 	root = sdp_list_append(0, &root_uuid);
    362 	sdp_set_browse_groups(record, root);
    363 
    364 	sdp_uuid16_create(&svclass_uuid, HANDSFREE_AGW_SVCLASS_ID);
    365 	svclass_id = sdp_list_append(0, &svclass_uuid);
    366 	sdp_uuid16_create(&ga_svclass_uuid, GENERIC_AUDIO_SVCLASS_ID);
    367 	svclass_id = sdp_list_append(svclass_id, &ga_svclass_uuid);
    368 	sdp_set_service_classes(record, svclass_id);
    369 
    370 	sdp_uuid16_create(&profile.uuid, HANDSFREE_PROFILE_ID);
    371 	profile.version = 0x0105;
    372 	pfseq = sdp_list_append(0, &profile);
    373 	sdp_set_profile_descs(record, pfseq);
    374 
    375 	sdp_uuid16_create(&l2cap_uuid, L2CAP_UUID);
    376 	proto[0] = sdp_list_append(0, &l2cap_uuid);
    377 	apseq = sdp_list_append(0, proto[0]);
    378 
    379 	sdp_uuid16_create(&rfcomm_uuid, RFCOMM_UUID);
    380 	proto[1] = sdp_list_append(0, &rfcomm_uuid);
    381 	channel = sdp_data_alloc(SDP_UINT8, &ch);
    382 	proto[1] = sdp_list_append(proto[1], channel);
    383 	apseq = sdp_list_append(apseq, proto[1]);
    384 
    385 	sdpfeat = (uint16_t) feat & 0xF;
    386 	features = sdp_data_alloc(SDP_UINT16, &sdpfeat);
    387 	sdp_attr_add(record, SDP_ATTR_SUPPORTED_FEATURES, features);
    388 
    389 	aproto = sdp_list_append(0, apseq);
    390 	sdp_set_access_protos(record, aproto);
    391 
    392 	sdp_set_info_attr(record, "Hands-Free Audio Gateway", 0, 0);
    393 
    394 	sdp_attr_add(record, SDP_ATTR_EXTERNAL_NETWORK, network);
    395 
    396 	sdp_data_free(channel);
    397 	sdp_list_free(proto[0], 0);
    398 	sdp_list_free(proto[1], 0);
    399 	sdp_list_free(apseq, 0);
    400 	sdp_list_free(pfseq, 0);
    401 	sdp_list_free(aproto, 0);
    402 	sdp_list_free(root, 0);
    403 	sdp_list_free(svclass_id, 0);
    404 
    405 	return record;
    406 }
    407 
    408 static void headset_auth_cb(DBusError *derr, void *user_data)
    409 {
    410 	struct audio_device *device = user_data;
    411 	GError *err = NULL;
    412 	GIOChannel *io;
    413 
    414 	if (derr && dbus_error_is_set(derr)) {
    415 		error("Access denied: %s", derr->message);
    416 		headset_set_state(device, HEADSET_STATE_DISCONNECTED);
    417 		return;
    418 	}
    419 
    420 	io = headset_get_rfcomm(device);
    421 
    422 	if (!bt_io_accept(io, headset_connect_cb, device, NULL, &err)) {
    423 		error("bt_io_accept: %s", err->message);
    424 		g_error_free(err);
    425 		headset_set_state(device, HEADSET_STATE_DISCONNECTED);
    426 		return;
    427 	}
    428 }
    429 
    430 static void ag_confirm(GIOChannel *chan, gpointer data)
    431 {
    432 	const char *server_uuid, *remote_uuid;
    433 	struct audio_device *device;
    434 	gboolean hfp_active;
    435 	bdaddr_t src, dst;
    436 	int perr;
    437 	GError *err = NULL;
    438 	uint8_t ch;
    439 
    440 	bt_io_get(chan, BT_IO_RFCOMM, &err,
    441 			BT_IO_OPT_SOURCE_BDADDR, &src,
    442 			BT_IO_OPT_DEST_BDADDR, &dst,
    443 			BT_IO_OPT_CHANNEL, &ch,
    444 			BT_IO_OPT_INVALID);
    445 	if (err) {
    446 		error("%s", err->message);
    447 		g_error_free(err);
    448 		goto drop;
    449 	}
    450 
    451 	if (ch == DEFAULT_HS_AG_CHANNEL) {
    452 		hfp_active = FALSE;
    453 		server_uuid = HSP_AG_UUID;
    454 		remote_uuid = HSP_HS_UUID;
    455 	} else {
    456 		hfp_active = TRUE;
    457 		server_uuid = HFP_AG_UUID;
    458 		remote_uuid = HFP_HS_UUID;
    459 	}
    460 
    461 	device = manager_get_device(&src, &dst, TRUE);
    462 	if (!device)
    463 		goto drop;
    464 
    465 	if (!manager_allow_headset_connection(device)) {
    466 		debug("Refusing headset: too many existing connections");
    467 		goto drop;
    468 	}
    469 
    470 	if (!device->headset) {
    471 		btd_device_add_uuid(device->btd_dev, remote_uuid);
    472 		if (!device->headset)
    473 			goto drop;
    474 	}
    475 
    476 	if (headset_get_state(device) > HEADSET_STATE_DISCONNECTED) {
    477 		debug("Refusing new connection since one already exists");
    478 		goto drop;
    479 	}
    480 
    481 	set_hfp_active(device, hfp_active);
    482 
    483 	if (headset_connect_rfcomm(device, chan) < 0) {
    484 		error("headset_connect_rfcomm failed");
    485 		goto drop;
    486 	}
    487 
    488 	headset_set_state(device, HEADSET_STATE_CONNECT_IN_PROGRESS);
    489 
    490 	perr = audio_device_request_authorization(device, server_uuid,
    491 						headset_auth_cb, device);
    492 	if (perr < 0) {
    493 		debug("Authorization denied: %s", strerror(-perr));
    494 		headset_set_state(device, HEADSET_STATE_DISCONNECTED);
    495 		return;
    496 	}
    497 
    498 	device->auto_connect = auto_connect;
    499 
    500 	return;
    501 
    502 drop:
    503 	g_io_channel_shutdown(chan, TRUE, NULL);
    504 }
    505 
    506 static void gateway_auth_cb(DBusError *derr, void *user_data)
    507 {
    508 	struct audio_device *device = user_data;
    509 
    510 	if (derr && dbus_error_is_set(derr))
    511 		error("Access denied: %s", derr->message);
    512 	else {
    513 		char ag_address[18];
    514 
    515 		ba2str(&device->dst, ag_address);
    516 		debug("Accepted AG connection from %s for %s",
    517 			ag_address, device->path);
    518 
    519 		gateway_start_service(device);
    520 	}
    521 }
    522 
    523 static void hf_io_cb(GIOChannel *chan, gpointer data)
    524 {
    525 	bdaddr_t src, dst;
    526 	GError *err = NULL;
    527 	uint8_t ch;
    528 	const char *server_uuid, *remote_uuid;
    529 	uint16_t svclass;
    530 	struct audio_device *device;
    531 	int perr;
    532 
    533 	bt_io_get(chan, BT_IO_RFCOMM, &err,
    534 			BT_IO_OPT_SOURCE_BDADDR, &src,
    535 			BT_IO_OPT_DEST_BDADDR, &dst,
    536 			BT_IO_OPT_CHANNEL, &ch,
    537 			BT_IO_OPT_INVALID);
    538 
    539 	if (err) {
    540 		error("%s", err->message);
    541 		g_error_free(err);
    542 		return;
    543 	}
    544 
    545 	server_uuid = HFP_HS_UUID;
    546 	remote_uuid = HFP_AG_UUID;
    547 	svclass = HANDSFREE_AGW_SVCLASS_ID;
    548 
    549 	device = manager_get_device(&src, &dst, TRUE);
    550 	if (!device)
    551 		goto drop;
    552 
    553 	if (!device->gateway) {
    554 		btd_device_add_uuid(device->btd_dev, remote_uuid);
    555 		if (!device->gateway)
    556 			goto drop;
    557 	}
    558 
    559 	if (gateway_is_connected(device)) {
    560 		debug("Refusing new connection since one already exists");
    561 		goto drop;
    562 	}
    563 
    564 	if (gateway_connect_rfcomm(device, chan) < 0) {
    565 		error("Allocating new GIOChannel failed!");
    566 		goto drop;
    567 	}
    568 
    569 	perr = audio_device_request_authorization(device, server_uuid,
    570 						gateway_auth_cb, device);
    571 	if (perr < 0) {
    572 		debug("Authorization denied!");
    573 		goto drop;
    574 	}
    575 
    576 	return;
    577 
    578 drop:
    579 	g_io_channel_shutdown(chan, TRUE, NULL);
    580 	g_io_channel_unref(chan);
    581 	return;
    582 }
    583 
    584 static int headset_server_init(struct audio_adapter *adapter)
    585 {
    586 	uint8_t chan = DEFAULT_HS_AG_CHANNEL;
    587 	sdp_record_t *record;
    588 	gboolean master = TRUE;
    589 	GError *err = NULL;
    590 	uint32_t features;
    591 	GIOChannel *io;
    592 	bdaddr_t src;
    593 
    594 	if (config) {
    595 		gboolean tmp;
    596 
    597 		tmp = g_key_file_get_boolean(config, "General", "Master",
    598 						&err);
    599 		if (err) {
    600 			debug("audio.conf: %s", err->message);
    601 			g_clear_error(&err);
    602 		} else
    603 			master = tmp;
    604 	}
    605 
    606 	adapter_get_address(adapter->btd_adapter, &src);
    607 
    608 	io =  bt_io_listen(BT_IO_RFCOMM, NULL, ag_confirm, adapter, NULL, &err,
    609 				BT_IO_OPT_SOURCE_BDADDR, &src,
    610 				BT_IO_OPT_CHANNEL, chan,
    611 				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
    612 				BT_IO_OPT_MASTER, master,
    613 				BT_IO_OPT_INVALID);
    614 	if (!io)
    615 		goto failed;
    616 
    617 	adapter->hsp_ag_server = io;
    618 
    619 	record = hsp_ag_record(chan);
    620 	if (!record) {
    621 		error("Unable to allocate new service record");
    622 		goto failed;
    623 	}
    624 
    625 	if (add_record_to_server(&src, record) < 0) {
    626 		error("Unable to register HS AG service record");
    627 		sdp_record_free(record);
    628 		goto failed;
    629 	}
    630 	adapter->hsp_ag_record_id = record->handle;
    631 
    632 	features = headset_config_init(config);
    633 
    634 	if (!enabled.hfp)
    635 		return 0;
    636 
    637 	chan = DEFAULT_HF_AG_CHANNEL;
    638 
    639 	io = bt_io_listen(BT_IO_RFCOMM, NULL, ag_confirm, adapter, NULL, &err,
    640 				BT_IO_OPT_SOURCE_BDADDR, &src,
    641 				BT_IO_OPT_CHANNEL, chan,
    642 				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
    643 				BT_IO_OPT_MASTER, master,
    644 				BT_IO_OPT_INVALID);
    645 	if (!io)
    646 		goto failed;
    647 
    648 	adapter->hfp_ag_server = io;
    649 
    650 	record = hfp_ag_record(chan, features);
    651 	if (!record) {
    652 		error("Unable to allocate new service record");
    653 		goto failed;
    654 	}
    655 
    656 	if (add_record_to_server(&src, record) < 0) {
    657 		error("Unable to register HF AG service record");
    658 		sdp_record_free(record);
    659 		goto failed;
    660 	}
    661 	adapter->hfp_ag_record_id = record->handle;
    662 
    663 	return 0;
    664 
    665 failed:
    666 	error("%s", err->message);
    667 	g_error_free(err);
    668 	if (adapter->hsp_ag_server) {
    669 		g_io_channel_shutdown(adapter->hsp_ag_server, TRUE, NULL);
    670 		g_io_channel_unref(adapter->hsp_ag_server);
    671 		adapter->hsp_ag_server = NULL;
    672 	}
    673 
    674 	if (adapter->hfp_ag_server) {
    675 		g_io_channel_shutdown(adapter->hfp_ag_server, TRUE, NULL);
    676 		g_io_channel_unref(adapter->hfp_ag_server);
    677 		adapter->hfp_ag_server = NULL;
    678 	}
    679 
    680 	return -1;
    681 }
    682 
    683 static int gateway_server_init(struct audio_adapter *adapter)
    684 {
    685 	uint8_t chan = DEFAULT_HFP_HS_CHANNEL;
    686 	sdp_record_t *record;
    687 	gboolean master = TRUE;
    688 	GError *err = NULL;
    689 	GIOChannel *io;
    690 	bdaddr_t src;
    691 
    692 	if (config) {
    693 		gboolean tmp;
    694 
    695 		tmp = g_key_file_get_boolean(config, "General", "Master",
    696 						&err);
    697 		if (err) {
    698 			debug("audio.conf: %s", err->message);
    699 			g_clear_error(&err);
    700 		} else
    701 			master = tmp;
    702 	}
    703 
    704 	adapter_get_address(adapter->btd_adapter, &src);
    705 
    706 	io = bt_io_listen(BT_IO_RFCOMM, NULL, hf_io_cb, adapter, NULL, &err,
    707 				BT_IO_OPT_SOURCE_BDADDR, &src,
    708 				BT_IO_OPT_CHANNEL, chan,
    709 				BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM,
    710 				BT_IO_OPT_MASTER, master,
    711 				BT_IO_OPT_INVALID);
    712 	if (!io) {
    713 		error("%s", err->message);
    714 		g_error_free(err);
    715 		return -1;
    716 	}
    717 
    718 	adapter->hfp_hs_server = io;
    719 	record = hfp_hs_record(chan);
    720 	if (!record) {
    721 		error("Unable to allocate new service record");
    722 		return -1;
    723 	}
    724 
    725 	if (add_record_to_server(&src, record) < 0) {
    726 		error("Unable to register HFP HS service record");
    727 		sdp_record_free(record);
    728 		g_io_channel_unref(adapter->hfp_hs_server);
    729 		adapter->hfp_hs_server = NULL;
    730 		return -1;
    731 	}
    732 
    733 	adapter->hfp_hs_record_id = record->handle;
    734 
    735 	return 0;
    736 }
    737 
    738 static int audio_probe(struct btd_device *device, GSList *uuids)
    739 {
    740 	struct btd_adapter *adapter = device_get_adapter(device);
    741 	bdaddr_t src, dst;
    742 	struct audio_device *audio_dev;
    743 
    744 	adapter_get_address(adapter, &src);
    745 	device_get_address(device, &dst);
    746 
    747 	audio_dev = manager_get_device(&src, &dst, TRUE);
    748 	if (!audio_dev) {
    749 		debug("audio_probe: unable to get a device object");
    750 		return -1;
    751 	}
    752 
    753 	g_slist_foreach(uuids, (GFunc) handle_uuid, audio_dev);
    754 
    755 	return 0;
    756 }
    757 
    758 static void audio_remove(struct btd_device *device)
    759 {
    760 	struct audio_device *dev;
    761 	const char *path;
    762 
    763 	path = device_get_path(device);
    764 
    765 	dev = manager_find_device(path, NULL, NULL, NULL, FALSE);
    766 	if (!dev)
    767 		return;
    768 
    769 	devices = g_slist_remove(devices, dev);
    770 
    771 	audio_device_unregister(dev);
    772 }
    773 
    774 static struct audio_adapter *audio_adapter_ref(struct audio_adapter *adp)
    775 {
    776 	adp->ref++;
    777 
    778 	debug("audio_adapter_ref(%p): ref=%d", adp, adp->ref);
    779 
    780 	return adp;
    781 }
    782 
    783 static void audio_adapter_unref(struct audio_adapter *adp)
    784 {
    785 	adp->ref--;
    786 
    787 	debug("audio_adapter_unref(%p): ref=%d", adp, adp->ref);
    788 
    789 	if (adp->ref > 0)
    790 		return;
    791 
    792 	adapters = g_slist_remove(adapters, adp);
    793 	btd_adapter_unref(adp->btd_adapter);
    794 	g_free(adp);
    795 }
    796 
    797 static struct audio_adapter *audio_adapter_create(struct btd_adapter *adapter)
    798 {
    799 	struct audio_adapter *adp;
    800 
    801 	adp = g_new0(struct audio_adapter, 1);
    802 	adp->btd_adapter = btd_adapter_ref(adapter);
    803 
    804 	return audio_adapter_ref(adp);
    805 }
    806 
    807 static struct audio_adapter *audio_adapter_get(struct btd_adapter *adapter)
    808 {
    809 	struct audio_adapter *adp;
    810 
    811 	adp = find_adapter(adapters, adapter);
    812 	if (!adp) {
    813 		adp = audio_adapter_create(adapter);
    814 		if (!adp)
    815 			return NULL;
    816 		adapters = g_slist_append(adapters, adp);
    817 	} else
    818 		audio_adapter_ref(adp);
    819 
    820 	return adp;
    821 }
    822 
    823 static int headset_server_probe(struct btd_adapter *adapter)
    824 {
    825 	struct audio_adapter *adp;
    826 	const gchar *path = adapter_get_path(adapter);
    827 	int ret;
    828 
    829 	DBG("path %s", path);
    830 
    831 	adp = audio_adapter_get(adapter);
    832 	if (!adp)
    833 		return -EINVAL;
    834 
    835 	ret = headset_server_init(adp);
    836 	if (ret < 0) {
    837 		audio_adapter_unref(adp);
    838 		return ret;
    839 	}
    840 
    841 	return 0;
    842 }
    843 
    844 static void headset_server_remove(struct btd_adapter *adapter)
    845 {
    846 	struct audio_adapter *adp;
    847 	const gchar *path = adapter_get_path(adapter);
    848 
    849 	DBG("path %s", path);
    850 
    851 	adp = find_adapter(adapters, adapter);
    852 	if (!adp)
    853 		return;
    854 
    855 	if (adp->hsp_ag_record_id) {
    856 		remove_record_from_server(adp->hsp_ag_record_id);
    857 		adp->hsp_ag_record_id = 0;
    858 	}
    859 
    860 	if (adp->hsp_ag_server) {
    861 		g_io_channel_shutdown(adp->hsp_ag_server, TRUE, NULL);
    862 		g_io_channel_unref(adp->hsp_ag_server);
    863 		adp->hsp_ag_server = NULL;
    864 	}
    865 
    866 	if (adp->hfp_ag_record_id) {
    867 		remove_record_from_server(adp->hfp_ag_record_id);
    868 		adp->hfp_ag_record_id = 0;
    869 	}
    870 
    871 	if (adp->hfp_ag_server) {
    872 		g_io_channel_shutdown(adp->hfp_ag_server, TRUE, NULL);
    873 		g_io_channel_unref(adp->hfp_ag_server);
    874 		adp->hfp_ag_server = NULL;
    875 	}
    876 
    877 	audio_adapter_unref(adp);
    878 }
    879 
    880 static int gateway_server_probe(struct btd_adapter *adapter)
    881 {
    882 	struct audio_adapter *adp;
    883 	const gchar *path = adapter_get_path(adapter);
    884 	int ret;
    885 
    886 	DBG("path %s", path);
    887 
    888 	adp = audio_adapter_get(adapter);
    889 	if (!adp)
    890 		return -EINVAL;
    891 
    892 	ret = gateway_server_init(adp);
    893 	if (ret < 0) {
    894 		audio_adapter_ref(adp);
    895 		return ret;
    896 	}
    897 
    898 	return 0;
    899 }
    900 
    901 static void gateway_server_remove(struct btd_adapter *adapter)
    902 {
    903 	struct audio_adapter *adp;
    904 	const gchar *path = adapter_get_path(adapter);
    905 
    906 	DBG("path %s", path);
    907 
    908 	adp = find_adapter(adapters, adapter);
    909 	if (!adp)
    910 		return;
    911 
    912 	if (adp->hfp_hs_record_id) {
    913 		remove_record_from_server(adp->hfp_hs_record_id);
    914 		adp->hfp_hs_record_id = 0;
    915 	}
    916 
    917 	if (adp->hfp_hs_server) {
    918 		g_io_channel_unref(adp->hfp_hs_server);
    919 		adp->hfp_hs_server = NULL;
    920 	}
    921 
    922 	audio_adapter_ref(adp);
    923 }
    924 
    925 static int a2dp_server_probe(struct btd_adapter *adapter)
    926 {
    927 	struct audio_adapter *adp;
    928 	const gchar *path = adapter_get_path(adapter);
    929 	bdaddr_t src;
    930 	int ret;
    931 
    932 	DBG("path %s", path);
    933 
    934 	adp = audio_adapter_get(adapter);
    935 	if (!adp)
    936 		return -EINVAL;
    937 
    938 	adapter_get_address(adapter, &src);
    939 
    940 	ret = a2dp_register(connection, &src, config);
    941 	if (ret < 0) {
    942 		audio_adapter_unref(adp);
    943 		return ret;
    944 	}
    945 
    946 	return 0;
    947 }
    948 
    949 static void a2dp_server_remove(struct btd_adapter *adapter)
    950 {
    951 	struct audio_adapter *adp;
    952 	const gchar *path = adapter_get_path(adapter);
    953 	bdaddr_t src;
    954 
    955 	DBG("path %s", path);
    956 
    957 	adp = find_adapter(adapters, adapter);
    958 	if (!adp)
    959 		return;
    960 
    961 	adapter_get_address(adapter, &src);
    962 	a2dp_unregister(&src);
    963 	audio_adapter_unref(adp);
    964 }
    965 
    966 static int avrcp_server_probe(struct btd_adapter *adapter)
    967 {
    968 	struct audio_adapter *adp;
    969 	const gchar *path = adapter_get_path(adapter);
    970 	bdaddr_t src;
    971 
    972 	DBG("path %s", path);
    973 
    974 	adp = audio_adapter_get(adapter);
    975 	if (!adp)
    976 		return -EINVAL;
    977 
    978 	adapter_get_address(adapter, &src);
    979 
    980 	return avrcp_register(connection, &src, config);
    981 }
    982 
    983 static void avrcp_server_remove(struct btd_adapter *adapter)
    984 {
    985 	struct audio_adapter *adp;
    986 	const gchar *path = adapter_get_path(adapter);
    987 	bdaddr_t src;
    988 
    989 	DBG("path %s", path);
    990 
    991 	adp = find_adapter(adapters, adapter);
    992 	if (!adp)
    993 		return;
    994 
    995 	adapter_get_address(adapter, &src);
    996 	avrcp_unregister(&src);
    997 	audio_adapter_unref(adp);
    998 }
    999 
   1000 static struct btd_device_driver audio_driver = {
   1001 	.name	= "audio",
   1002 	.uuids	= BTD_UUIDS(HSP_HS_UUID, HFP_HS_UUID, HSP_AG_UUID, HFP_AG_UUID,
   1003 			ADVANCED_AUDIO_UUID, A2DP_SOURCE_UUID, A2DP_SINK_UUID,
   1004 			AVRCP_TARGET_UUID, AVRCP_REMOTE_UUID),
   1005 	.probe	= audio_probe,
   1006 	.remove	= audio_remove,
   1007 };
   1008 
   1009 static struct btd_adapter_driver headset_server_driver = {
   1010 	.name	= "audio-headset",
   1011 	.probe	= headset_server_probe,
   1012 	.remove	= headset_server_remove,
   1013 };
   1014 
   1015 static struct btd_adapter_driver gateway_server_driver = {
   1016 	.name	= "audio-gateway",
   1017 	.probe	= gateway_server_probe,
   1018 	.remove	= gateway_server_remove,
   1019 };
   1020 
   1021 static struct btd_adapter_driver a2dp_server_driver = {
   1022 	.name	= "audio-a2dp",
   1023 	.probe	= a2dp_server_probe,
   1024 	.remove	= a2dp_server_remove,
   1025 };
   1026 
   1027 static struct btd_adapter_driver avrcp_server_driver = {
   1028 	.name	= "audio-control",
   1029 	.probe	= avrcp_server_probe,
   1030 	.remove	= avrcp_server_remove,
   1031 };
   1032 
   1033 int audio_manager_init(DBusConnection *conn, GKeyFile *conf,
   1034 							gboolean *enable_sco)
   1035 {
   1036 	char **list;
   1037 	int i;
   1038 	gboolean b;
   1039 	GError *err = NULL;
   1040 
   1041 	connection = dbus_connection_ref(conn);
   1042 
   1043 	if (!conf)
   1044 		goto proceed;
   1045 
   1046 	config = conf;
   1047 
   1048 	list = g_key_file_get_string_list(config, "General", "Enable",
   1049 						NULL, NULL);
   1050 	for (i = 0; list && list[i] != NULL; i++) {
   1051 		if (g_str_equal(list[i], "Headset"))
   1052 			enabled.headset = TRUE;
   1053 		else if (g_str_equal(list[i], "Gateway"))
   1054 			enabled.gateway = TRUE;
   1055 		else if (g_str_equal(list[i], "Sink"))
   1056 			enabled.sink = TRUE;
   1057 		else if (g_str_equal(list[i], "Source"))
   1058 			enabled.source = TRUE;
   1059 		else if (g_str_equal(list[i], "Control"))
   1060 			enabled.control = TRUE;
   1061 	}
   1062 	g_strfreev(list);
   1063 
   1064 	list = g_key_file_get_string_list(config, "General", "Disable",
   1065 						NULL, NULL);
   1066 	for (i = 0; list && list[i] != NULL; i++) {
   1067 		if (g_str_equal(list[i], "Headset"))
   1068 			enabled.headset = FALSE;
   1069 		else if (g_str_equal(list[i], "Gateway"))
   1070 			enabled.gateway = FALSE;
   1071 		else if (g_str_equal(list[i], "Sink"))
   1072 			enabled.sink = FALSE;
   1073 		else if (g_str_equal(list[i], "Source"))
   1074 			enabled.source = FALSE;
   1075 		else if (g_str_equal(list[i], "Control"))
   1076 			enabled.control = FALSE;
   1077 	}
   1078 	g_strfreev(list);
   1079 
   1080 	b = g_key_file_get_boolean(config, "General", "AutoConnect", &err);
   1081 	if (err) {
   1082 		debug("audio.conf: %s", err->message);
   1083 		g_clear_error(&err);
   1084 	} else
   1085 		auto_connect = b;
   1086 
   1087 	b = g_key_file_get_boolean(config, "Headset", "HFP",
   1088 					&err);
   1089 	if (err)
   1090 		g_clear_error(&err);
   1091 	else
   1092 		enabled.hfp = b;
   1093 
   1094 	err = NULL;
   1095 	i = g_key_file_get_integer(config, "Headset", "MaxConnected",
   1096 					&err);
   1097 	if (err) {
   1098 		debug("audio.conf: %s", err->message);
   1099 		g_clear_error(&err);
   1100 	} else
   1101 		max_connected_headsets = i;
   1102 
   1103 proceed:
   1104 	if (enabled.headset) {
   1105 		telephony_init();
   1106 		btd_register_adapter_driver(&headset_server_driver);
   1107 	}
   1108 
   1109 	if (enabled.gateway)
   1110 		btd_register_adapter_driver(&gateway_server_driver);
   1111 
   1112 	if (enabled.source || enabled.sink)
   1113 		btd_register_adapter_driver(&a2dp_server_driver);
   1114 
   1115 	if (enabled.control)
   1116 		btd_register_adapter_driver(&avrcp_server_driver);
   1117 
   1118 	btd_register_device_driver(&audio_driver);
   1119 
   1120 	*enable_sco = (enabled.gateway || enabled.headset);
   1121 
   1122 	return 0;
   1123 }
   1124 
   1125 void audio_manager_exit(void)
   1126 {
   1127 	/* Bail out early if we haven't been initialized */
   1128 	if (connection == NULL)
   1129 		return;
   1130 
   1131 	dbus_connection_unref(connection);
   1132 	connection = NULL;
   1133 
   1134 	if (config) {
   1135 		g_key_file_free(config);
   1136 		config = NULL;
   1137 	}
   1138 
   1139 	if (enabled.headset) {
   1140 		btd_unregister_adapter_driver(&headset_server_driver);
   1141 		telephony_exit();
   1142 	}
   1143 
   1144 	if (enabled.gateway)
   1145 		btd_unregister_adapter_driver(&gateway_server_driver);
   1146 
   1147 	if (enabled.source || enabled.sink)
   1148 		btd_unregister_adapter_driver(&a2dp_server_driver);
   1149 
   1150 	if (enabled.control)
   1151 		btd_unregister_adapter_driver(&avrcp_server_driver);
   1152 
   1153 	btd_unregister_device_driver(&audio_driver);
   1154 }
   1155 
   1156 struct audio_device *manager_find_device(const char *path,
   1157 					const bdaddr_t *src,
   1158 					const bdaddr_t *dst,
   1159 					const char *interface,
   1160 					gboolean connected)
   1161 {
   1162 	GSList *l;
   1163 
   1164 	for (l = devices; l != NULL; l = l->next) {
   1165 		struct audio_device *dev = l->data;
   1166 
   1167 		if ((path && (strcmp(path, "")) && strcmp(dev->path, path)))
   1168 			continue;
   1169 
   1170 		if ((src && bacmp(src, BDADDR_ANY)) && bacmp(&dev->src, src))
   1171 			continue;
   1172 
   1173 		if ((dst && bacmp(dst, BDADDR_ANY)) && bacmp(&dev->dst, dst))
   1174 			continue;
   1175 
   1176 		if (interface && !strcmp(AUDIO_HEADSET_INTERFACE, interface)
   1177 				&& !dev->headset)
   1178 			continue;
   1179 
   1180 		if (interface && !strcmp(AUDIO_GATEWAY_INTERFACE, interface)
   1181 				&& !dev->gateway)
   1182 			continue;
   1183 
   1184 		if (interface && !strcmp(AUDIO_SINK_INTERFACE, interface)
   1185 				&& !dev->sink)
   1186 			continue;
   1187 
   1188 		if (interface && !strcmp(AUDIO_SOURCE_INTERFACE, interface)
   1189 				&& !dev->source)
   1190 			continue;
   1191 
   1192 		if (interface && !strcmp(AUDIO_CONTROL_INTERFACE, interface)
   1193 				&& !dev->control)
   1194 			continue;
   1195 
   1196 		if (connected && !audio_device_is_active(dev, interface))
   1197 			continue;
   1198 
   1199 		return dev;
   1200 	}
   1201 
   1202 	return NULL;
   1203 }
   1204 
   1205 struct audio_device *manager_get_device(const bdaddr_t *src,
   1206 					const bdaddr_t *dst,
   1207 					gboolean create)
   1208 {
   1209 	struct audio_device *dev;
   1210 	struct btd_adapter *adapter;
   1211 	struct btd_device *device;
   1212 	char addr[18];
   1213 	const char *path;
   1214 
   1215 	dev = manager_find_device(NULL, src, dst, NULL, FALSE);
   1216 	if (dev)
   1217 		return dev;
   1218 
   1219 	if (!create)
   1220 		return NULL;
   1221 
   1222 	ba2str(src, addr);
   1223 
   1224 	adapter = manager_find_adapter(src);
   1225 	if (!adapter) {
   1226 		error("Unable to get a btd_adapter object for %s",
   1227 				addr);
   1228 		return NULL;
   1229 	}
   1230 
   1231 	ba2str(dst, addr);
   1232 
   1233 	device = adapter_get_device(connection, adapter, addr);
   1234 	if (!device) {
   1235 		error("Unable to get btd_device object for %s", addr);
   1236 		return NULL;
   1237 	}
   1238 
   1239 	path = device_get_path(device);
   1240 
   1241 	dev = audio_device_register(connection, device, path, src, dst);
   1242 	if (!dev)
   1243 		return NULL;
   1244 
   1245 	devices = g_slist_append(devices, dev);
   1246 
   1247 	return dev;
   1248 }
   1249 
   1250 gboolean manager_allow_headset_connection(struct audio_device *device)
   1251 {
   1252 	GSList *l;
   1253 	int connected = 0;
   1254 
   1255 	for (l = devices; l != NULL; l = l->next) {
   1256 		struct audio_device *dev = l->data;
   1257 		struct headset *hs = dev->headset;
   1258 
   1259 		if (dev == device)
   1260 			continue;
   1261 
   1262 		if (bacmp(&dev->src, &device->src))
   1263 			continue;
   1264 
   1265 		if (!hs)
   1266 			continue;
   1267 
   1268 		if (headset_get_state(dev) > HEADSET_STATE_DISCONNECTED)
   1269 			connected++;
   1270 
   1271 		if (connected >= max_connected_headsets)
   1272 			return FALSE;
   1273 	}
   1274 
   1275 	return TRUE;
   1276 }
   1277