コード例 #1
0
ファイル: sdp.c プロジェクト: DryakhlyyZlodey/pulseaudio
char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, uint16_t port, uint8_t payload, const pa_sample_spec *ss) {
    uint32_t ntp;
    char buf_src[64], buf_dst[64], un[64];
    const char *u, *f;

    pa_assert(src);
    pa_assert(dst);

#ifdef HAVE_IPV6
    pa_assert(af == AF_INET || af == AF_INET6);
#else
    pa_assert(af == AF_INET);
#endif

    pa_assert_se(f = pa_rtp_format_to_string(ss->format));

    if (!(u = pa_get_user_name(un, sizeof(un))))
        u = "-";

    ntp = (uint32_t) time(NULL) + 2208988800U;

    pa_assert_se(inet_ntop(af, src, buf_src, sizeof(buf_src)));
    pa_assert_se(inet_ntop(af, dst, buf_dst, sizeof(buf_dst)));

    return pa_sprintf_malloc(
            PA_SDP_HEADER
            "o=%s %lu 0 IN %s %s\n"
            "s=%s\n"
            "c=IN %s %s\n"
            "t=%lu 0\n"
            "a=recvonly\n"
            "m=audio %u RTP/AVP %i\n"
            "a=rtpmap:%i %s/%u/%u\n"
            "a=type:broadcast\n",
            u, (unsigned long) ntp, af == AF_INET ? "IP4" : "IP6", buf_src,
            name,
            af == AF_INET ? "IP4" : "IP6", buf_dst,
            (unsigned long) ntp,
            port, payload,
            payload, f, ss->rate, ss->channels);
}
コード例 #2
0
ファイル: context.c プロジェクト: felfert/pulseaudio
static char *get_old_legacy_runtime_dir(void) {
    char *p, u[128];
    struct stat st;

    if (!pa_get_user_name(u, sizeof(u)))
        return NULL;

    p = pa_sprintf_malloc("/tmp/pulse-%s", u);

    if (stat(p, &st) < 0) {
        pa_xfree(p);
        return NULL;
    }

#ifdef HAVE_GETUID
    if (st.st_uid != getuid()) {
        pa_xfree(p);
        return NULL;
    }
#endif

    return p;
}
コード例 #3
0
int pa__init(pa_module*m) {

    pa_modargs *ma = NULL;
    char t[256], *vendor, *client_id;
    SmcCallbacks callbacks;
    SmProp prop_program, prop_user;
    SmProp *prop_list[2];
    SmPropValue val_program, val_user;
    struct userdata *u;
    const char *e;
    pa_client_new_data data;

    pa_assert(m);

    if (ice_in_use) {
        pa_log("module-x11-xsmp may no be loaded twice.");
        return -1;
    }

    IceAddConnectionWatch(new_ice_connection, m->core);
    ice_in_use = TRUE;

    m->userdata = u = pa_xnew(struct userdata, 1);
    u->core = m->core;
    u->module = m;
    u->client = NULL;
    u->connection = NULL;
    u->x11 = NULL;

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

    if (!(u->x11 = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
        goto fail;

    e = pa_modargs_get_value(ma, "session_manager", NULL);

    if (!e && !getenv("SESSION_MANAGER")) {
        pa_log("X11 session manager not running.");
        goto fail;
    }

    memset(&callbacks, 0, sizeof(callbacks));
    callbacks.die.callback = die_cb;
    callbacks.die.client_data = u;
    callbacks.save_yourself.callback = save_yourself_cb;
    callbacks.save_yourself.client_data = m->core;
    callbacks.save_complete.callback = save_complete_cb;
    callbacks.save_complete.client_data = m->core;
    callbacks.shutdown_cancelled.callback = shutdown_cancelled_cb;
    callbacks.shutdown_cancelled.client_data = m->core;

    if (!(u->connection = SmcOpenConnection(
                              (char*) e, m->core,
                              SmProtoMajor, SmProtoMinor,
                              SmcSaveYourselfProcMask | SmcDieProcMask | SmcSaveCompleteProcMask | SmcShutdownCancelledProcMask,
                              &callbacks, NULL, &client_id,
                              sizeof(t), t))) {

        pa_log("Failed to open connection to session manager: %s", t);
        goto fail;
    }

    prop_program.name = (char*) SmProgram;
    prop_program.type = (char*) SmARRAY8;
    val_program.value = (char*) PACKAGE_NAME;
    val_program.length = (int) strlen(val_program.value);
    prop_program.num_vals = 1;
    prop_program.vals = &val_program;
    prop_list[0] = &prop_program;

    prop_user.name = (char*) SmUserID;
    prop_user.type = (char*) SmARRAY8;
    pa_get_user_name(t, sizeof(t));
    val_user.value = t;
    val_user.length = (int) strlen(val_user.value);
    prop_user.num_vals = 1;
    prop_user.vals = &val_user;
    prop_list[1] = &prop_user;

    SmcSetProperties(u->connection, PA_ELEMENTSOF(prop_list), prop_list);

    pa_log_info("Connected to session manager '%s' as '%s'.", vendor = SmcVendor(u->connection), client_id);

    pa_client_new_data_init(&data);
    data.module = m;
    data.driver = __FILE__;
    pa_proplist_setf(data.proplist, PA_PROP_APPLICATION_NAME, "XSMP Session on %s as %s", vendor, client_id);
    pa_proplist_sets(data.proplist, "xsmp.vendor", vendor);
    pa_proplist_sets(data.proplist, "xsmp.client.id", client_id);
    u->client = pa_client_new(u->core, &data);
    pa_client_new_data_done(&data);

    free(vendor);
    free(client_id);

    if (!u->client)
        goto fail;

    pa_modargs_free(ma);

    return 0;

fail:
    if (ma)
        pa_modargs_free(ma);

    pa__done(m);

    return -1;
}