diff options
| author | Johan Hedberg <johan.hedberg@nokia.com> | 2008-03-05 17:43:54 +0000 | 
|---|---|---|
| committer | Johan Hedberg <johan.hedberg@nokia.com> | 2008-03-05 17:43:54 +0000 | 
| commit | aa4ce3509e6bf62a20e89d680e2792388f0afde1 (patch) | |
| tree | 18aa2354290c96b7d1a1c8a941463334414163a9 /audio/manager.c | |
| parent | 37c2fa54a9eb3d086849acdf4a4d64157334b21a (diff) | |
Do master role switching by default and add ForceMaster config option
Diffstat (limited to 'audio/manager.c')
| -rw-r--r-- | audio/manager.c | 46 | 
1 files changed, 31 insertions, 15 deletions
| diff --git a/audio/manager.c b/audio/manager.c index c5f7df30..b59e9dbf 100644 --- a/audio/manager.c +++ b/audio/manager.c @@ -1485,7 +1485,7 @@ failed:  	return TRUE;  } -static GIOChannel *server_socket(uint8_t *channel) +static GIOChannel *server_socket(uint8_t *channel, gboolean master)  {  	int sock, lm;  	struct sockaddr_rc addr; @@ -1499,6 +1499,10 @@ static GIOChannel *server_socket(uint8_t *channel)  	}  	lm = RFCOMM_LM_SECURE; + +	if (master) +		lm |= RFCOMM_LM_MASTER; +  	if (setsockopt(sock, SOL_RFCOMM, RFCOMM_LM, &lm, sizeof(lm)) < 0) {  		error("server setsockopt: %s (%d)", strerror(errno), errno);  		close(sock); @@ -1540,14 +1544,36 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config)  {  	uint8_t chan = DEFAULT_HS_AG_CHANNEL;  	sdp_buf_t buf; -	gboolean hfp = TRUE; +	gboolean hfp = TRUE, master = TRUE;  	GError *err = NULL;  	uint32_t features;  	if (!(enabled.headset || enabled.gateway))  		return 0; -	hs_server = server_socket(&chan); +	if (config) { +		gboolean tmp; + +		tmp = g_key_file_get_boolean(config, "General", "ForceMaster", +						&err); +		if (err) { +			debug("audio.conf: %s", err->message); +			g_error_free(err); +			err = NULL; +		} else +			master = tmp; + +		tmp = g_key_file_get_boolean(config, "Headset", "DisableHFP", +						&err); +		if (err) { +			debug("audio.conf: %s", err->message); +			g_error_free(err); +			err = NULL; +		} else +			hfp = tmp; +	} + +	hs_server = server_socket(&chan, master);  	if (!hs_server)  		return -1; @@ -1568,22 +1594,12 @@ static int headset_server_init(DBusConnection *conn, GKeyFile *config)  	g_io_add_watch(hs_server, G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,  				(GIOFunc) ag_io_cb, NULL); -	if (config) { -		hfp = g_key_file_get_boolean(config, "Headset", "EnableHFP", -						&err); -		if (err) { -			debug("audio.conf: %s", err->message); -			g_error_free(err); -			err = NULL; -		} -	} -  	if (!hfp)  		return 0;  	chan = DEFAULT_HF_AG_CHANNEL; -	hf_server = server_socket(&chan); +	hf_server = server_socket(&chan, master);  	if (!hf_server)  		return -1; @@ -1697,7 +1713,7 @@ int audio_init(DBusConnection *conn, GKeyFile *config)  			goto failed;  	} -	if (enabled.control && avrcp_init(conn) < 0) +	if (enabled.control && avrcp_init(conn, config) < 0)  		goto failed;  	if (!dbus_connection_register_interface(conn, AUDIO_MANAGER_PATH, | 
