static int command_notify(srs_client_t *c, int idx, int ntoken, char **tokens, uint32_t *start, uint32_t *end, srs_audiobuf_t *audio) { dbusif_t *bus = (dbusif_t *)c->user_data; const char *dest = c->id; const char *path = SRS_CLIENT_PATH; const char *iface = SRS_CLIENT_INTERFACE; const char *sig = SRS_CLIENT_NOTIFY_COMMAND; char buf[1024], *cmd, *p, *t; int i, n, l; MRP_UNUSED(idx); MRP_UNUSED(start); MRP_UNUSED(end); MRP_UNUSED(audio); p = cmd = buf; l = sizeof(buf) - 1; t = ""; for (i = 0; i < ntoken; i++) { n = snprintf(p, l, "%s%s", t, tokens[i]); if (n >= l) return FALSE; p += n; l -= n; t = " "; } return mrp_dbus_signal(bus->dbus, dest, path, iface, sig, MRP_DBUS_TYPE_STRING, cmd, MRP_DBUS_TYPE_INVALID); }
static int voice_notify(srs_client_t *c, srs_voice_event_t *event) { dbusif_t *bus = (dbusif_t *)c->user_data; const char *dest = c->id; const char *path = SRS_CLIENT_PATH; const char *iface = SRS_CLIENT_INTERFACE; const char *sig = SRS_CLIENT_NOTIFY_VOICE; const char *type; double pcnt; uint32_t msec; switch (event->type) { case SRS_VOICE_EVENT_STARTED: type = "started" ; goto send; case SRS_VOICE_EVENT_COMPLETED: type = "completed"; goto send; case SRS_VOICE_EVENT_TIMEOUT: type = "timeout" ; goto send; case SRS_VOICE_EVENT_ABORTED: type = "aborted" ; goto send; send: return mrp_dbus_signal(bus->dbus, dest, path, iface, sig, MRP_DBUS_TYPE_UINT32, &event->id, MRP_DBUS_TYPE_STRING, type, MRP_DBUS_TYPE_INVALID); case SRS_VOICE_EVENT_PROGRESS: type = "progress"; pcnt = event->data.progress.pcnt; msec = event->data.progress.msec; return mrp_dbus_signal(bus->dbus, dest, path, iface, sig, MRP_DBUS_TYPE_UINT32, &event->id, MRP_DBUS_TYPE_STRING, type, MRP_DBUS_TYPE_DOUBLE, &pcnt, MRP_DBUS_TYPE_UINT32, &msec, MRP_DBUS_TYPE_INVALID); default: return TRUE; } }
static int focus_notify(srs_client_t *c, srs_voice_focus_t focus) { dbusif_t *bus = (dbusif_t *)c->user_data; const char *dest = c->id; const char *path = SRS_CLIENT_PATH; const char *iface = SRS_CLIENT_INTERFACE; const char *sig = SRS_CLIENT_NOTIFY_FOCUS; const char *state; switch (focus) { case SRS_VOICE_FOCUS_NONE: state = "none"; break; case SRS_VOICE_FOCUS_SHARED: state = "shared"; break; case SRS_VOICE_FOCUS_EXCLUSIVE: state = "exclusive"; break; default: return FALSE; } return mrp_dbus_signal(bus->dbus, dest, path, iface, sig, MRP_DBUS_TYPE_STRING, state, 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; }