diff options
author | Johan Hedberg <johan.hedberg@nokia.com> | 2007-02-15 07:20:44 +0000 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@nokia.com> | 2007-02-15 07:20:44 +0000 |
commit | c9395045adf8b1a3c4ed7407ec7f492417bc28f0 (patch) | |
tree | d997663895505cdd917c3e97f3cf45b56bfa57ea /audio/headset.c | |
parent | 68960ec8215ace07f671a997779d99b1cf9f0605 (diff) |
Allow registering as an external service (for debugin purposes)
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"); |