Beispiel #1
0
static void simple_reply(mrp_dbus_t *dbus, mrp_dbus_msg_t *req, int errcode,
                         const char *errmsg)
{
    int32_t error;

    if (!errcode)
        mrp_dbus_reply(dbus, req, MRP_DBUS_TYPE_INVALID);
    else {
        error = errcode;
        mrp_dbus_reply_error(dbus, req, MRP_DBUS_ERROR_FAILED, errmsg,
                             MRP_DBUS_TYPE_INT32, &error,
                             MRP_DBUS_TYPE_INVALID);
    }
}
Beispiel #2
0
static void reply_voice_query(mrp_dbus_t *dbus, mrp_dbus_msg_t *req, int nactor,
                              srs_voice_actor_t *actors)
{
    srs_voice_actor_t *a;
    char              *voices[nactor], **v;
    char              *lang[nactor], **ml;
    char              *dialect[nactor], **sl;
    char              *gender[nactor], **g;
    char              *description[nactor], **d;
    uint32_t           n;
    int                i;

    a  = actors;
    v  = voices;
    ml = lang;
    sl = dialect;
    g  = gender;
    d  = description;
    for (i = 0; i < nactor; i++, a++, v++, ml++, sl++, g++, d++) {
        *v  = a->name;
        *ml = a->lang;
        *sl = a->dialect ? a->dialect : "";
        *g  = a->gender == SRS_VOICE_GENDER_MALE ? "male" : "female";

        /*
         * XXX TODO: this is a hack is currently needed for festival
         * which can feed us voice descriptions that are not UTF-8
         * (and consequently not 7-bit ASCII either).
         */
        *d  = clear_non_us_ascii(a->description);

        printf("* description: %s\n", *d);
    }

    n = nactor;
    v  = voices;
    ml = lang;
    sl = dialect;
    g  = gender;
    d  = description;
    mrp_dbus_reply(dbus, req,
                   MRP_DBUS_TYPE_UINT32, &n,
                   MRP_DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &v , n,
                   MRP_DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &ml, n,
                   MRP_DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &sl, n,
                   MRP_DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &g , n,
                   MRP_DBUS_TYPE_ARRAY, DBUS_TYPE_STRING, &d , n,
                   MRP_DBUS_TYPE_INVALID);
}
Beispiel #3
0
static int ping_handler(mrp_dbus_t *dbus, DBusMessage *msg, void *user_data)
{
    context_t  *c = (context_t *)user_data;
    uint32_t    seq;
    const char *dest;

    MRP_UNUSED(c);

    if (dbus_message_get_type(msg) == DBUS_MESSAGE_TYPE_METHOD_CALL &&
        dbus_message_get_args(msg, NULL,
                              DBUS_TYPE_UINT32, &seq,
                              DBUS_TYPE_INVALID))
        mrp_log_info("-> ping request #%u", seq);
    else
        mrp_log_error("-> malformed ping request");

    if (!mrp_dbus_reply(dbus, msg,
                        DBUS_TYPE_UINT32, &seq,
                        DBUS_TYPE_INVALID))
        mrp_log_error("Failed to send ping reply #%u.", seq);
    else
        mrp_log_info("<- ping reply #%u", seq);

    if (seq & 0x1)
        dest = dbus_message_get_sender(msg);
    else
        dest = NULL;

    if (!mrp_dbus_signal(dbus, dest, SERVER_PATH, SERVER_INTERFACE, PONG,
                         DBUS_TYPE_UINT32, &seq,
                         DBUS_TYPE_INVALID))
        mrp_log_error("Failed to send pong signal #%u.", seq);
    else
        mrp_log_info("<- pong %s #%u", dest ? "signal" : "broadcast", seq);

    return TRUE;
}
Beispiel #4
0
static void reply_render(mrp_dbus_t *dbus, mrp_dbus_msg_t *req, uint32_t id)
{
    mrp_dbus_reply(dbus, req, MRP_DBUS_TYPE_UINT32, &id,
                   MRP_DBUS_TYPE_INVALID);
}