예제 #1
0
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);
}
예제 #2
0
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;
    }
}
예제 #3
0
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);
}
예제 #4
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;
}