Explicitly specify TLObjectStorer's template parameter.
This commit is contained in:
parent
4c8ab2bf29
commit
df563e781e
@ -149,7 +149,7 @@ class QueryImpl {
|
|||||||
Slice data = query_.packet.as_slice();
|
Slice data = query_.packet.as_slice();
|
||||||
mtproto_api::gzip_packed packed(data);
|
mtproto_api::gzip_packed packed(data);
|
||||||
auto plain_storer = create_storer(data);
|
auto plain_storer = create_storer(data);
|
||||||
auto gzip_storer = create_object_storer(packed);
|
auto gzip_storer = TLObjectStorer<mtproto_api::gzip_packed>(packed);
|
||||||
const Storer &data_storer =
|
const Storer &data_storer =
|
||||||
query_.gzip_flag ? static_cast<const Storer &>(gzip_storer) : static_cast<const Storer &>(plain_storer);
|
query_.gzip_flag ? static_cast<const Storer &>(gzip_storer) : static_cast<const Storer &>(plain_storer);
|
||||||
auto header_storer = create_storer(header_);
|
auto header_storer = create_storer(header_);
|
||||||
|
@ -73,8 +73,9 @@ void AuthKeyHandshake::on_finish() {
|
|||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
string AuthKeyHandshake::store_object(const mtproto_api::Object &object) {
|
template <class T>
|
||||||
auto storer = create_object_storer(object);
|
string AuthKeyHandshake::store_object(const T &object) {
|
||||||
|
auto storer = TLObjectStorer<T>(object);
|
||||||
size_t size = storer.size();
|
size_t size = storer.size();
|
||||||
string result(size, '\0');
|
string result(size, '\0');
|
||||||
auto real_size = storer.store(MutableSlice(result).ubegin());
|
auto real_size = storer.store(MutableSlice(result).ubegin());
|
||||||
|
@ -95,7 +95,8 @@ class AuthKeyHandshake {
|
|||||||
|
|
||||||
string last_query_;
|
string last_query_;
|
||||||
|
|
||||||
static string store_object(const mtproto_api::Object &object);
|
template <class T>
|
||||||
|
static string store_object(const T &object);
|
||||||
|
|
||||||
void send(Callback *connection, const Storer &storer);
|
void send(Callback *connection, const Storer &storer);
|
||||||
static void do_send(Callback *connection, const Storer &storer);
|
static void do_send(Callback *connection, const Storer &storer);
|
||||||
|
@ -842,7 +842,7 @@ std::pair<MessageId, BufferSlice> SessionConnection::encrypted_bind(int64 perm_k
|
|||||||
int64 temp_key = auth_data_->get_tmp_auth_key().id();
|
int64 temp_key = auth_data_->get_tmp_auth_key().id();
|
||||||
|
|
||||||
mtproto_api::bind_auth_key_inner object(nonce, temp_key, perm_key, auth_data_->get_session_id(), expires_at);
|
mtproto_api::bind_auth_key_inner object(nonce, temp_key, perm_key, auth_data_->get_session_id(), expires_at);
|
||||||
auto object_storer = create_object_storer(object);
|
auto object_storer = TLObjectStorer<mtproto_api::bind_auth_key_inner>(object);
|
||||||
auto size = object_storer.size();
|
auto size = object_storer.size();
|
||||||
auto object_packet = BufferWriter{size, 0, 0};
|
auto object_packet = BufferWriter{size, 0, 0};
|
||||||
auto real_size = object_storer.store(object_packet.as_mutable_slice().ubegin());
|
auto real_size = object_storer.store(object_packet.as_mutable_slice().ubegin());
|
||||||
|
@ -15,9 +15,5 @@ TLStorer<mtproto_api::Function> create_function_storer(const mtproto_api::Functi
|
|||||||
return TLStorer<mtproto_api::Function>(function);
|
return TLStorer<mtproto_api::Function>(function);
|
||||||
}
|
}
|
||||||
|
|
||||||
TLObjectStorer<mtproto_api::Object> create_object_storer(const mtproto_api::Object &object) {
|
|
||||||
return TLObjectStorer<mtproto_api::Object>(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mtproto
|
} // namespace mtproto
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -29,7 +29,7 @@ class TLObjectStorer final : public Storer {
|
|||||||
size_t size() const final {
|
size_t size() const final {
|
||||||
if (size_ == std::numeric_limits<size_t>::max()) {
|
if (size_ == std::numeric_limits<size_t>::max()) {
|
||||||
TlStorerCalcLength storer;
|
TlStorerCalcLength storer;
|
||||||
storer.store_binary(object_.get_id());
|
storer.store_binary(T::ID);
|
||||||
object_.store(storer);
|
object_.store(storer);
|
||||||
size_ = storer.get_length();
|
size_ = storer.get_length();
|
||||||
}
|
}
|
||||||
@ -37,14 +37,13 @@ class TLObjectStorer final : public Storer {
|
|||||||
}
|
}
|
||||||
size_t store(uint8 *ptr) const final {
|
size_t store(uint8 *ptr) const final {
|
||||||
TlStorerUnsafe storer(ptr);
|
TlStorerUnsafe storer(ptr);
|
||||||
storer.store_binary(object_.get_id());
|
storer.store_binary(T::ID);
|
||||||
object_.store(storer);
|
object_.store(storer);
|
||||||
return static_cast<size_t>(storer.get_buf() - ptr);
|
return static_cast<size_t>(storer.get_buf() - ptr);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace mtproto_api {
|
namespace mtproto_api {
|
||||||
class Object;
|
|
||||||
class Function;
|
class Function;
|
||||||
} // namespace mtproto_api
|
} // namespace mtproto_api
|
||||||
|
|
||||||
@ -52,7 +51,5 @@ namespace mtproto {
|
|||||||
|
|
||||||
TLStorer<mtproto_api::Function> create_function_storer(const mtproto_api::Function &function);
|
TLStorer<mtproto_api::Function> create_function_storer(const mtproto_api::Function &function);
|
||||||
|
|
||||||
TLObjectStorer<mtproto_api::Object> create_object_storer(const mtproto_api::Object &object);
|
|
||||||
|
|
||||||
} // namespace mtproto
|
} // namespace mtproto
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -45,10 +45,6 @@
|
|||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
inline TLObjectStorer<secret_api::Object> create_object_storer(const secret_api::Object &object) {
|
|
||||||
return TLObjectStorer<secret_api::Object>(object);
|
|
||||||
}
|
|
||||||
|
|
||||||
class SecretImpl {
|
class SecretImpl {
|
||||||
public:
|
public:
|
||||||
explicit SecretImpl(const Storer &data) : data(data) {
|
explicit SecretImpl(const Storer &data) : data(data) {
|
||||||
@ -221,7 +217,7 @@ Result<BufferSlice> SecretChatActor::create_encrypted_message(int32 my_in_seq_no
|
|||||||
auto message_with_layer = secret_api::make_object<secret_api::decryptedMessageLayer>(
|
auto message_with_layer = secret_api::make_object<secret_api::decryptedMessageLayer>(
|
||||||
std::move(random_bytes), layer, in_seq_no, out_seq_no, std::move(message));
|
std::move(random_bytes), layer, in_seq_no, out_seq_no, std::move(message));
|
||||||
LOG(INFO) << "Create message " << to_string(message_with_layer);
|
LOG(INFO) << "Create message " << to_string(message_with_layer);
|
||||||
auto storer = create_object_storer(*message_with_layer);
|
auto storer = TLObjectStorer<secret_api::decryptedMessageLayer>(*message_with_layer);
|
||||||
auto new_storer = mtproto::PacketStorer<SecretImpl>(storer);
|
auto new_storer = mtproto::PacketStorer<SecretImpl>(storer);
|
||||||
mtproto::PacketInfo packet_info;
|
mtproto::PacketInfo packet_info;
|
||||||
packet_info.type = mtproto::PacketInfo::EndToEnd;
|
packet_info.type = mtproto::PacketInfo::EndToEnd;
|
||||||
|
Loading…
Reference in New Issue
Block a user