Skip to content

Commit

Permalink
Add missing CATKIN_DEPEND to pluginlib; code refactoring; fix compile…
Browse files Browse the repository at this point in the history
…r warnings.
  • Loading branch information
jwon02 committed Nov 6, 2017
1 parent a2c0545 commit dffec15
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 81 deletions.
13 changes: 6 additions & 7 deletions tools/rosbag/CMakeLists.txt
Expand Up @@ -50,13 +50,12 @@ install(TARGETS rosbag
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
if(WIN32)
install(TARGETS record play
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
else()
install(TARGETS record play encrypt
install(TARGETS record play
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
if(NOT WIN32)
install(TARGETS encrypt
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
Expand Down
85 changes: 47 additions & 38 deletions tools/rosbag/src/encrypt.cpp
Expand Up @@ -60,22 +60,21 @@ struct EncryptorOptions
std::string outbag;
};

void EncryptorOptions::buildOutbagName() {
if (!outbag.empty()) {
void EncryptorOptions::buildOutbagName()
{
if (!outbag.empty())
return;
}
if (inbag.empty()) {
if (inbag.empty())
throw ros::Exception("Input bag is not specified.");
}
std::string::size_type pos = inbag.find_last_of('.');
if (pos == std::string::npos) {
if (pos == std::string::npos)
throw ros::Exception("Input bag name has no extension.");
}
outbag = inbag.substr(0, pos) + std::string(".out") + inbag.substr(pos);
}

//! Parse the command-line arguments for encrypt options
EncryptorOptions parseOptions(int argc, char** argv) {
EncryptorOptions parseOptions(int argc, char** argv)
{
EncryptorOptions opts;

po::options_description desc("Allowed options");
Expand All @@ -84,11 +83,11 @@ EncryptorOptions parseOptions(int argc, char** argv) {
("help,h", "produce help message")
("quiet,q", "suppress console output")
("plugin,p", po::value<std::string>()->default_value("rosbag/AesCbcEncryptor"), "encryptor name")
("param,r", po::value<std::string>()->default_value("*"), "encryptor parameter")
("param,r", po::value<std::string>()->default_value("*"), "encryptor parameter")
("bz2,j", "use BZ2 compression")
("lz4", "use lz4 compression")
("inbag", po::value<std::string>(), "bag file to encrypt")
("outbag,o", po::value<std::string>(), "bag file encrypted")
("inbag", po::value<std::string>(), "bag file to encrypt")
("outbag,o", po::value<std::string>(), "bag file encrypted")
;

po::positional_options_description p;
Expand All @@ -98,54 +97,59 @@ EncryptorOptions parseOptions(int argc, char** argv) {

try
{
po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
} catch (boost::program_options::invalid_command_line_syntax& e)
po::store(po::command_line_parser(argc, argv).options(desc).positional(p).run(), vm);
}
catch (boost::program_options::invalid_command_line_syntax& e)
{
throw ros::Exception(e.what());
} catch (boost::program_options::unknown_option& e)
throw ros::Exception(e.what());
}
catch (boost::program_options::unknown_option& e)
{
throw ros::Exception(e.what());
throw ros::Exception(e.what());
}

if (vm.count("help")) {
std::cout << desc << std::endl;
exit(0);
if (vm.count("help"))
{
std::cout << desc << std::endl;
exit(0);
}

if (vm.count("quiet"))
opts.quiet = true;
opts.quiet = true;
if (vm.count("plugin"))
opts.plugin = vm["plugin"].as<std::string>();
opts.plugin = vm["plugin"].as<std::string>();
if (vm.count("param"))
opts.param = vm["param"].as<std::string>();
opts.param = vm["param"].as<std::string>();
if (vm.count("bz2"))
opts.compression = rosbag::compression::BZ2;
opts.compression = rosbag::compression::BZ2;
if (vm.count("lz4"))
opts.compression = rosbag::compression::LZ4;
opts.compression = rosbag::compression::LZ4;
if (vm.count("inbag"))
{
opts.inbag = vm["inbag"].as<std::string>();
} else {
opts.inbag = vm["inbag"].as<std::string>();
else
throw ros::Exception("You must specify bag to encrypt.");
}
if (vm.count("outbag"))
opts.outbag = vm["outbag"].as<std::string>();
opts.outbag = vm["outbag"].as<std::string>();
opts.buildOutbagName();

return opts;
}

std::string getStringCompressionType(rosbag::CompressionType compression) {
switch(compression) {
std::string getStringCompressionType(rosbag::CompressionType compression)
{
switch(compression)
{
case rosbag::compression::Uncompressed: return "none";
case rosbag::compression::BZ2: return "bz2";
case rosbag::compression::LZ4: return "lz4";
default: return "Unknown";
}
}

int encrypt(EncryptorOptions const& options) {
if (!options.quiet) {
int encrypt(EncryptorOptions const& options)
{
if (!options.quiet)
{
std::cout << "Output bag: " << options.outbag << "\n";
std::cout << "Encryption: " << options.plugin << ":" << options.param << "\n";
std::cout << "Compression: " << getStringCompressionType(options.compression) << "\n";
Expand All @@ -160,7 +164,8 @@ int encrypt(EncryptorOptions const& options) {
boost::scoped_ptr<boost::progress_display> progress;
if (!options.quiet)
progress.reset(new boost::progress_display(view.size(), std::cout, "Progress:\n ", " ", " "));
for (rosbag::View::const_iterator it = view.begin(); it != view.end(); ++it) {
for (rosbag::View::const_iterator it = view.begin(); it != view.end(); ++it)
{
outbag.write(it->getTopic(), it->getTime(), *it, it->getConnectionHeader());
if (progress)
++(*progress);
Expand All @@ -170,17 +175,21 @@ int encrypt(EncryptorOptions const& options) {
return 0;
}

int main(int argc, char** argv) {
int main(int argc, char** argv)
{
// Parse the command-line options
EncryptorOptions opts;
try {
try
{
opts = parseOptions(argc, argv);
}
catch (ros::Exception const& ex) {
catch (ros::Exception const& ex)
{
ROS_ERROR("Error reading options: %s", ex.what());
return 1;
}
catch(boost::regex_error const& ex) {
catch(boost::regex_error const& ex)
{
ROS_ERROR("Error reading options: %s\n", ex.what());
return 1;
}
Expand Down
57 changes: 22 additions & 35 deletions tools/rosbag_storage/CMakeLists.txt
Expand Up @@ -14,7 +14,7 @@ find_package(BZip2 REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES rosbag_storage
CATKIN_DEPENDS roslz4
CATKIN_DEPENDS pluginlib roslz4
DEPENDS console_bridge Boost
)

Expand All @@ -24,41 +24,28 @@ add_definitions(-D_FILE_OFFSET_BITS=64)
include_directories(include ${catkin_INCLUDE_DIRS} ${console_bridge_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${BZIP2_INCLUDE_DIR})
add_definitions(${BZIP2_DEFINITIONS})

if(WIN32)
add_library(rosbag_storage
src/bag.cpp
src/bag_player.cpp
src/buffer.cpp
src/bz2_stream.cpp
src/lz4_stream.cpp
src/chunked_file.cpp
src/encryptor.cpp
src/message_instance.cpp
src/query.cpp
src/stream.cpp
src/view.cpp
src/uncompressed_stream.cpp
)
target_link_libraries(rosbag_storage ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${BZIP2_LIBRARIES} ${console_bridge_LIBRARIES})
else()
add_library(rosbag_storage
src/aes_encryptor.cpp
src/bag.cpp
src/bag_player.cpp
src/buffer.cpp
src/bz2_stream.cpp
src/lz4_stream.cpp
src/chunked_file.cpp
src/encryptor.cpp
src/message_instance.cpp
src/query.cpp
src/stream.cpp
src/view.cpp
src/uncompressed_stream.cpp
)
target_link_libraries(rosbag_storage ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${BZIP2_LIBRARIES} ${console_bridge_LIBRARIES} crypto gpgme)
if(NOT WIN32)
set(AES_ENCRYPT_SOURCE "src/aes_encryptor.cpp")
set(AES_ENCRYPT_LIBRARIES "crypto" "gpgme")
endif()

add_library(rosbag_storage
${AES_ENCRYPT_SOURCE}
src/bag.cpp
src/bag_player.cpp
src/buffer.cpp
src/bz2_stream.cpp
src/lz4_stream.cpp
src/chunked_file.cpp
src/encryptor.cpp
src/message_instance.cpp
src/query.cpp
src/stream.cpp
src/view.cpp
src/uncompressed_stream.cpp
)
target_link_libraries(rosbag_storage ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${BZIP2_LIBRARIES} ${console_bridge_LIBRARIES} ${AES_ENCRYPT_LIBRARIES})

install(TARGETS rosbag_storage
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
Expand All @@ -80,6 +67,6 @@ if(NOT WIN32)

catkin_add_gtest(test_aes_encryptor test/test_aes_encryptor.cpp
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/test)
target_link_libraries(test_aes_encryptor rosbag_storage ${catkin_LIBRARIES} ${Boost_LIBRARIES} crypto gpgme)
target_link_libraries(test_aes_encryptor rosbag_storage ${catkin_LIBRARIES} ${Boost_LIBRARIES})
endif()
endif()
4 changes: 3 additions & 1 deletion tools/rosbag_storage/test/test_aes_encryptor.cpp
Expand Up @@ -130,7 +130,9 @@ TEST(AesCbcEncryptor, EncryptAndDecryptBag) {
}

// Write a message to an encrypted bag file
std::string bag_file_name = std::string(tmpnam(0));
char temp_dir_templ[] = "/tmp/bagXXXXXX";
char *temp_dir = mkdtemp(temp_dir_templ);
std::string bag_file_name = std::string(temp_dir) + "/foo.bag";
rosbag::Bag bag(bag_file_name, rosbag::bagmode::Write);
bag.setEncryptorPlugin("rosbag/AesCbcEncryptor", GPG_KEY_USER);
std_msgs::String msg;
Expand Down

0 comments on commit dffec15

Please sign in to comment.