コード例 #1
0
ファイル: dbus-test.c プロジェクト: sanyaade-mobiledev/murphy
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);
}
コード例 #2
0
ファイル: dbus-client.c プロジェクト: 01org/winthorpe
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;
}
コード例 #3
0
ファイル: dbusif.c プロジェクト: 01org/winthorpe
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;
}
コード例 #4
0
ファイル: dbus-test.c プロジェクト: sanyaade-mobiledev/murphy
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);
    }
}