Add Query.h.

GitOrigin-RevId: f795d804e9d3feb4f72517dc84bd13bfe7955bc4
This commit is contained in:
levlam 2019-01-31 05:37:59 +03:00
parent e0765a3c82
commit 5e2a71d8fb
6 changed files with 39 additions and 22 deletions

View File

@ -450,6 +450,7 @@ set(TDLIB_SOURCE
td/mtproto/PacketInfo.h
td/mtproto/PacketStorer.h
td/mtproto/PingConnection.h
td/mtproto/Query.h
td/mtproto/RawConnection.h
td/mtproto/SessionConnection.h
td/mtproto/TcpTransport.h

View File

@ -8,6 +8,7 @@
#include "td/mtproto/AuthData.h"
#include "td/mtproto/PacketStorer.h"
#include "td/mtproto/Query.h"
#include "td/mtproto/utils.h"
#include "td/mtproto/mtproto_api.h"
@ -102,7 +103,7 @@ class CancelVectorImpl {
class QueryImpl {
public:
QueryImpl(const Query &query, Slice header) : query_(query), header_(header) {
QueryImpl(const MtprotoQuery &query, Slice header) : query_(query), header_(header) {
}
template <class T>
@ -144,13 +145,13 @@ class QueryImpl {
}
private:
const Query &query_;
const MtprotoQuery &query_;
Slice header_;
};
class QueryVectorImpl {
public:
QueryVectorImpl(const vector<Query> &to_send, Slice header) : to_send_(to_send), header_(header) {
QueryVectorImpl(const vector<MtprotoQuery> &to_send, Slice header) : to_send_(to_send), header_(header) {
}
template <class T>
@ -164,7 +165,7 @@ class QueryVectorImpl {
}
private:
const vector<Query> &to_send_;
const vector<MtprotoQuery> &to_send_;
Slice header_;
};
@ -187,7 +188,7 @@ class ContainerImpl {
class CryptoImpl {
public:
CryptoImpl(const vector<Query> &to_send, Slice header, vector<int64> &&to_ack, int64 ping_id, int ping_timeout,
CryptoImpl(const vector<MtprotoQuery> &to_send, Slice header, vector<int64> &&to_ack, int64 ping_id, int ping_timeout,
int max_delay, int max_after, int max_wait, int future_salt_n, vector<int64> get_info,
vector<int64> resend, vector<int64> cancel, bool destroy_key, AuthData *auth_data, uint64 *container_id,
uint64 *get_info_id, uint64 *resend_id, uint64 *ping_message_id, uint64 *parent_message_id)

25
td/mtproto/Query.h Normal file
View File

@ -0,0 +1,25 @@
//
// Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2019
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#pragma once
#include "td/utils/buffer.h"
#include "td/utils/common.h"
namespace td {
namespace mtproto {
struct MtprotoQuery {
int64 message_id;
int32 seq_no;
BufferSlice packet;
bool gzip_flag;
uint64 invoke_after_id;
bool use_quick_ack;
};
} // namespace mtproto
} // namespace td

View File

@ -749,7 +749,7 @@ Result<uint64> SessionConnection::send_query(BufferSlice buffer, bool gzip_flag,
if (to_send_.empty()) {
send_before(Time::now_cached() + QUERY_DELAY);
}
to_send_.push_back(Query{message_id, seq_no, std::move(buffer), gzip_flag, invoke_after_id, use_quick_ack});
to_send_.push_back(MtprotoQuery{message_id, seq_no, std::move(buffer), gzip_flag, invoke_after_id, use_quick_ack});
VLOG(mtproto) << "Invoke query " << message_id << " of size " << to_send_.back().packet.size() << " with seq_no "
<< seq_no << " after " << invoke_after_id << (use_quick_ack ? " with quick ack" : "");
@ -791,7 +791,8 @@ std::pair<uint64, BufferSlice> SessionConnection::encrypted_bind(int64 perm_key,
auto real_size = object_storer.store(object_packet.as_slice().ubegin());
CHECK(size == real_size);
Query query{auth_data_->next_message_id(Time::now_cached()), 0, object_packet.as_buffer_slice(), false, 0, false};
MtprotoQuery query{
auth_data_->next_message_id(Time::now_cached()), 0, object_packet.as_buffer_slice(), false, 0, false};
PacketStorer<QueryImpl> query_storer(query, Slice());
PacketInfo info;
@ -871,7 +872,7 @@ void SessionConnection::flush_packet() {
send_till++;
}
}
std::vector<Query> queries;
std::vector<MtprotoQuery> queries;
if (send_till == to_send_.size()) {
queries = std::move(to_send_);
} else if (send_till != 0) {
@ -943,7 +944,7 @@ void SessionConnection::flush_packet() {
}
if (container_id != 0) {
vector<uint64> ids = transform(queries, [](const Query &x) { return static_cast<uint64>(x.message_id); });
vector<uint64> ids = transform(queries, [](const MtprotoQuery &x) { return static_cast<uint64>(x.message_id); });
// some acks may be lost here. Nobody will resend them if something goes wrong with query.
// It is mostly problem for server. We will just drop this answers in next connection

View File

@ -8,7 +8,7 @@
#include "td/mtproto/RawConnection.h"
#include "td/mtproto/PacketInfo.h"
#include "td/mtproto/utils.h"
#include "td/mtproto/Query.h"
#include "td/utils/buffer.h"
#include "td/utils/format.h"
@ -152,7 +152,7 @@ class SessionConnection
static constexpr int HTTP_MAX_DELAY = 30; // 0.03s
static constexpr int TEMP_KEY_TIMEOUT = 60 * 60 * 24; // one day
vector<Query> to_send_;
vector<MtprotoQuery> to_send_;
vector<int64> to_ack_;
double force_send_at_ = 0;

View File

@ -19,17 +19,6 @@
namespace td {
namespace mtproto {
struct Query {
int64 message_id;
int32 seq_no;
BufferSlice packet;
bool gzip_flag;
uint64 invoke_after_id;
bool use_quick_ack;
};
} // namespace mtproto
template <class T>
Result<typename T::ReturnType> fetch_result(Slice message, bool check_end = true) {
TlParser parser(message);