added check version support to remote mounts
This commit is contained in:
@@ -71,11 +71,17 @@ private:
|
||||
[[nodiscard]] auto handshake(client &cli, std::uint32_t &min_version) const
|
||||
-> bool;
|
||||
|
||||
[[nodiscard]] auto handshake(client &cli, boost::asio::io_context &ctx,
|
||||
std::uint32_t &min_version) const -> bool;
|
||||
|
||||
void put_client(std::shared_ptr<client> &cli);
|
||||
|
||||
[[nodiscard]] auto read_packet(client &cli, packet &response) const
|
||||
-> packet::error_type;
|
||||
|
||||
[[nodiscard]] auto read_packet(client &cli, boost::asio::io_context &ctx,
|
||||
packet &response) const -> packet::error_type;
|
||||
|
||||
void resolve();
|
||||
|
||||
public:
|
||||
|
@@ -98,10 +98,16 @@ auto packet_client::check_version(std::uint32_t client_version,
|
||||
cli.socket.set_option(boost::asio::socket_base::linger(false, 0));
|
||||
cli.socket.set_option(boost::asio::socket_base::keep_alive(true));
|
||||
|
||||
if (not handshake(cli, min_version)) {
|
||||
if (not handshake(cli, ctx, min_version)) {
|
||||
return api_error::comm_error;
|
||||
}
|
||||
|
||||
std::this_thread::sleep_for(2s);
|
||||
if (cli.socket.available() != 0U) {
|
||||
min_version = 0U;
|
||||
return api_error::incompatible_version;
|
||||
}
|
||||
|
||||
if (client_version < min_version) {
|
||||
return api_error::incompatible_version;
|
||||
}
|
||||
@@ -126,7 +132,7 @@ void packet_client::connect(client &cli) {
|
||||
cli.socket.set_option(boost::asio::socket_base::keep_alive(true));
|
||||
|
||||
std::uint32_t min_version{};
|
||||
if (not handshake(cli, min_version)) {
|
||||
if (not handshake(cli, io_context_, min_version)) {
|
||||
close(cli);
|
||||
return;
|
||||
}
|
||||
@@ -172,6 +178,11 @@ auto packet_client::get_client() -> std::shared_ptr<packet_client::client> {
|
||||
|
||||
auto packet_client::handshake(client &cli, std::uint32_t &min_version) const
|
||||
-> bool {
|
||||
return handshake(cli, io_context_, min_version);
|
||||
}
|
||||
|
||||
auto packet_client::handshake(client &cli, boost::asio::io_context &ctx,
|
||||
std::uint32_t &min_version) const -> bool {
|
||||
REPERTORY_USES_FUNCTION_NAME();
|
||||
|
||||
try {
|
||||
@@ -185,8 +196,7 @@ auto packet_client::handshake(client &cli, std::uint32_t &min_version) const
|
||||
tmp.to_buffer(buffer);
|
||||
}
|
||||
|
||||
read_exact_with_deadline(io_context_, cli.socket,
|
||||
boost::asio::buffer(buffer),
|
||||
read_exact_with_deadline(ctx, cli.socket, boost::asio::buffer(buffer),
|
||||
std::chrono::milliseconds(cfg_.recv_timeout_ms));
|
||||
packet response(buffer);
|
||||
auto res = response.decode(min_version);
|
||||
@@ -197,8 +207,7 @@ auto packet_client::handshake(client &cli, std::uint32_t &min_version) const
|
||||
response.encrypt(cfg_.encryption_token, false);
|
||||
response.to_buffer(buffer);
|
||||
|
||||
write_all_with_deadline(io_context_, cli.socket,
|
||||
boost::asio::buffer(buffer),
|
||||
write_all_with_deadline(ctx, cli.socket, boost::asio::buffer(buffer),
|
||||
std::chrono::milliseconds(cfg_.send_timeout_ms));
|
||||
return true;
|
||||
} catch (const std::exception &e) {
|
||||
@@ -221,8 +230,13 @@ void packet_client::put_client(std::shared_ptr<client> &cli) {
|
||||
|
||||
auto packet_client::read_packet(client &cli, packet &response) const
|
||||
-> packet::error_type {
|
||||
return read_packet(cli, io_context_, response);
|
||||
}
|
||||
|
||||
auto packet_client::read_packet(client &cli, boost::asio::io_context &ctx,
|
||||
packet &response) const -> packet::error_type {
|
||||
data_buffer buffer(sizeof(std::uint32_t));
|
||||
read_exact_with_deadline(io_context_, cli.socket, boost::asio::buffer(buffer),
|
||||
read_exact_with_deadline(ctx, cli.socket, boost::asio::buffer(buffer),
|
||||
std::chrono::milliseconds(cfg_.recv_timeout_ms));
|
||||
|
||||
std::uint32_t to_read{};
|
||||
@@ -230,7 +244,7 @@ auto packet_client::read_packet(client &cli, packet &response) const
|
||||
boost::endian::big_to_native_inplace(to_read);
|
||||
buffer.resize(to_read);
|
||||
|
||||
read_exact_with_deadline(io_context_, cli.socket, boost::asio::buffer(buffer),
|
||||
read_exact_with_deadline(ctx, cli.socket, boost::asio::buffer(buffer),
|
||||
std::chrono::milliseconds(cfg_.recv_timeout_ms));
|
||||
response = std::move(buffer);
|
||||
|
||||
|
Reference in New Issue
Block a user