summaryrefslogtreecommitdiffstats
path: root/audio/headset.c
diff options
context:
space:
mode:
authorJohan Hedberg <johan.hedberg@nokia.com>2007-02-15 07:20:44 +0000
committerJohan Hedberg <johan.hedberg@nokia.com>2007-02-15 07:20:44 +0000
commitc9395045adf8b1a3c4ed7407ec7f492417bc28f0 (patch)
treed997663895505cdd917c3e97f3cf45b56bfa57ea /audio/headset.c
parent68960ec8215ace07f671a997779d99b1cf9f0605 (diff)
Allow registering as an external service (for debugin purposes)
Diffstat (limited to 'audio/headset.c')
-rw-r--r--audio/headset.c47
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");