diff --git a/src/command_line.cpp b/src/command_line.cpp index 92d1efd..78dc29f 100644 --- a/src/command_line.cpp +++ b/src/command_line.cpp @@ -122,6 +122,8 @@ CommandLine::CommandLine(int argc, char** argv) { } else if (parser.parseParam("--ft_sending_resend_without_ack_after", ft_sending_resend_without_ack_after)) { } else if (parser.parseParam("--ft_sending_give_up_after", ft_sending_give_up_after)) { } else if (parser.parseParam("--ft_packet_window_size", ft_packet_window_size)) { + } else if (parser.parseParam("-I", max_incoming_transfers)) { + } else if (parser.parseParam("-O", max_outgoing_transfers)) { } else { std::cerr << "ERROR: unknown parameter '" << arg_sv << "' !\n\n"; PRINT_HELP_AND_BAIL; @@ -180,7 +182,8 @@ void CommandLine::printHelp(void) { << " --ft_packet_window_size\n" << "\n" << " transfer logic:\n" - << " TODO\n" + << " -I \n" + << " -O \n" ; } diff --git a/src/command_line.hpp b/src/command_line.hpp index 1586b54..6366148 100644 --- a/src/command_line.hpp +++ b/src/command_line.hpp @@ -70,9 +70,12 @@ struct CommandLine { // ---- TODO ---- // advaced dl: - // -I max_incoming_transfers (default 16) - // -O max_outgoing_transfers (default 4) + // -I max_incoming_transfers + size_t max_incoming_transfers {32}; + // -O max_outgoing_transfers + size_t max_outgoing_transfers {16}; // -u request chunks only from UDP-direct peers + bool request_only_from_udp_peer {false}; CommandLine(int argc, char** argv); diff --git a/src/states/receive_start_sha1.cpp b/src/states/receive_start_sha1.cpp index 25c988f..e56b417 100644 --- a/src/states/receive_start_sha1.cpp +++ b/src/states/receive_start_sha1.cpp @@ -20,7 +20,7 @@ namespace States { -ReceiveStartSHA1::ReceiveStartSHA1(ToxClient& tcl, const CommandLine& cl) : StateI(tcl), _dump_dir(cl.receive_dump_dir) { +ReceiveStartSHA1::ReceiveStartSHA1(ToxClient& tcl, const CommandLine& cl) : StateI(tcl), _cl(cl), _dump_dir(cl.receive_dump_dir) { if (cl.receive_id.empty()) { throw std::runtime_error("receiver missing id"); } @@ -41,7 +41,7 @@ bool ReceiveStartSHA1::iterate(float delta) { // timout if not heard after 10s if (time_since_remote_activity >= 10.f) { - std::cerr << "ReceiveStartSHA1 info tansfer timed out " << std::get<0>(*_transfer) << ":" << std::get<1>(*_transfer) << "." << std::get<2>(*_transfer) << "\n"; + std::cerr << "ReceiveStartSHA1 info tansfer timed out " << std::get<0>(*_transfer) << ":" << std::get<1>(*_transfer) << "." << int(std::get<2>(*_transfer)) << "\n"; _transfer.reset(); } @@ -114,6 +114,7 @@ std::unique_ptr ReceiveStartSHA1::nextState(void) { std::cout << "ReceiveStartSHA1 switching state to SHA1\n"; return std::make_unique( _tcl, + _cl, std::move(file_map), std::move(sha1_info), std::move(_sha1_info_data), @@ -148,7 +149,7 @@ bool ReceiveStartSHA1::onFT1ReceiveInitSHA1Info(uint32_t group_number, uint32_t _sha1_info_data.resize(file_size); _transfer = std::make_tuple(group_number, peer_number, transfer_id, 0.f); - std::cout << "ReceiveStartSHA1 accepted info transfer" << group_number << ":" << peer_number << "." << transfer_id << "\n"; + std::cout << "ReceiveStartSHA1 accepted info transfer" << group_number << ":" << peer_number << "." << int(transfer_id) << "\n"; // accept return true; @@ -174,7 +175,7 @@ void ReceiveStartSHA1::onFT1ReceiveDataSHA1Info(uint32_t group_number, uint32_t _sha1_info_data.clear(); } - std::cout << "ReceiveStartSHA1 info tansfer finished " << group_number << ":" << peer_number << "." << transfer_id << "\n"; + std::cout << "ReceiveStartSHA1 info tansfer finished " << group_number << ":" << peer_number << "." << int(transfer_id) << "\n"; _done = true; } } diff --git a/src/states/receive_start_sha1.hpp b/src/states/receive_start_sha1.hpp index 812c348..8f0afa6 100644 --- a/src/states/receive_start_sha1.hpp +++ b/src/states/receive_start_sha1.hpp @@ -33,6 +33,7 @@ struct ReceiveStartSHA1 final : public StateI { void onFT1SendDataSHA1Chunk(uint32_t group_number, uint32_t peer_number, uint8_t transfer_id, size_t data_offset, uint8_t* data, size_t data_size) override; private: + const CommandLine& _cl; std::string _dump_dir; //FTInfoSHA1 _sha1_info; diff --git a/src/states/send_start_sha1.cpp b/src/states/send_start_sha1.cpp index c43feb4..dbcc0c8 100644 --- a/src/states/send_start_sha1.cpp +++ b/src/states/send_start_sha1.cpp @@ -17,7 +17,7 @@ namespace States { -SendStartSHA1::SendStartSHA1(ToxClient& tcl, const CommandLine& cl) : StateI(tcl), _file_path(cl.send_path) { +SendStartSHA1::SendStartSHA1(ToxClient& tcl, const CommandLine& cl) : StateI(tcl), _cl(cl), _file_path(cl.send_path) { std::cout << "SendStartSHA1 start building sha1_info\n"; std::error_code err; _file_map = mio::make_mmap_source(cl.send_path, 0, mio::map_entire_file, err); @@ -72,6 +72,7 @@ std::unique_ptr SendStartSHA1::nextState(void) { // we are done setting up return std::make_unique( _tcl, + _cl, std::move(new_file_map), std::move(_sha1_info), std::move(_sha1_info_data), diff --git a/src/states/send_start_sha1.hpp b/src/states/send_start_sha1.hpp index 4789ed1..3f66d08 100644 --- a/src/states/send_start_sha1.hpp +++ b/src/states/send_start_sha1.hpp @@ -33,6 +33,8 @@ struct SendStartSHA1 final : public StateI { void onFT1SendDataSHA1Chunk(uint32_t group_number, uint32_t peer_number, uint8_t transfer_id, size_t data_offset, uint8_t* data, size_t data_size) override; private: + const CommandLine& _cl; + std::string _file_path; mio::mmap_source _file_map; FTInfoSHA1 _sha1_info; diff --git a/src/states/sha1.cpp b/src/states/sha1.cpp index cc50cd7..d4c1754 100644 --- a/src/states/sha1.cpp +++ b/src/states/sha1.cpp @@ -11,6 +11,7 @@ namespace States { SHA1::SHA1( ToxClient& tcl, + const CommandLine& cl, mio::mmap_sink&& file_map, const FTInfoSHA1&& sha1_info, const std::vector&& sha1_info_data, @@ -27,6 +28,9 @@ SHA1::SHA1( { assert(_have_chunk.size() == _sha1_info.chunks.size()); + _max_concurrent_in = cl.max_incoming_transfers; + _max_concurrent_out = cl.max_incoming_transfers; + _have_all = true; _have_count = 0; for (size_t i = 0; i < _have_chunk.size(); i++) { diff --git a/src/states/sha1.hpp b/src/states/sha1.hpp index c818346..641d34a 100644 --- a/src/states/sha1.hpp +++ b/src/states/sha1.hpp @@ -3,6 +3,7 @@ #include "../state.hpp" #include "../ft_sha1_info.hpp" +#include "../command_line.hpp" #include @@ -20,6 +21,7 @@ struct SHA1 final : public StateI { public: // general interface SHA1( ToxClient& tcl, + const CommandLine& cl, mio::mmap_sink&& file_map, const FTInfoSHA1&& sha1_info, const std::vector&& sha1_info_data, @@ -75,8 +77,8 @@ struct SHA1 final : public StateI { // chunk_index -> time since request std::map _chunks_requested; - const size_t _max_concurrent_out {16}; - const size_t _max_concurrent_in {32}; + size_t _max_concurrent_in {32}; + size_t _max_concurrent_out {16}; std::minstd_rand _rng {1337}; std::uniform_int_distribution _distrib;