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