diff --git a/td/mtproto/SessionConnection.cpp b/td/mtproto/SessionConnection.cpp index fa77defaf..d85bc387d 100644 --- a/td/mtproto/SessionConnection.cpp +++ b/td/mtproto/SessionConnection.cpp @@ -192,7 +192,6 @@ unique_ptr SessionConnection::move_as_raw_connection() { return std::move(raw_connection_); } -/*** SessionConnection ***/ BufferSlice SessionConnection::as_buffer_slice(Slice packet) { return current_buffer_slice_->from_slice(packet); } @@ -429,7 +428,7 @@ Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::pong } Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::future_salts &salts) { VLOG(mtproto) << "FUTURE_SALTS"; - std::vector new_salts; + vector new_salts; for (auto &it : salts.salts_) { new_salts.push_back( ServerSalt{it->salt_, static_cast(it->valid_since_), static_cast(it->valid_until_)}); @@ -440,7 +439,7 @@ Status SessionConnection::on_packet(const MsgInfo &info, const mtproto_api::futu return Status::OK(); } -Status SessionConnection::on_msgs_state_info(const std::vector &ids, Slice info) { +Status SessionConnection::on_msgs_state_info(const vector &ids, Slice info) { if (ids.size() != info.size()) { return Status::Error(PSLICE() << tag("ids.size()", ids.size()) << " != " << tag("info.size()", info.size())); } @@ -897,7 +896,7 @@ void SessionConnection::flush_packet() { send_till++; } } - std::vector queries; + vector queries; if (send_till == to_send_.size()) { queries = std::move(to_send_); } else if (send_till != 0) { @@ -922,14 +921,16 @@ void SessionConnection::flush_packet() { << tag("resend", to_resend_answer_.size()) << tag("cancel", to_cancel_answer_.size()) << tag("destroy_key", destroy_auth_key) << tag("auth_id", auth_data_->get_auth_key().id()); - auto cut_tail = [](auto &v, size_t size, Slice name) { + auto cut_tail = [](vector &v, size_t size, Slice name) { if (size >= v.size()) { - return std::move(v); + auto result = std::move(v); + v.clear(); + return result; } - LOG(WARNING) << "Too much ids in container: " << v.size() << " " << name; - std::decay_t res(std::make_move_iterator(v.end() - size), std::make_move_iterator(v.end())); + LOG(WARNING) << "Too much message identifiers in container " << name << ": " << v.size() << " instead of " << size; + vector result(v.end() - size, v.end()); v.resize(v.size() - size); - return res; + return result; }; // no more than 8192 ids per container.. diff --git a/td/mtproto/SessionConnection.h b/td/mtproto/SessionConnection.h index 24bc82103..69db54bb4 100644 --- a/td/mtproto/SessionConnection.h +++ b/td/mtproto/SessionConnection.h @@ -164,15 +164,15 @@ class SessionConnection final struct ServiceQuery { enum Type { GetStateInfo, ResendAnswer } type; - std::vector message_ids; + vector message_ids; }; - std::vector to_resend_answer_; - std::vector to_cancel_answer_; - std::vector to_get_state_info_; + vector to_resend_answer_; + vector to_cancel_answer_; + vector to_get_state_info_; std::unordered_map service_queries_; // nobody cleans up this map. But it should be really small. - std::unordered_map> container_to_service_msg_; + std::unordered_map> container_to_service_msg_; double last_read_at_ = 0; double last_ping_at_ = 0; @@ -233,7 +233,7 @@ class SessionConnection final Status on_packet(const MsgInfo &info, const mtproto_api::pong &pong) TD_WARN_UNUSED_RESULT; Status on_packet(const MsgInfo &info, const mtproto_api::future_salts &salts) TD_WARN_UNUSED_RESULT; - Status on_msgs_state_info(const std::vector &ids, Slice info) TD_WARN_UNUSED_RESULT; + Status on_msgs_state_info(const vector &ids, Slice info) TD_WARN_UNUSED_RESULT; Status on_packet(const MsgInfo &info, const mtproto_api::msgs_state_info &msgs_state_info) TD_WARN_UNUSED_RESULT; Status on_packet(const MsgInfo &info, const mtproto_api::msgs_all_info &msgs_all_info) TD_WARN_UNUSED_RESULT; Status on_packet(const MsgInfo &info, const mtproto_api::msg_detailed_info &msg_detailed_info) TD_WARN_UNUSED_RESULT;