From 6882093ed1e37eff23ecc0c7af92ee088e3f02b9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 7 Apr 2020 15:19:52 +0400 Subject: [PATCH] Send init connection params. --- .../SourceFiles/mtproto/session_private.cpp | 26 +++++++++++++++++-- .../SourceFiles/mtproto/session_private.h | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/mtproto/session_private.cpp b/Telegram/SourceFiles/mtproto/session_private.cpp index f26e7c5d9a..1b61590034 100644 --- a/Telegram/SourceFiles/mtproto/session_private.cpp +++ b/Telegram/SourceFiles/mtproto/session_private.cpp @@ -482,6 +482,27 @@ mtpMsgId SessionPrivate::placeToContainer( return msgId; } +MTPVector SessionPrivate::prepareInitParams() { + const auto local = QDateTime::currentDateTime(); + const auto utc = QDateTime(local.date(), local.time(), Qt::UTC); + const auto shift = base::unixtime::now() - (TimeId)::time(nullptr); + const auto delta = int(utc.toTime_t()) - int(local.toTime_t()) - shift; + auto sliced = delta; + while (sliced < -12 * 3600) { + sliced += 24 * 3600; + } + while (sliced > 14 * 3600) { + sliced -= 24 * 3600; + } + const auto sign = (sliced < 0) ? -1 : 1; + const auto rounded = std::round(std::abs(sliced) / 900.) * 900 * sign; + return MTP_vector( + 1, + MTP_jsonObjectValue( + MTP_string("tz_offset"), + MTP_jsonNumber(MTP_double(rounded)))); +} + void SessionPrivate::tryToSend() { DEBUG_LOG(("MTP Info: tryToSend for dc %1.").arg(_shiftedDcId)); if (!_connection) { @@ -612,7 +633,8 @@ void SessionPrivate::tryToSend() { : MTPInputClientProxy(); using Flag = MTPInitConnection::Flag; initWrapper = MTPInitConnection( - MTP_flags(mtprotoProxy ? Flag::f_proxy : Flag(0)), + MTP_flags(Flag::f_params + | (mtprotoProxy ? Flag::f_proxy : Flag(0))), MTP_int(ApiId), MTP_string(deviceModel), MTP_string(systemVersion), @@ -621,7 +643,7 @@ void SessionPrivate::tryToSend() { MTP_string(langPackName), MTP_string(cloudLangCode), clientProxyFields, - MTPJSONValue(), // #TODO polls timezone + MTP_jsonObject(prepareInitParams()), SerializedRequest()); initSizeInInts = (tl::count_length(initWrapper) >> 2) + 2; initSize = initSizeInInts * sizeof(mtpPrime); diff --git a/Telegram/SourceFiles/mtproto/session_private.h b/Telegram/SourceFiles/mtproto/session_private.h index 91cfe4c616..fe39450f27 100644 --- a/Telegram/SourceFiles/mtproto/session_private.h +++ b/Telegram/SourceFiles/mtproto/session_private.h @@ -166,6 +166,7 @@ private: [[nodiscard]] uint32 nextRequestSeqNumber(bool needAck); [[nodiscard]] bool realDcTypeChanged(); + [[nodiscard]] MTPVector prepareInitParams(); const not_null _instance; const ShiftedDcId _shiftedDcId = 0;