void init(const M_string& remappings) { M_string::const_iterator it = remappings.find("__hostname"); if (it != remappings.end()) { g_host = it->second; } else { it = remappings.find("__ip"); if (it != remappings.end()) { g_host = it->second; } } it = remappings.find("__tcpros_server_port"); if (it != remappings.end()) { try { g_tcpros_server_port = boost::lexical_cast<uint16_t>(it->second); } catch (boost::bad_lexical_cast&) { throw ros::InvalidPortException("__tcpros_server_port [" + it->second + "] was not specified as a number within the 0-65535 range"); } } if (g_host.empty()) { g_host = determineHost(); } }
void Header::write(const M_string& key_vals, boost::shared_array<uint8_t>& buffer, uint32_t& size) { // Calculate the necessary size size = 0; { M_string::const_iterator it = key_vals.begin(); M_string::const_iterator end = key_vals.end(); for (; it != end; ++it) { const std::string& key = it->first; const std::string& value = it->second; size += key.length(); size += value.length(); size += 1; // = sign size += 4; // 4-byte length } } if (size == 0) { return; } buffer.reset(new uint8_t[size]); char* ptr = (char*)buffer.get(); // Write the data { M_string::const_iterator it = key_vals.begin(); M_string::const_iterator end = key_vals.end(); for (; it != end; ++it) { const std::string& key = it->first; const std::string& value = it->second; uint32_t len = key.length() + value.length() + 1; SROS_SERIALIZE_PRIMITIVE(ptr, len); SROS_SERIALIZE_BUFFER(ptr, key.data(), key.length()); static const char equals = '='; SROS_SERIALIZE_PRIMITIVE(ptr, equals); SROS_SERIALIZE_BUFFER(ptr, value.data(), value.length()); } } ROS_ASSERT(ptr == (char*)buffer.get() + size); }
std::string remap(const std::string& name) { std::string resolved = resolve(name, false); M_string::const_iterator it = g_remappings.find(resolved); if (it != g_remappings.end()) { return it->second; } return name; }
void init(const M_string& remappings) { M_string::const_iterator it = remappings.begin(); M_string::const_iterator end = remappings.end(); for (; it != end; ++it) { const std::string& left = it->first; const std::string& right = it->second; if (!left.empty() && left[0] != '_' && left != this_node::getName()) { std::string resolved_left = resolve(left, false); std::string resolved_right = resolve(right, false); g_remappings[resolved_left] = resolved_right; g_unresolved_remappings[left] = right; } } }
void init(const M_string& remappings) { M_string::const_iterator it = remappings.find("__master"); if (it != remappings.end()) { g_uri = it->second; } if (g_uri.empty()) { char *master_uri_env = NULL; #ifdef _MSC_VER _dupenv_s(&master_uri_env, NULL, "ROS_MASTER_URI"); #else master_uri_env = getenv("ROS_MASTER_URI"); #endif if (!master_uri_env) { ROS_FATAL( "ROS_MASTER_URI is not defined in the environment. Either " \ "type the following or (preferrably) add this to your " \ "~/.bashrc file in order set up your " \ "local machine as a ROS master:\n\n" \ "export ROS_MASTER_URI=http://localhost:11311\n\n" \ "then, type 'roscore' in another shell to actually launch " \ "the master program."); ROS_BREAK(); } g_uri = master_uri_env; #ifdef _MSC_VER // http://msdn.microsoft.com/en-us/library/ms175774(v=vs.80).aspx free(master_uri_env); #endif } // Split URI into if (!network::splitURI(g_uri, g_host, g_port)) { ROS_FATAL( "Couldn't parse the master URI [%s] into a host:port pair.", g_uri.c_str()); ROS_BREAK(); } }
void init(const M_string& remappings) { std::string log_file_name; M_string::const_iterator it = remappings.find("__log"); if (it != remappings.end()) { log_file_name = it->second; } { // Log filename can be specified on the command line through __log // If it's been set, don't create our own name if (log_file_name.empty()) { // Setup the logfile appender // Can't do this in rosconsole because the node name is not known pid_t pid = getpid(); std::string ros_log_env; if ( get_environment_variable(ros_log_env, "ROS_LOG_DIR")) { log_file_name = ros_log_env + std::string("/"); } else { if ( get_environment_variable(ros_log_env, "ROS_HOME")) { log_file_name = ros_log_env + std::string("/log/"); } else { // Not cross-platform? if( get_environment_variable(ros_log_env, "HOME") ) { std::string dotros = ros_log_env + std::string("/.ros/"); fs::create_directory(dotros); log_file_name = dotros + "log/"; fs::create_directory(log_file_name); } } } // sanitize the node name and tack it to the filename for (size_t i = 1; i < this_node::getName().length(); i++) { if (!isalnum(this_node::getName()[i])) { log_file_name += '_'; } else { log_file_name += this_node::getName()[i]; } } char pid_str[100]; snprintf(pid_str, sizeof(pid_str), "%d", pid); log_file_name += std::string("_") + std::string(pid_str) + std::string(".log"); } log_file_name = fs::system_complete(log_file_name).string(); g_log_directory = fs::path(log_file_name).parent_path().string(); } }
void init(const M_string& remappings) { M_string::const_iterator it = remappings.begin(); M_string::const_iterator end = remappings.end(); for (; it != end; ++it) { const std::string& name = it->first; const std::string& param = it->second; if (name.size() < 2) { continue; } if (name[0] == '_' && name[1] != '_') { std::string local_name = "~" + name.substr(1); bool success = false; try { int32_t i = boost::lexical_cast<int32_t>(param); param::set(names::resolve(local_name), i); success = true; } catch (boost::bad_lexical_cast&) { } if (success) { continue; } try { double d = boost::lexical_cast<double>(param); param::set(names::resolve(local_name), d); success = true; } catch (boost::bad_lexical_cast&) { } if (success) { continue; } if (param == "true" || param == "True" || param == "TRUE") { param::set(names::resolve(local_name), true); } else if (param == "false" || param == "False" || param == "FALSE") { param::set(names::resolve(local_name), false); } else { param::set(names::resolve(local_name), param); } } } XMLRPCManager::instance()->bind("paramUpdate", paramUpdateCallback); }