void settings_load_late(session_t *sp) { /* FIXME: This needs to be updated for the transcoder */ uint32_t my_ssrc; struct utsname u; char hostfmt[] = "RAT v" RAT_VERSION " %s %s (%s)"; char *field, username[32] = ""; load_init(); /* Initial settings come from the common prefs file... */ /* * We check to see it SDES items are set first. If they are * then presumeably it has come from the command line and * so it should override saved settings. */ my_ssrc = rtp_my_ssrc(sp->rtp_session[0]); if (settings_username(username, sizeof(username) - 1) == FALSE) { sprintf(username, "Unknown"); } field = setting_load_str("rtpName", username); if (rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NAME) == NULL) { debug_msg("username %s %s\n", field, username); rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NAME, field, strlen(field)); } field = setting_load_str("rtpEmail", ""); if (rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_EMAIL) == NULL) { rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_EMAIL, field, strlen(field)); } field = setting_load_str("rtpPhone", ""); if (rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_PHONE) == NULL) { rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_PHONE, field, strlen(field)); } field = setting_load_str("rtpLoc", ""); if (rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_LOC) == NULL) { rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_LOC, field, strlen(field)); } field = setting_load_str("rtpNote", ""); if (rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NOTE) == NULL) { rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NOTE, field, strlen(field)); } field = (char*)xmalloc(3 * 256 + sizeof(hostfmt)); uname(&u); sprintf(field, hostfmt, u.sysname, u.release, u.machine); rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_TOOL, field, strlen(field)); xfree(field); /* This is evil [csp] */ field = xstrdup(" rattest"); field[0] = 3; rtp_set_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_PRIV, field, strlen(field)); xfree(field); init_part_two(); /* Switch to pulling settings from the RAT specific prefs file... */ load_done(); }
static void sdes_print (struct rtp *session, uint32_t ssrc, rtcp_sdes_type stype) { const char *sdes_type_names[] = { "end", "cname", "name", "email", "telephone", "location", "tool", "note", "priv" }; const uint8_t n = sizeof (sdes_type_names) / sizeof (sdes_type_names[0]); if (stype > n) { /* Theoretically impossible */ fprintf (stderr, "boo! invalud sdes field %d\n", stype); return; } fprintf (stderr, "SSRC 0x%08x reported SDES type %s - ", ssrc, sdes_type_names[stype]); if (stype == RTCP_SDES_PRIV) { /* Requires extra-handling, not important for example */ fprintf (stderr, "don't know how to display.\n"); } else { fprintf (stderr, "%s\n", rtp_get_sdes (session, ssrc, stype)); } }
static void process_sdes(session_t *sp, uint32_t ssrc, rtcp_sdes_item *d) { pdb_entry_t *e; if (pdb_item_get(sp->pdb, ssrc, &e) == FALSE) { debug_msg("process_sdes: unknown source (0x%08x).\n", ssrc); return; } if (sp->mbus_engine == NULL) { /* Nowhere to send updates to, so ignore them. */ return; } switch(d->type) { case RTCP_SDES_END: /* This is the end of the SDES list of a packet. Nothing */ /* for us to deal with. */ break; case RTCP_SDES_CNAME: if (log_fp != 0) { struct timeval tv; gettimeofday(&tv, 0); fprintf(log_fp, "%d.%06d %d cname %x %s\n", (int) tv.tv_sec, (int) tv.tv_usec, (int) rtp_get_ssrc_count(sp->rtp_session[0]), (int) ssrc, rtp_get_sdes(sp->rtp_session[0], ssrc, RTCP_SDES_CNAME)); fflush(log_fp); } ui_send_rtp_cname(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_NAME: ui_send_rtp_name(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_EMAIL: ui_send_rtp_email(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_PHONE: ui_send_rtp_phone(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_LOC: ui_send_rtp_loc(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_TOOL: ui_send_rtp_tool(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_NOTE: ui_send_rtp_note(sp, sp->mbus_ui_addr, ssrc); break; case RTCP_SDES_PRIV: ui_send_rtp_priv(sp, sp->mbus_ui_addr, ssrc); break; default: debug_msg("Ignoring SDES type (0x%02x) from (0x%08x).\n", ssrc); } }
void settings_save(session_t *sp) { /* FIXME: This needs to be updated for the transcoder */ const codec_format_t *pri_cf; const audio_port_details_t *iapd = NULL; const audio_port_details_t *oapd = NULL; const audio_format *af = NULL; const repair_details_t *repair = NULL; const converter_details_t *converter = NULL; const audio_device_details_t *add = NULL; const cc_details_t *ccd = NULL; codec_id_t pri_id; int cc_len; char *cc_param; int i; uint16_t j,n; uint32_t my_ssrc; pri_id = codec_get_by_payload(sp->encodings[0]); pri_cf = codec_get_format(pri_id); cc_len = 3 * (CODEC_LONG_NAME_LEN + 4) + 1; cc_param = (char*) xmalloc(cc_len); channel_encoder_get_parameters(sp->channel_coder, cc_param, cc_len); ccd = channel_get_coder_identity(sp->channel_coder); n = (uint16_t)converter_get_count(); for (j = 0; j < n; j++) { converter = converter_get_details(j); if (sp->converter == converter->id) { break; } } n = repair_get_count(); for (j = 0; j < n; j++) { repair = repair_get_details(j); if (sp->repair == repair->id) { break; } } n = (int)audio_get_device_count(); for (i = 0; i < n; i++) { add = audio_get_device_details(i); if (sp->audio_device == add->descriptor) { break; } } af = audio_get_ifmt(sp->audio_device); for(i = 0; i < audio_get_iport_count(sp->audio_device); i++) { iapd = audio_get_iport_details(sp->audio_device, i); if (iapd->port == audio_get_iport(sp->audio_device)) { break; } } for(i = 0; i < audio_get_oport_count(sp->audio_device); i++) { oapd = audio_get_oport_details(sp->audio_device, i); if (oapd->port == audio_get_oport(sp->audio_device)) { break; } } save_init_rtp(); my_ssrc = rtp_my_ssrc(sp->rtp_session[0]); setting_save_str("rtpName", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NAME)); setting_save_str("rtpEmail", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_EMAIL)); setting_save_str("rtpPhone", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_PHONE)); setting_save_str("rtpLoc", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_LOC)); setting_save_str("rtpNote", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_NOTE)); save_done_rtp(); save_init_rat(); setting_save_str("audioTool", rtp_get_sdes(sp->rtp_session[0], my_ssrc, RTCP_SDES_TOOL)); setting_save_str("audioDevice", add->name); setting_save_int("audioFrequency", af->sample_rate); setting_save_int("audioChannelsIn", af->channels); /* If we save a dynamically mapped codec we crash when we reload on startup */ if (pri_cf->default_pt != CODEC_PAYLOAD_DYNAMIC) { setting_save_str("audioPrimary", pri_cf->short_name); } setting_save_int("audioUnits", channel_encoder_get_units_per_packet(sp->channel_coder)); /* Don't save the layered channel coder - you need to start it */ /* from the command line anyway */ if (strcmp(ccd->name, "Layering") == 0) { setting_save_str("audioChannelCoding", "Vanilla"); } else { setting_save_str("audioChannelCoding", ccd->name); } setting_save_str("audioChannelParameters", cc_param); setting_save_str("audioRepair", repair->name); setting_save_str("audioAutoConvert", converter->name); setting_save_int("audioLimitPlayout", sp->limit_playout); setting_save_int("audioMinPlayout", sp->min_playout); setting_save_int("audioMaxPlayout", sp->max_playout); setting_save_int("audioLecture", sp->lecture); setting_save_int("audio3dRendering", sp->render_3d); setting_save_int("audioAGC", sp->agc_on); setting_save_int("audioLoopback", sp->loopback_gain); setting_save_int("audioEchoSuppress", sp->echo_suppress); setting_save_int("audioOutputGain", audio_get_ogain(sp->audio_device)); setting_save_int("audioInputGain", audio_get_igain(sp->audio_device)); setting_save_str("audioOutputPort", oapd->name); setting_save_str("audioInputPort", iapd->name); setting_save_int("audioPowermeters", sp->meter); setting_save_str("audioSilence", sd_name(sp->silence_detection)); setting_save_int("audioSilenceManualThresh", sp->manual_sd_thresh); /* We do not save audioOutputMute and audioInputMute by default, but should */ /* recognize them when reloading. */ save_done_rat(); xfree(cc_param); }