static void client_cleanup(context_t *c) { mrp_dbus_follow_name(c->dbus, SERVER_NAME, server_status_cb, c); mrp_del_timer(c->timer); mrp_dbus_subscribe_signal(c->dbus, pong_handler, c, c->name, SERVER_PATH, SERVER_INTERFACE, PONG, NULL); mrp_dbus_unref(c->dbus); }
static int register_req(mrp_dbus_t *dbus, mrp_dbus_msg_t *req, void *user_data) { static srs_client_ops_t ops = { .notify_focus = focus_notify, .notify_command = command_notify, .notify_render = voice_notify, }; dbusif_t *bus = (dbusif_t *)user_data; srs_context_t *srs = bus->self->srs; const char *id, *name, *appcls, *errmsg; char **cmds; int ncmd, err; srs_client_t *c; ncmd = 0; err = parse_register(req, &id, &name, &appcls, &cmds, &ncmd, &errmsg); if (err) { reply_register(dbus, req, err, errmsg); return TRUE; } mrp_debug("got register request from %s", id); c = client_create(srs, SRS_CLIENT_TYPE_EXTERNAL, name, appcls, cmds, ncmd, id, &ops, bus); if (c != NULL) { if (mrp_dbus_follow_name(dbus, id, name_change_cb, bus)) { err = 0; errmsg = NULL; } else { client_destroy(c); err = EINVAL; errmsg = "failed to track DBUS name"; } } else { err = EINVAL; errmsg = "failed to register client"; } reply_register(dbus, req, err, errmsg); return TRUE; }
int dbusif_register_player(context_t *ctx, const char *name) { dbusif_t *dbusif; mrp_dbus_t *dbus; char dbus_name[1024]; if (!ctx || !name || !(dbusif = ctx->dbusif) || !(dbus = dbusif->dbus)) return -1; snprintf(dbus_name, sizeof(dbus_name), "org.mpris.MediaPlayer2.%s", name); if (!mrp_dbus_follow_name(dbus, dbus_name, name_follow_cb, ctx)) return -1; return 0; }
static void client_setup(context_t *c) { const char *dest; c->dbus = mrp_dbus_connect(c->ml, c->busaddr, NULL); if (c->dbus == NULL) { mrp_log_error("Failed to create D-BUS connection to '%s' bus.", c->busaddr); exit(1); } c->name = mrp_dbus_get_unique_name(c->dbus); mrp_log_info("Our address is %s on the bus...", c->name ? c->name : "unknown"); mrp_dbus_follow_name(c->dbus, SERVER_NAME, server_status_cb, c); if (c->all_pongs) { mrp_log_info("Subscribing for all pong signals..."); dest = NULL; } else { mrp_log_info("Subscribing only for pong signals to us..."); dest = c->name; } if (!mrp_dbus_subscribe_signal(c->dbus, pong_handler, c, dest, SERVER_PATH, SERVER_INTERFACE, PONG, NULL)) { mrp_log_error("Failed to subscribe for signal '%s/%s.%s'.", SERVER_PATH, SERVER_INTERFACE, PONG); exit(1); } c->timer = mrp_add_timer(c->ml, 1000, send_cb, c); if (c->timer == NULL) { mrp_log_error("Failed to create D-BUS sending timer."); exit(1); } }