Ejemplo n.º 1
0
static void socket_server_on_connection_cb(pa_socket_server*s, pa_iochannel *io, void *userdata) {
    struct userdata *u = userdata;

    pa_assert(s);
    pa_assert(io);
    pa_assert(u);

#if defined(USE_PROTOCOL_SIMPLE)
    pa_simple_protocol_connect(u->simple_protocol, io, u->simple_options);
#elif defined(USE_PROTOCOL_CLI)
    pa_cli_protocol_connect(u->cli_protocol, io, u->module);
#elif defined(USE_PROTOCOL_HTTP)
    pa_http_protocol_connect(u->http_protocol, io, u->module);
#elif defined(USE_PROTOCOL_NATIVE)
    pa_native_protocol_connect(u->native_protocol, io, u->native_options);
#else
    pa_esound_protocol_connect(u->esound_protocol, io, u->esound_options);
#endif
}
int pa__init(pa_module*m) {
    pa_iochannel *io;
    pa_modargs *ma;
    int32_t fd = -1;
    int r = -1;
    pa_native_options *options = NULL;

    pa_assert(m);

    if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
        pa_log("Failed to parse module arguments.");
        goto finish;
    }

    if (pa_modargs_get_value_s32(ma, "fd", &fd) < 0 || fd < 0) {
        pa_log("Invalid file descriptor.");
        goto finish;
    }

    m->userdata = pa_native_protocol_get(m->core);

    io = pa_iochannel_new(m->core->mainloop, fd, fd);

    options = pa_native_options_new();
    options->module = m;
    options->auth_anonymous = true;

    pa_native_protocol_connect(m->userdata, io, options);

    r = 0;

finish:
    if (ma)
        pa_modargs_free(ma);

    if (options)
        pa_native_options_unref(options);

    return r;
}