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); } }
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); }
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; }
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); }