diff options
Diffstat (limited to 'audio/headset.c')
| -rw-r--r-- | audio/headset.c | 47 | 
1 files changed, 46 insertions, 1 deletions
| diff --git a/audio/headset.c b/audio/headset.c index 32db5444..82909701 100644 --- a/audio/headset.c +++ b/audio/headset.c @@ -1821,6 +1821,38 @@ void audio_manager_free(struct manager* amanager)  	free(amanager);  } +static gboolean register_service(const char *ident, const char *name, +					const char *desc) +{ +	DBusMessage *msg, *reply; +	DBusError derr; + +	msg = dbus_message_new_method_call("org.bluez", "/org/bluez", +					"org.bluez.Database", "RegisterService"); + +	if (!msg) { +		error("Unable to allocate new message"); +		return FALSE; +	} + +	dbus_message_append_args(msg, DBUS_TYPE_STRING, &ident, +					DBUS_TYPE_STRING, &name, +					DBUS_TYPE_STRING, &desc, +					DBUS_TYPE_INVALID); + +	dbus_error_init(&derr); +	reply = dbus_connection_send_with_reply_and_block(connection, msg, -1, &derr); +	if (dbus_error_is_set(&derr)) { +		error("RegisterService: %s", derr.message); +		dbus_error_free(&derr); +		return FALSE; +	} + +	dbus_message_unref(reply); + +	return TRUE; +} +  static void sig_term(int sig)  {  	g_main_loop_quit(main_loop); @@ -1832,13 +1864,14 @@ int main(int argc, char *argv[])  	char *opt_bda = NULL;  	char *opt_input = NULL;  	char *opt_output = NULL; +	gboolean register_svc = FALSE;  	bdaddr_t bda;  	struct headset *hs;  	struct manager *manager;  	struct sigaction sa;  	int opt; -	while ((opt = getopt(argc, argv, "c:o:i:d")) != EOF) { +	while ((opt = getopt(argc, argv, "c:o:i:dr")) != EOF) {  		switch (opt) {  		case 'c':  			opt_channel = strtol(optarg, NULL, 0); @@ -1856,6 +1889,10 @@ int main(int argc, char *argv[])  			enable_debug();  			break; +		case 'r': +			register_svc = TRUE; +			break; +  		default:  			printf("Usage: %s -c local_channel [-d] [-o output] [-i input] [bdaddr]\n", argv[0]);  			exit(1); @@ -1886,6 +1923,14 @@ int main(int argc, char *argv[])  		exit(1);  	} +	if (register_svc && !register_service("headset", "Headset service", +						"Headset service")) { +		error("Unable to register service"); +		dbus_connection_unref(connection); +		g_main_loop_unref(main_loop); +		exit(1); +	} +  	manager = audio_manager_new(connection);  	if (!manager) {  		error("Failed to create an audio manager"); | 
