int main() { char s[5] = "hello"; printf("%d", find_first(s, 'e')); replace_first(s, 5, 'l', 'v'); getchar(); return 0; }
t_log::t_log() { log_disabled = false; log_report_disabled = false; inform_user = false; sema_logview = NULL; thr_logview = NULL; log_filename = DIR_HOME; log_filename += "/"; log_filename += DIR_USER; log_filename += "/"; log_filename += LOG_FILENAME; // If there is a previous log file, then move that to the .old file // before zapping the current log file. (void)move_current_to_old(); log_stream = new ofstream(log_filename.c_str()); if (!*log_stream) { log_disabled = true; string err = TRANSLATE("Failed to create log file %1 ."); err = replace_first(err, "%1", log_filename); err += "\nLogging is now disabled."; if (ui) ui->cb_show_msg(err, MSG_WARNING); return; } string s = PRODUCT_NAME; s += ' '; s += PRODUCT_VERSION; s += ", "; s += PRODUCT_DATE; write_report(s, "t_log::t_log"); string options_built = sys_config->get_options_built(); if (!options_built.empty()) { s = "Built with support for: "; s += options_built; write_report(s, "t_log::t_log"); } }
bool stun_discover_nat(t_phone_user *pu, string &err_msg) { t_user *user_config = pu->get_user_profile(); // By default enable STUN. If for some reason we cannot perform // NAT discovery, then enable STUN. It will not harm, but only // create non-needed STUN transactions if we are not behind a NAT. pu->use_stun = true; pu->use_nat_keepalive = true; list<t_ip_port> destinations = user_config->get_stun_server().get_h_ip_srv("udp"); if (destinations.empty()) { // Cannot resolve STUN server address. log_file->write_header("::main", LOG_NORMAL, LOG_CRITICAL); log_file->write_raw("Failed to resolve: "); log_file->write_raw(user_config->get_stun_server().encode()); log_file->write_endl(); log_file->write_footer(); err_msg = TRANSLATE("Cannot resolve STUN server: %1"); err_msg = replace_first(err_msg, "%1", user_config->get_stun_server().encode()); return false; } while (!destinations.empty()) { StunAddress4 stun_ip4; stun_ip4.addr = destinations.front().ipaddr; stun_ip4.port = destinations.front().port; NatType nat_type = stunNatType(stun_ip4, false); log_file->write_header("::main"); log_file->write_raw("STUN NAT type discovery for "); log_file->write_raw(user_config->get_profile_name()); log_file->write_endl(); log_file->write_raw("NAT type: "); log_file->write_raw(stunNatType2Str(nat_type)); log_file->write_endl(); log_file->write_footer(); switch (nat_type) { case StunTypeOpen: // STUN is not needed. pu->use_stun = false; pu->use_nat_keepalive = false; return true; case StunTypeSymNat: err_msg = TRANSLATE("You are behind a symmetric NAT.\nSTUN will not work.\nConfigure a public IP address in the user profile\nand create the following static bindings (UDP) in your NAT."); err_msg += "\n\n"; err_msg += TRANSLATE("public IP: %1 --> private IP: %2 (SIP signaling)"); err_msg = replace_first(err_msg, "%1", int2str(sys_config->get_sip_port())); err_msg = replace_first(err_msg, "%2", int2str(sys_config->get_sip_port())); err_msg += "\n"; err_msg += TRANSLATE("public IP: %1-%2 --> private IP: %3-%4 (RTP/RTCP)"); err_msg = replace_first(err_msg, "%1", int2str(sys_config->get_rtp_port())); err_msg = replace_first(err_msg, "%2", int2str(sys_config->get_rtp_port() + 5)); err_msg = replace_first(err_msg, "%3", int2str(sys_config->get_rtp_port())); err_msg = replace_first(err_msg, "%4", int2str(sys_config->get_rtp_port() + 5)); pu->use_stun = false; pu->use_nat_keepalive = false; return false; case StunTypeSymFirewall: // STUN is not needed as we are on a pubic IP. // NAT keep alive is needed however to keep the firewall open. pu->use_stun = false; return true; case StunTypeBlocked: destinations.pop_front(); // The code for NAT type discovery does not handle // ICMP errors. So if the conclusion is that the network // connection is blocked, it might be due to a down STUN // server. Try alternative destination if avaliable. if (destinations.empty()) { err_msg = TRANSLATE("Cannot reach the STUN server: %1"); err_msg = replace_first(err_msg, "%1", user_config->get_stun_server().encode()); err_msg += "\n\n"; err_msg += TRANSLATE("If you are behind a firewall then you need to open the following UDP ports."); err_msg += "\n"; err_msg += TRANSLATE("Port %1 (SIP signaling)"); err_msg = replace_first(err_msg, "%1", int2str(sys_config->get_sip_port())); err_msg += "\n"; err_msg += TRANSLATE("Ports %1-%2 (RTP/RTCP)"); err_msg = replace_first(err_msg, "%1", int2str(sys_config->get_rtp_port())); err_msg = replace_first(err_msg, "%2", int2str(sys_config->get_rtp_port() + 5)); return false; } log_file->write_report("Failover to next destination.", "::stun_discover_nat"); break; case StunTypeFailure: destinations.pop_front(); log_file->write_report("Failover to next destination.", "::stun_discover_nat"); break; default: // Use STUN. return true; } } err_msg = TRANSLATE("NAT type discovery via STUN failed."); return false; }
} //SUBSET MAPPINGS else if( dynamic_cast<subset_mapping_t*>(state_mappings.back()) != 0 ) { //fancy magic for performing a mapping of a subset state_mappings.back()->preimage_space = space; state_mappings.back()->init_spaces(); planning_spaces.push_back(state_mappings.back()->image_space); subset_state_mappings.push_back(state_mappings.back()); //control mapping setup mapping_function_t* control_mapping; pluginlib::ClassLoader<mapping_function_t>& loader = mapping_function_t::get_loader(); std::string control_mapping_name = replace_first(state_mappings.back()->mapping_name,"state","control"); control_mapping = loader.createUnmanagedInstance("prx_utilities/" + control_mapping_name); control_mapping->preimage_space = const_cast<space_t*>(system_pointer.get()->get_control_space()); control_mapping->init_spaces(); planning_controls.push_back(control_mapping->image_space); subset_control_mappings.push_back(control_mapping); } else { nontrivial_embedding = true; state_mappings.back()->preimage_interval = full_state_space->get_subspace(space); init_reader->initialize((state_mappings.back()), init_path); if( control_interval.first != control_interval.second )