Skip to content
Snippets Groups Projects
Commit c03c4b57 authored by Amna Snene's avatar Amna Snene Committed by Louis Maillard
Browse files

tools: use Log instead of fmt::print

Since fmt::print does not flush the buffer, I added a Log macro to
ensure the output is immediately flushed.
Not needed for print on stderr as std lib already flush it.

Change-Id: Ieb7c04f9f191f1982643b005fae2d4e944a3a1fa
parent 2ee14f02
No related branches found
No related tags found
No related merge requests found
......@@ -96,7 +96,7 @@ runBench(std::shared_ptr<asio::io_context> ioContext,
auto boostrap_node = std::make_shared<dht::DhtRunner>();
boostrap_node->run(36432);
fmt::print("Generating identities…\n");
Log("Generating identities…\n");
auto server = setupHandler("server", ioContext, ioContextRunner, factory, logger);
auto client = setupHandler("client", ioContext, ioContextRunner, factory, logger);
......@@ -110,13 +110,13 @@ runBench(std::shared_ptr<asio::io_context> ioContext,
});
server->connectionManager->onConnectionReady([&](const DeviceId& device, const std::string& name, std::shared_ptr<ChannelSocket> socket) {
if (socket) {
fmt::print("Server: Connection succeeded\n");
Log("Server: Connection succeeded\n");
socket->setOnRecv([s=socket.get()](const uint8_t* data, size_t size) {
std::error_code ec;
return s->write(data, size, ec);
});
} else {
fmt::print("Server: Connection failed\n");
Log("Server: Connection failed\n");
}
});
......@@ -129,7 +129,7 @@ runBench(std::shared_ptr<asio::io_context> ioContext,
time_point start_connect, start_send;
std::this_thread::sleep_for(3s);
fmt::print("Connecting…\n");
Log("Connecting…\n");
start_connect = clock::now();
client->connectionManager->connectDevice(server->id.second, "channelName", [&](std::shared_ptr<ChannelSocket> socket, const DeviceId&) {
if (socket) {
......@@ -138,20 +138,20 @@ runBench(std::shared_ptr<asio::io_context> ioContext,
if (rx == TX_GOAL) {
auto end = clock::now();
ret.send = end - start_send;
fmt::print("Streamed {} bytes back and forth in {} ({} kBps)\n", rx, dht::print_duration(ret.send), (unsigned)(rx / (1000 * std::chrono::duration<double>(ret.send).count())));
Log("Streamed {} bytes back and forth in {} ({} kBps)\n", rx, dht::print_duration(ret.send), (unsigned)(rx / (1000 * std::chrono::duration<double>(ret.send).count())));
cv.notify_one();
}
return size;
});
ret.connection = clock::now() - start_connect;
fmt::print("Connected in {}\n", dht::print_duration(ret.connection));
Log("Connected in {}\n", dht::print_duration(ret.connection));
std::vector<uint8_t> data(TX_SIZE, (uint8_t)'y');
std::error_code ec;
start_send = clock::now();
for (unsigned i = 0; i < TX_NUM; ++i) {
socket->write(data.data(), data.size(), ec);
if (ec)
fmt::print("error: {}\n", ec.message());
fmt::print(stderr, "error: {}\n", ec.message());
}
} else {
completed = true;
......@@ -183,7 +183,7 @@ bench()
unsigned total_success = 0;
constexpr unsigned ITERATIONS = 20;
for (unsigned i = 0; i < ITERATIONS; ++i) {
fmt::print("Iteration {}\n", i);
Log("Iteration {}\n", i);
auto res = runBench(ioContext, ioContextRunner, factory, logger);
if (res.success) {
total.connection += res.connection;
......@@ -191,9 +191,9 @@ bench()
total_success++;
}
}
fmt::print("Average connection time: {}\n", dht::print_duration(total.connection / total_success));
fmt::print("Average send time: {}\n", dht::print_duration(total.send / total_success));
fmt::print("Total success: {}\n", total_success);
Log("Average connection time: {}\n", dht::print_duration(total.connection / total_success));
Log("Average send time: {}\n", dht::print_duration(total.send / total_success));
Log("Total success: {}\n", total_success);
std::this_thread::sleep_for(500ms);
ioContext->stop();
......
......@@ -23,6 +23,8 @@
namespace dhtnet {
#define Log(...) do { fmt::print(__VA_ARGS__); std::fflush(stdout); } while (0)
using Buffer = std::shared_ptr<std::vector<uint8_t>>;
constexpr size_t BUFFER_SIZE = 64 * 1024;
......
......@@ -15,7 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include "dhtnet_crtmgr.h"
#include"common.h"
#include <iostream>
#include <fstream>
......@@ -148,7 +148,7 @@ int create_yaml_config(std::filesystem::path file, std::filesystem::path certifi
yaml_file << " # port: 443\n";
}
yaml_file.close();
fmt::print("Configuration file created in {}\n", file);
Log("Configuration file created in {}\n", file);
} else {
fmt::print(stderr, "Error: Could not create configuration file {}.\n", file);
return 1;
......@@ -174,7 +174,7 @@ int configure_ssh_config(std::filesystem::path yaml_config)
std::string line;
while (std::getline(ssh_file, line)) {
if (line.find("Host dnc") != std::string::npos) {
fmt::print("Info: dnc configuration already exists in ssh config. File is left untouched\n");
Log("Info: dnc configuration already exists in ssh config. File is left untouched\n");
return 0;
}
}
......@@ -184,7 +184,7 @@ int configure_ssh_config(std::filesystem::path yaml_config)
ssh_file << "\nHost dnc/*\n";
ssh_file << " ProxyCommand dnc -d " << yaml_config << " $(basename %h)\n";
ssh_file.close();
fmt::print("SSH configuration added to {}\n", ssh_config);
Log("SSH configuration added to {}\n", ssh_config);
} else {
fmt::print(stderr, "Error: Could not open ssh config file.\n");
return 1;
......@@ -207,7 +207,7 @@ main(int argc, char** argv)
auto params = parse_args(argc, argv);
if (params.help) {
fmt::print("Usage: dhtnet-crtmgr [options]\n"
Log("Usage: dhtnet-crtmgr [options]\n"
"\nOptions:\n"
" -h, --help Display this help message and then exit.\n"
" -v, --version Show the version of the program.\n"
......@@ -222,7 +222,7 @@ main(int argc, char** argv)
}
if (params.version) {
fmt::print("dhtnet-crtmgr v1.0\n");
Log("dhtnet-crtmgr v1.0\n");
return EXIT_SUCCESS;
}
// check if the public key id is requested
......@@ -232,7 +232,7 @@ main(int argc, char** argv)
exit(EXIT_FAILURE);
}
auto identity = dhtnet::loadIdentity(params.privatekey, params.ca);
fmt::print("Public key id: {}\n", identity.second->getId());
Log("Public key id: {}\n", identity.second->getId());
return EXIT_SUCCESS;
}
......@@ -241,7 +241,7 @@ main(int argc, char** argv)
// Ask user if he want to setup client or server config
std::string usage = "";
do {
fmt::print("Generate identity for server or client? [(C)lient/(s)erver] (default: client): ");
Log("Generate identity for server or client? [(C)lient/(s)erver] (default: client): ");
std::getline(std::cin, usage);
usage = str_tolower(usage);
if (usage == "s") usage = "server";
......@@ -253,7 +253,7 @@ main(int argc, char** argv)
std::string use_server_ca = "";
if (usage == "client") {
do {
fmt::print("Sign client certificate using server CA? [Y/n] (default: yes): ");
Log("Sign client certificate using server CA? [Y/n] (default: yes): ");
std::getline(std::cin, use_server_ca);
use_server_ca = str_tolower(use_server_ca);
if (use_server_ca == "y") use_server_ca = "yes";
......@@ -272,7 +272,7 @@ main(int argc, char** argv)
// Ask where to store identity files
std::filesystem::path folder;
fmt::print("Enter the path to save identities and config [{}]: ", home_dir);
Log("Enter the path to save identities and config [{}]: ", home_dir);
std::getline(std::cin, input_folder);
if (input_folder.empty()) {
folder = home_dir;
......@@ -309,7 +309,7 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate CA.\n");
return EXIT_FAILURE;
}
fmt::print("Generated CA in {}: {} {}\n", folder, "ca", ca.second->getId());
Log("Generated CA in {}: {} {}\n", folder, "ca", ca.second->getId());
}
// Generate client certificate
......@@ -318,7 +318,7 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate certificate.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", folder, "certificate", id.second->getId());
Log("Generated certificate in {}: {} {}\n", folder, "certificate", id.second->getId());
// Create configuration file with generated keys
std::filesystem::path yaml_config{folder / "config.yml"};
......@@ -329,7 +329,7 @@ main(int argc, char** argv)
// Ask user if he want to configure SSH
std::string ssh_setup = "";
do {
fmt::print("Configure SSH to support dnc protocol? [Y/n] (default: yes): ");
Log("Configure SSH to support dnc protocol? [Y/n] (default: yes): ");
std::getline(std::cin, ssh_setup);
ssh_setup = str_tolower(ssh_setup);
if (ssh_setup == "y") ssh_setup = "yes";
......@@ -350,7 +350,7 @@ main(int argc, char** argv)
std::string overwrite = "";
if (std::filesystem::exists(yaml_config)) {
do {
fmt::print("Configuration file already exists in {}. Overwrite it? [y/N] (default: no): ", yaml_config);
Log("Configuration file already exists in {}. Overwrite it? [y/N] (default: no): ", yaml_config);
std::getline(std::cin, overwrite);
overwrite = str_tolower(overwrite);
if (overwrite == "y") overwrite = "yes";
......@@ -379,7 +379,7 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate CA.\n");
return EXIT_FAILURE;
}
fmt::print("Generated CA in {}: {} {}\n", path_ca, "ca-server", ca.second->getId());
Log("Generated CA in {}: {} {}\n", path_ca, "ca-server", ca.second->getId());
// create identity with name id-server
std::filesystem::path path_id = params.output / "id";
auto identity = dhtnet::generateIdentity(path_id, "id-server", ca);
......@@ -387,7 +387,7 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate certificate.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", path_id,"id-server", identity.second->getId());
Log("Generated certificate in {}: {} {}\n", path_id,"id-server", identity.second->getId());
return EXIT_SUCCESS;
}
......@@ -398,14 +398,14 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate CA.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", params.output, "ca", ca.second->getId());
Log("Generated certificate in {}: {} {}\n", params.output, "ca", ca.second->getId());
}else{
auto ca = dhtnet::generateIdentity(params.output, params.name);
if (!ca.first || !ca.second) {
fmt::print(stderr, "Error: Could not generate CA.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", params.output, params.name, ca.second->getId());
Log("Generated certificate in {}: {} {}\n", params.output, params.name, ca.second->getId());
}
}else{
auto ca = dhtnet::loadIdentity(params.privatekey, params.ca);
......@@ -415,14 +415,14 @@ main(int argc, char** argv)
fmt::print(stderr, "Error: Could not generate certificate.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", params.output, "certificate", id.second->getId());
Log("Generated certificate in {}: {} {}\n", params.output, "certificate", id.second->getId());
}else{
auto id = dhtnet::generateIdentity(params.output, params.name, ca);
if (!id.first || !id.second) {
fmt::print(stderr, "Error: Could not generate certificate.\n");
return EXIT_FAILURE;
}
fmt::print("Generated certificate in {}: {} {}\n", params.output, params.name, id.second->getId());
Log("Generated certificate in {}: {} {}\n", params.output, params.name, id.second->getId());
}
}
return EXIT_SUCCESS;
......
......@@ -127,7 +127,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
auto it = authorized_services.find(ip);
if (it == authorized_services.end()) {
// Reject the connection if the ip is not authorized
fmt::print("Rejecting connection to {}:{}", ip, port);
Log("Rejecting connection to {}:{}", ip, port);
return false;
}
......@@ -135,10 +135,10 @@ Dnc::Dnc(dht::crypto::Identity identity,
const auto &ports = it->second;
if (std::find(ports.begin(), ports.end(), port) == ports.end()) {
// Reject the connection if the port is not authorized
fmt::print("Rejecting connection to {}:{}", ip, port);
Log("Rejecting connection to {}:{}", ip, port);
return false;
}
fmt::print("Accepting connection to {}:{}", ip, port);
Log("Accepting connection to {}:{}", ip, port);
return true;
});
......@@ -151,7 +151,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
}
try {
auto parsedName = parseName(name);
fmt::print("Connecting to {}:{}", parsedName.first, parsedName.second);
Log("Connecting to {}:{}", parsedName.first, parsedName.second);
asio::ip::tcp::resolver resolver(*ioContext);
asio::ip::tcp::resolver::results_type endpoints = resolver.resolve(parsedName.first,
......@@ -167,7 +167,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
[this, socket, mtlxSocket](const std::error_code& error,
const asio::ip::tcp::endpoint& ep) {
if (!error) {
fmt::print("Connected!\n");
Log("Connected!\n");
mtlxSocket->setOnRecv([socket, this](const uint8_t* data, size_t size) {
auto data_copy = std::make_shared<std::vector<uint8_t>>(data,
data + size);
......@@ -176,7 +176,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
[data_copy, this](const std::error_code& error,
std::size_t bytesWritten) {
if (error) {
fmt::print("Write error: {}\n", error.message());
Log("Write error: {}\n", error.message());
}
});
......@@ -186,13 +186,13 @@ Dnc::Dnc(dht::crypto::Identity identity,
auto buffer = std::make_shared<std::vector<uint8_t>>(BUFFER_SIZE);
readFromPipe(mtlxSocket, socket, buffer);
} else {
fmt::print("Connection error: {}\n", error.message());
Log("Connection error: {}\n", error.message());
mtlxSocket->shutdown();
}
});
} catch (std::exception& e) {
fmt::print("Exception: {}\n", e.what());
Log("Exception: {}\n", e.what());
}
});
}
......@@ -211,7 +211,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
{
std::condition_variable cv;
auto name = fmt::format("nc://{:s}:{:d}", remote_host, remote_port);
fmt::print("Requesting socket: %s\n", name.c_str());
Log("Requesting socket: %s\n", name.c_str());
connectionManager->connectDevice(
peer_id, name, [&](std::shared_ptr<ChannelSocket> socket, const dht::InfoHash&) {
if (socket) {
......@@ -230,7 +230,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
readFromPipe(socket, stdinPipe, buffer);
socket->onShutdown([this]() {
fmt::print("Exit program\n");
Log("Exit program\n");
ioContext->stop();
});
}
......@@ -238,7 +238,7 @@ Dnc::Dnc(dht::crypto::Identity identity,
connectionManager->onConnectionReady(
[&](const DeviceId&, const std::string& name, std::shared_ptr<ChannelSocket> mtlxSocket) {
fmt::print("Connected!\n");
Log("Connected!\n");
});
}
......
......@@ -145,7 +145,7 @@ parse_args(int argc, char** argv)
// extract values from dnc yaml file
if (!params.configuration.empty()) {
printf("read configuration file: %s\n", params.configuration.c_str());
Log("Read configuration file: {}\n", params.configuration.c_str());
std::ifstream config_file(params.configuration);
if (!config_file.is_open()) {
std::cerr << "Error: Could not open configuration file.\n";
......@@ -217,7 +217,7 @@ setSipLogLevel()
pj_log_set_level(level);
pj_log_set_log_func([](int level, const char* data, int len) {
fmt::print("{}", std::string_view(data, len));
Log("{}", std::string_view(data, len));
});
}
......@@ -228,7 +228,7 @@ main(int argc, char** argv)
auto params = parse_args(argc, argv);
if (params.help) {
fmt::print("Usage: dnc [options] [PEER_ID]\n"
Log("Usage: dnc [options] [PEER_ID]\n"
"\nOptions:\n"
" -h, --help Show this help message and exit.\n"
" -v, --version Display the program version.\n"
......@@ -249,7 +249,7 @@ main(int argc, char** argv)
}
if (params.version) {
fmt::print("dnc v1.0\n");
Log("dnc v1.0\n");
return EXIT_SUCCESS;
}
......@@ -258,9 +258,9 @@ main(int argc, char** argv)
fmt::print(stderr, "Hint: To generate new identity files, run: dhtnet-crtmgr --interactive\n");
return EXIT_FAILURE;
}
fmt::print("Loaded identity: {}\n", identity.second->getId());
Log("Loaded identity: {}\n", identity.second->getId());
fmt::print("dnc 1.0\n");
Log("dnc 1.0\n");
std::unique_ptr<dhtnet::Dnc> dhtnc;
if (params.listen) {
// create dnc instance
......
......@@ -196,7 +196,7 @@ main(int argc, char** argv)
auto params = parse_args(argc, argv);
if (params.help){
fmt::print("Usage: dsh [OPTIONS] [PEER_ID]\n"
Log("Usage: dsh [OPTIONS] [PEER_ID]\n"
"\nOptions:\n"
" -h, --help Show this help message and exit.\n"
" -v, --version Display the program version.\n"
......@@ -214,18 +214,18 @@ main(int argc, char** argv)
return EXIT_SUCCESS;
}
if (params.version){
fmt::print("dsh v1.0\n");
Log("dsh v1.0\n");
return EXIT_SUCCESS;
}
fmt::print("dsh 1.0\n");
Log("dsh 1.0\n");
auto identity = dhtnet::loadIdentity(params.privateKey, params.cert);
if (!identity.first || !identity.second) {
fmt::print(stderr, "Hint: To generate new identity files, run: dhtnet-crtmgr --interactive\n");
return EXIT_FAILURE;
}
fmt::print("Loaded identity: {} \n", identity.second->getId());
Log("Loaded identity: {} \n", identity.second->getId());
std::unique_ptr<dhtnet::Dsh> dhtsh;
if (params.listen) {
......
......@@ -179,7 +179,7 @@ setSipLogLevel()
pj_log_set_level(level);
pj_log_set_log_func([](int level, const char* data, int len) {
fmt::print("{}", std::string_view(data, len));
Log("{}", std::string_view(data, len));
});
}
......@@ -190,7 +190,7 @@ main(int argc, char** argv)
auto params = parse_args(argc, argv);
if (params.help) {
fmt::print(
Log(
"Usage: dvpn [options] [PEER_ID]\n"
"\nOptions:\n"
" -h, --help Show this help message and exit.\n"
......@@ -210,18 +210,18 @@ main(int argc, char** argv)
return EXIT_SUCCESS;
}
if (params.version) {
fmt::print("dvpn v1.0\n");
Log("dvpn v1.0\n");
return EXIT_SUCCESS;
}
fmt::print("dvpn 1.0\n");
Log("dvpn 1.0\n");
auto identity = dhtnet::loadIdentity(params.privateKey, params.cert);
if (!identity.first || !identity.second) {
fmt::print(stderr, "Hint: To generate new identity files, run: dhtnet-crtmgr --interactive\n");
return EXIT_FAILURE;
}
fmt::print("Loaded identity: {}\n", identity.second->getId());
Log("Loaded identity: {}\n", identity.second->getId());
std::unique_ptr<dhtnet::Dvpn> dvpn;
if (params.listen) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment