From 868b9843b03c5eaa1b93c5a32f4a38ca93649d95 Mon Sep 17 00:00:00 2001 From: John Preston Date: Sat, 15 Nov 2014 02:23:35 +0300 Subject: [PATCH] version 0.6.9 - some network and protocol improvements, checkboxes in photos overview, other fixes --- Telegram/DeployLinux.sh | 4 +- Telegram/DeployLinux32.sh | 4 +- Telegram/DeployMacWin.sh | 4 +- Telegram/DeployWin.sh | 4 +- Telegram/PrepareLinux.sh | 4 +- Telegram/PrepareLinux32.sh | 4 +- Telegram/PrepareMac.sh | 4 +- Telegram/PrepareWin.bat | 2 +- Telegram/Resources/lang.txt | 5 +- Telegram/Resources/style.txt | 3 + Telegram/Setup.iss | 6 +- Telegram/SourceFiles/app.cpp | 17 +- Telegram/SourceFiles/application.cpp | 1 - Telegram/SourceFiles/art/sprite.png | Bin 56307 -> 57171 bytes Telegram/SourceFiles/art/sprite_200x.png | Bin 97822 -> 99419 bytes Telegram/SourceFiles/boxes/addcontactbox.cpp | 2 +- .../SourceFiles/boxes/addparticipantbox.cpp | 3 + Telegram/SourceFiles/config.h | 4 +- Telegram/SourceFiles/gui/text.cpp | 2 +- Telegram/SourceFiles/history.cpp | 28 +- Telegram/SourceFiles/history.h | 2 +- Telegram/SourceFiles/historywidget.cpp | 7 +- Telegram/SourceFiles/historywidget.h | 2 + Telegram/SourceFiles/mainwidget.cpp | 11 +- Telegram/SourceFiles/mtproto/generate.py | 10 +- Telegram/SourceFiles/mtproto/mtp.cpp | 34 +- Telegram/SourceFiles/mtproto/mtp.h | 8 +- .../SourceFiles/mtproto/mtpConnection.cpp | 142 +- Telegram/SourceFiles/mtproto/mtpConnection.h | 14 + Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp | 10 +- Telegram/SourceFiles/mtproto/mtpCoreTypes.h | 49 +- Telegram/SourceFiles/mtproto/mtpDC.cpp | 3 +- Telegram/SourceFiles/mtproto/mtpDC.h | 9 +- .../SourceFiles/mtproto/mtpFileLoader.cpp | 3 +- Telegram/SourceFiles/mtproto/mtpScheme.cpp | 6988 +++++++++-------- Telegram/SourceFiles/mtproto/mtpScheme.h | 2187 ++++-- Telegram/SourceFiles/mtproto/mtpSession.cpp | 36 +- Telegram/SourceFiles/mtproto/mtpSession.h | 50 +- Telegram/SourceFiles/mtproto/mtpSessionImpl.h | 54 +- Telegram/SourceFiles/mtproto/scheme.tl | 38 +- Telegram/SourceFiles/overviewwidget.cpp | 16 +- Telegram/SourceFiles/overviewwidget.h | 3 + Telegram/Telegram.plist | 2 +- Telegram/Telegram.rc | Bin 5542 -> 5542 bytes Telegram/Telegram.xcodeproj/project.pbxproj | 12 +- .../src/3rdparty/pcre/pcre16_valid_utf16.c | 137 + 46 files changed, 5618 insertions(+), 4310 deletions(-) create mode 100644 Telegram/_qt_5_3_1_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c diff --git a/Telegram/DeployLinux.sh b/Telegram/DeployLinux.sh index f94b95f185..b7c91ea4d9 100755 --- a/Telegram/DeployLinux.sh +++ b/Telegram/DeployLinux.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ ! -f "./../Linux/Release/deploy/$AppVersionStr/tlinuxupd$AppVersion" ]; then echo "tlinuxupd$AppVersion not found!"; diff --git a/Telegram/DeployLinux32.sh b/Telegram/DeployLinux32.sh index 5455db6b58..52ac0becc6 100755 --- a/Telegram/DeployLinux32.sh +++ b/Telegram/DeployLinux32.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ ! -f "./../Linux/Release/deploy/$AppVersionStr/tlinux32upd$AppVersion" ]; then echo "tlinux32upd$AppVersion not found!" diff --git a/Telegram/DeployMacWin.sh b/Telegram/DeployMacWin.sh index f18fecdb57..3650c36d05 100755 --- a/Telegram/DeployMacWin.sh +++ b/Telegram/DeployMacWin.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ ! -f "./../Mac/Release/deploy/$AppVersionStr/tmacupd$AppVersion" ]; then echo "tmacupd$AppVersion not found!" diff --git a/Telegram/DeployWin.sh b/Telegram/DeployWin.sh index ae5bdb810c..a3f186836d 100644 --- a/Telegram/DeployWin.sh +++ b/Telegram/DeployWin.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ ! -f "./../Win32/Deploy/deploy/$AppVersionStr/tupdate$AppVersion" ]; then echo "tupdate$AppVersion not found!" diff --git a/Telegram/PrepareLinux.sh b/Telegram/PrepareLinux.sh index 453efb7c51..cda49b0979 100755 --- a/Telegram/PrepareLinux.sh +++ b/Telegram/PrepareLinux.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" diff --git a/Telegram/PrepareLinux32.sh b/Telegram/PrepareLinux32.sh index a405b3f4f5..bce013a24f 100755 --- a/Telegram/PrepareLinux32.sh +++ b/Telegram/PrepareLinux32.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 if [ -d "./../Linux/Release/deploy/$AppVersionStr" ]; then echo "Deploy folder for version $AppVersionStr already exists!" diff --git a/Telegram/PrepareMac.sh b/Telegram/PrepareMac.sh index 79192d3bb1..154e0704ff 100755 --- a/Telegram/PrepareMac.sh +++ b/Telegram/PrepareMac.sh @@ -1,5 +1,5 @@ -AppVersionStr=0.6.8 -AppVersion=6008 +AppVersionStr=0.6.9 +AppVersion=6009 echo "" echo "Preparing version $AppVersionStr.." diff --git a/Telegram/PrepareWin.bat b/Telegram/PrepareWin.bat index f50b3155bf..186cad0a1c 100644 --- a/Telegram/PrepareWin.bat +++ b/Telegram/PrepareWin.bat @@ -1,6 +1,6 @@ @echo OFF -set "AppVersionStr=0.6.8" +set "AppVersionStr=0.6.9" echo. echo Preparing version %AppVersionStr%.. echo. diff --git a/Telegram/Resources/lang.txt b/Telegram/Resources/lang.txt index 8bb1a994e8..ab9c893310 100644 --- a/Telegram/Resources/lang.txt +++ b/Telegram/Resources/lang.txt @@ -61,7 +61,10 @@ lng_connecting: "Connecting.."; lng_reconnecting: "Reconnect in %1 s.."; lng_reconnecting_try_now: "Try now"; -lng_status_offline: "offline"; +lng_status_offline: "last seen a long time ago"; +lng_status_recently: "last seen recently"; +lng_status_last_week: "last seen within a week"; +lng_status_last_month: "last seen within a month"; lng_status_invisible: "invisible"; lng_status_lastseen: "last seen {when}"; lng_status_lastseen_now: "just now"; diff --git a/Telegram/Resources/style.txt b/Telegram/Resources/style.txt index 0f1b556a26..b79c55f996 100644 --- a/Telegram/Resources/style.txt +++ b/Telegram/Resources/style.txt @@ -1572,6 +1572,9 @@ medviewPhotoSpritePos: point(14px, 14px); overviewPhotoSkip: 10px; overviewPhotoMinSize: 100px; +overviewPhotoCheck: sprite(245px, 308px, 32px, 32px); +overviewPhotoChecked: sprite(278px, 308px, 32px, 32px); +overviewPhotoSelectOverlay: #0a7bb03f; // Mac specific diff --git a/Telegram/Setup.iss b/Telegram/Setup.iss index f12407d8b2..00a196c32a 100644 --- a/Telegram/Setup.iss +++ b/Telegram/Setup.iss @@ -3,9 +3,9 @@ #define MyAppShortName "Telegram" #define MyAppName "Telegram Desktop" -#define MyAppVersion "0.6.8" -#define MyAppVersionZero "0.6.8" -#define MyAppFullVersion "0.6.8.0" +#define MyAppVersion "0.6.9" +#define MyAppVersionZero "0.6.9" +#define MyAppFullVersion "0.6.9.0" #define MyAppPublisher "Telegram Messenger LLP" #define MyAppURL "https://tdesktop.com" #define MyAppExeName "Telegram.exe" diff --git a/Telegram/SourceFiles/app.cpp b/Telegram/SourceFiles/app.cpp index 725ea731da..1fe000a8c6 100644 --- a/Telegram/SourceFiles/app.cpp +++ b/Telegram/SourceFiles/app.cpp @@ -183,8 +183,15 @@ namespace App { } QString onlineText(int32 online, int32 now, bool precise) { - if (!online) return lang(lng_status_offline); - if (online < 0) return lang(lng_status_invisible); + if (online <= 0) { + switch (online) { + case 0: return lang(lng_status_offline); + case -2: return lang(lng_status_recently); + case -3: return lang(lng_status_last_week); + case -4: return lang(lng_status_last_month); + } + return lang(lng_status_invisible); + } if (online > now) { return lang(lng_status_online); } @@ -329,6 +336,10 @@ namespace App { data->loaded = true; if (status) switch (status->type()) { + case mtpc_userStatusEmpty: data->onlineTill = 0; break; + case mtpc_userStatusRecently: data->onlineTill = -2; break; + case mtpc_userStatusLastWeek: data->onlineTill = -3; break; + case mtpc_userStatusLastMonth: data->onlineTill = -4; break; case mtpc_userStatusOffline: data->onlineTill = status->c_userStatusOffline().vwas_online.v; break; case mtpc_userStatusOnline: data->onlineTill = status->c_userStatusOnline().vexpires.v; break; } @@ -408,7 +419,7 @@ namespace App { if (!data) continue; data->loaded = true; - data->updateName(title.trimmed(), QString()); + data->updateName(title.trimmed(), QString(), QString()); if (App::main()) App::main()->peerUpdated(data); } diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index a3f9948b86..2b2306fdb4 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -633,7 +633,6 @@ void Application::startApp() { readSupportTemplates(); - MTP::setLayer(mtpLayerMax); MTP::start(); MTP::setStateChangedHandler(mtpStateChanged); diff --git a/Telegram/SourceFiles/art/sprite.png b/Telegram/SourceFiles/art/sprite.png index 9183265f1aed12f455801a8c8c1d77b5b9c4675e..f7c063b2f8d161b0187a1b42a3939aa392a60051 100644 GIT binary patch delta 41297 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 b2N)EGmA(Pxfgmmu1wZF>jI_(nVnhE6%$gNr delta 40499 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

)SWw4E> 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 a?65=Sp>M~S9yrj^ZlF#ZpCTX~qy7T|y+M5d diff --git a/Telegram/SourceFiles/boxes/addcontactbox.cpp b/Telegram/SourceFiles/boxes/addcontactbox.cpp index 5f7228714a..e77889376c 100644 --- a/Telegram/SourceFiles/boxes/addcontactbox.cpp +++ b/Telegram/SourceFiles/boxes/addcontactbox.cpp @@ -281,7 +281,7 @@ bool AddContactBox::onSaveFail(const RPCError &error) { QString err(error.type()); QString firstName = _firstInput.text().trimmed(), lastName = _lastInput.text().trimmed(); if (err == "CHAT_TITLE_NOT_MODIFIED") { - _peer->updateName(firstName, QString()); + _peer->updateName(firstName, QString(), QString()); emit closed(); return true; } else if (err == "NO_CHAT_TITLE") { diff --git a/Telegram/SourceFiles/boxes/addparticipantbox.cpp b/Telegram/SourceFiles/boxes/addparticipantbox.cpp index cd3d737060..c1e02dffe3 100644 --- a/Telegram/SourceFiles/boxes/addparticipantbox.cpp +++ b/Telegram/SourceFiles/boxes/addparticipantbox.cpp @@ -231,6 +231,7 @@ void AddParticipantInner::mousePressEvent(QMouseEvent *e) { } void AddParticipantInner::chooseParticipant() { + _time = unixtime(); int32 rh = st::profileListPhotoSize + st::profileListPadding.height() * 2, from; if (_filter.isEmpty()) { if (!_sel || contactData(_sel)->inchat) return; @@ -293,6 +294,7 @@ void AddParticipantInner::updateSel() { } void AddParticipantInner::updateFilter(QString filter) { + _time = unixtime(); QStringList f; if (!filter.isEmpty()) { QStringList filterList = filter.split(cWordSplit(), QString::SkipEmptyParts); @@ -405,6 +407,7 @@ AddParticipantInner::~AddParticipantInner() { } void AddParticipantInner::selectSkip(int32 dir) { + _time = unixtime(); _mouseSel = false; int32 rh = st::profileListPhotoSize + st::profileListPadding.height() * 2, origDir = dir; if (_filter.isEmpty()) { diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index 6826b2e48a..03cb6ba2a8 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,8 +17,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #pragma once -static const int32 AppVersion = 6008; -static const wchar_t *AppVersionStr = L"0.6.8"; +static const int32 AppVersion = 6009; +static const wchar_t *AppVersionStr = L"0.6.9"; static const wchar_t *AppNameOld = L"Telegram Win (Unofficial)"; static const wchar_t *AppName = L"Telegram Desktop"; diff --git a/Telegram/SourceFiles/gui/text.cpp b/Telegram/SourceFiles/gui/text.cpp index 78e0a9437e..11d160692e 100644 --- a/Telegram/SourceFiles/gui/text.cpp +++ b/Telegram/SourceFiles/gui/text.cpp @@ -3975,7 +3975,7 @@ QString textAccentFold(const QString &text) { continue; } if (ch->isHighSurrogate() && ch + 1 < e && (ch + 1)->isLowSurrogate()) { - QChar noAccent = QChar::surrogateToUcs4(*ch, *(ch + 1)); + QChar noAccent = chNoAccent(QChar::surrogateToUcs4(*ch, *(ch + 1))); if (noAccent.unicode() > 0) { copying = true; result[i] = noAccent; diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index bcb433e63b..48a3bdf899 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -296,12 +296,13 @@ const ChatData *PeerData::asChat() const { return chat ? static_cast(this) : App::chat(id | 0x100000000L); } -void PeerData::updateName(const QString &newName, const QString &newNameOrPhone) { - if (name == newName && nameOrPhone == newNameOrPhone) return; +void PeerData::updateName(const QString &newName, const QString &newNameOrPhone, const QString &newUsername) { + if (name == newName && nameOrPhone == newNameOrPhone && (chat || asUser()->username == newUsername)) return; ++nameVersion; name = newName; nameOrPhone = newNameOrPhone; + if (!chat) asUser()->username = newUsername; Names oldNames = names; NameFirstChars oldChars = chars; fillNames(); @@ -352,24 +353,23 @@ void PeerData::fillNames() { void UserData::setName(const QString &first, const QString &last, const QString &phoneName, const QString &usern) { - bool updName = !first.isEmpty() || !last.isEmpty(); - - if (username != usern) { - username = usern; - if (App::main()) { - App::main()->peerUsernameChanged(this); - } - } + bool updName = !first.isEmpty() || !last.isEmpty(), updUsername = (username != usern); + if (updName && first.trimmed().isEmpty()) { firstName = last; lastName = QString(); - updateName(firstName, phoneName); + updateName(firstName, phoneName, usern); } else { if (updName) { firstName = first; lastName = last; } - updateName(firstName + ' ' + lastName, phoneName); + updateName(firstName + ' ' + lastName, phoneName, usern); + } + if (updUsername) { + if (App::main()) { + App::main()->peerUsernameChanged(this); + } } } @@ -1168,7 +1168,7 @@ HistoryItem *History::createItem(HistoryBlock *block, const MTPmessage &msg, boo case mtpc_messageActionChatEditTitle: { const MTPDmessageActionChatEditTitle &d(action.c_messageActionChatEditTitle()); ChatData *chat = peer->asChat(); - if (chat) chat->updateName(qs(d.vtitle), QString()); + if (chat) chat->updateName(qs(d.vtitle), QString(), QString()); } break; } } @@ -3074,7 +3074,7 @@ void ImageLinkManager::init() { App::setProxySettings(*manager); connect(manager, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(onFailed(QNetworkReply*))); - connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList&errors)), this, SLOT(onFailed(QNetworkReply*))); + connect(manager, SIGNAL(sslErrors(QNetworkReply*, const QList&)), this, SLOT(onFailed(QNetworkReply*))); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*))); if (black) delete black; diff --git a/Telegram/SourceFiles/history.h b/Telegram/SourceFiles/history.h index e7ca3450f8..086d8d75a3 100644 --- a/Telegram/SourceFiles/history.h +++ b/Telegram/SourceFiles/history.h @@ -82,7 +82,7 @@ struct PeerData { ChatData *asChat(); const ChatData *asChat() const; - void updateName(const QString &newName, const QString &newNameOrPhone); + void updateName(const QString &newName, const QString &newNameOrPhone, const QString &newUsername); void fillNames(); diff --git a/Telegram/SourceFiles/historywidget.cpp b/Telegram/SourceFiles/historywidget.cpp index 96d56ff665..f6bda8f1d6 100644 --- a/Telegram/SourceFiles/historywidget.cpp +++ b/Telegram/SourceFiles/historywidget.cpp @@ -1548,7 +1548,7 @@ HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent) connect(&_attachDocument, SIGNAL(clicked()), this, SLOT(onDocumentSelect())); connect(&_attachPhoto, SIGNAL(clicked()), this, SLOT(onPhotoSelect())); connect(&_field, SIGNAL(submitted(bool)), this, SLOT(onSend(bool))); - connect(&_field, SIGNAL(cancelled()), this, SIGNAL(cancelled())); + connect(&_field, SIGNAL(cancelled()), this, SLOT(onCancel())); connect(&_field, SIGNAL(tabbed()), this, SLOT(onFieldTabbed())); connect(&_field, SIGNAL(resized()), this, SLOT(onFieldResize())); connect(&_field, SIGNAL(focused()), this, SLOT(onFieldFocused())); @@ -3161,6 +3161,11 @@ void HistoryWidget::setFieldText(const QString &text) { noTypingUpdate = false; } +void HistoryWidget::onCancel() { + showPeer(0); + emit cancelled(); +} + void HistoryWidget::peerUpdated(PeerData *data) { if (data && data == histPeer) { updateListSize(); diff --git a/Telegram/SourceFiles/historywidget.h b/Telegram/SourceFiles/historywidget.h index 4085fea564..1833c6244d 100644 --- a/Telegram/SourceFiles/historywidget.h +++ b/Telegram/SourceFiles/historywidget.h @@ -343,6 +343,8 @@ signals: public slots: + void onCancel(); + void peerUpdated(PeerData *data); void cancelTyping(); diff --git a/Telegram/SourceFiles/mainwidget.cpp b/Telegram/SourceFiles/mainwidget.cpp index bc77f5a40d..4a54c42f2f 100644 --- a/Telegram/SourceFiles/mainwidget.cpp +++ b/Telegram/SourceFiles/mainwidget.cpp @@ -2252,6 +2252,9 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { if (user) { switch (d.vstatus.type()) { case mtpc_userStatusEmpty: user->onlineTill = 0; break; + case mtpc_userStatusRecently: user->onlineTill = -2; break; + case mtpc_userStatusLastWeek: user->onlineTill = -3; break; + case mtpc_userStatusLastMonth: user->onlineTill = -4; break; case mtpc_userStatusOffline: user->onlineTill = d.vstatus.c_userStatusOffline().vwas_online.v; break; case mtpc_userStatusOnline: user->onlineTill = d.vstatus.c_userStatusOnline().vexpires.v; break; } @@ -2263,8 +2266,12 @@ void MainWidget::feedUpdate(const MTPUpdate &update) { case mtpc_updateUserName: { const MTPDupdateUserName &d(update.c_updateUserName()); UserData *user = App::userLoaded(d.vuser_id.v); - if (user && user->contact <= 0) { - user->setName(textOneLine(qs(d.vfirst_name)), textOneLine(qs(d.vlast_name)), user->nameOrPhone, textOneLine(qs(d.vusername))); + if (user) { + if (user->contact <= 0) { + user->setName(textOneLine(qs(d.vfirst_name)), textOneLine(qs(d.vlast_name)), user->nameOrPhone, textOneLine(qs(d.vusername))); + } else { + user->setName(textOneLine(user->firstName), textOneLine(user->lastName), user->nameOrPhone, textOneLine(qs(d.vusername))); + } if (App::main()) App::main()->peerUpdated(user); } } break; diff --git a/Telegram/SourceFiles/mtproto/generate.py b/Telegram/SourceFiles/mtproto/generate.py index c8b5470c9e..f0015264cf 100644 --- a/Telegram/SourceFiles/mtproto/generate.py +++ b/Telegram/SourceFiles/mtproto/generate.py @@ -177,11 +177,11 @@ with open('scheme.tl') as f: funcsText += '\tMTP' + name + '(' + ', '.join(prmsStr) + ') : ' + ', '.join(prmsInit) + ' {\n\t}\n'; funcsText += '\n'; - funcsText += '\tuint32 size() const {\n'; # count size + funcsText += '\tuint32 innerLength() const {\n'; # count size size = []; for k in prmsList: v = prms[k]; - size.append('v' + k + '.size()'); + size.append('v' + k + '.innerLength()'); if (not len(size)): size.append('0'); funcsText += '\t\treturn ' + ' + '.join(size) + ';\n'; @@ -402,7 +402,7 @@ for restype in typesList: writeText += '\t\t'; readText += '\tv.v' + paramName + '.read(from, end);\n'; writeText += '\tv.v' + paramName + '.write(to);\n'; - sizeList.append('v.v' + paramName + '.size()'); + sizeList.append('v.v' + paramName + '.innerLength()'); forwards += 'class MTPD' + name + ';\n'; # data class forward declaration @@ -505,8 +505,8 @@ for restype in typesList: if (withData): typesText += getters; - typesText += '\n\tuint32 size() const;\n'; # size method - inlineMethods += '\ninline uint32 MTP' + restype + '::size() const {\n'; + typesText += '\n\tuint32 innerLength() const;\n'; # size method + inlineMethods += '\ninline uint32 MTP' + restype + '::innerLength() const {\n'; if (withType and sizeCases): inlineMethods += '\tswitch (_type) {\n'; inlineMethods += sizeCases; diff --git a/Telegram/SourceFiles/mtproto/mtp.cpp b/Telegram/SourceFiles/mtproto/mtp.cpp index a85274a5f8..06ee2b54dc 100644 --- a/Telegram/SourceFiles/mtproto/mtp.cpp +++ b/Telegram/SourceFiles/mtproto/mtp.cpp @@ -350,10 +350,6 @@ namespace _mtp_internal { requestsByDC.remove(requestId); } - uint32 getLayer() { - return layer; - } - mtpRequestId storeRequest(mtpRequest &request, const RPCResponseHandler &parser) { mtpRequestId res = reqid(); request->requestId = res; @@ -379,20 +375,25 @@ namespace _mtp_internal { return req; } - void wrapInvokeAfter(mtpRequest &to, const mtpRequest &from, const mtpRequestMap &haveSent) { + void wrapInvokeAfter(mtpRequest &to, const mtpRequest &from, const mtpRequestMap &haveSent, int32 skipBeforeRequest) { mtpMsgId afterId(*(mtpMsgId*)(from->after->data() + 4)); mtpRequestMap::const_iterator i = afterId ? haveSent.constFind(afterId) : haveSent.cend(); - int32 size = to->size(), len = (*from)[7] >> 2, headlen = 4, fulllen = headlen + len; + int32 size = to->size(), lenInInts = (from.innerLength() >> 2), headlen = 4, fulllen = headlen + lenInInts; if (i == haveSent.constEnd()) { // no invoke after or such msg was not sent or was completed recently - to->resize(size + fulllen); - memcpy(to->data() + size, from->constData() + 4, fulllen * sizeof(mtpPrime)); + to->resize(size + fulllen + skipBeforeRequest); + if (skipBeforeRequest) { + memcpy(to->data() + size, from->constData() + 4, headlen * sizeof(mtpPrime)); + memcpy(to->data() + size + headlen + skipBeforeRequest, from->constData() + 4 + headlen, lenInInts * sizeof(mtpPrime)); + } else { + memcpy(to->data() + size, from->constData() + 4, fulllen * sizeof(mtpPrime)); + } } else { - to->resize(size + fulllen + 3); + to->resize(size + fulllen + skipBeforeRequest + 3); memcpy(to->data() + size, from->constData() + 4, headlen * sizeof(mtpPrime)); (*to)[size + 3] += 3 * sizeof(mtpPrime); - *((mtpTypeId*)&((*to)[size + headlen])) = mtpc_invokeAfterMsg; - memcpy(to->data() + size + headlen + 1, &afterId, 2 * sizeof(mtpPrime)); - memcpy(to->data() + size + headlen + 3, from->constData() + 4 + headlen, len * sizeof(mtpPrime)); + *((mtpTypeId*)&((*to)[size + headlen + skipBeforeRequest])) = mtpc_invokeAfterMsg; + memcpy(to->data() + size + headlen + skipBeforeRequest + 1, &afterId, 2 * sizeof(mtpPrime)); + memcpy(to->data() + size + headlen + skipBeforeRequest + 3, from->constData() + 4 + headlen, lenInInts * sizeof(mtpPrime)); if (size + 3 != 7) (*to)[7] += 3 * sizeof(mtpPrime); } } @@ -624,15 +625,6 @@ namespace MTP { } } - void setLayer(uint32 l) { - if (l > mtpLayerMax) { - l = mtpLayerMax; - } else if (!l) { - l = 1; - } - layer = l - 1; - } - void setdc(int32 dc, bool fromZeroOnly) { if (!started) return; diff --git a/Telegram/SourceFiles/mtproto/mtp.h b/Telegram/SourceFiles/mtproto/mtp.h index 0ac3edef95..ae0f39b2f3 100644 --- a/Telegram/SourceFiles/mtproto/mtp.h +++ b/Telegram/SourceFiles/mtproto/mtp.h @@ -26,13 +26,11 @@ namespace _mtp_internal { void registerRequest(mtpRequestId requestId, int32 dc); void unregisterRequest(mtpRequestId requestId); - uint32 getLayer(); - static const uint32 dcShift = 10000; mtpRequestId storeRequest(mtpRequest &request, const RPCResponseHandler &parser); mtpRequest getRequest(mtpRequestId req); - void wrapInvokeAfter(mtpRequest &to, const mtpRequest &from, const mtpRequestMap &haveSent); + void wrapInvokeAfter(mtpRequest &to, const mtpRequest &from, const mtpRequestMap &haveSent, int32 skipBeforeRequest = 0); void clearCallbacks(mtpRequestId requestId, int32 errorCode = RPCError::NoError); // 0 - do not toggle onError callback void clearCallbacksDelayed(const RPCCallbackClears &requestIds); void performDelayedClear(); @@ -86,8 +84,6 @@ namespace MTP { void restart(); void restart(int32 dcMask); - void setLayer(uint32 layer); - void setdc(int32 dc, bool fromZeroOnly = false); int32 maindc(); int32 dcstate(int32 dc = 0); @@ -98,7 +94,7 @@ namespace MTP { MTProtoSessionPtr session = _mtp_internal::getSession(dc); if (!session) return 0; - return session->send(request, callbacks, msCanWait, _mtp_internal::getLayer(), !dc, after); + return session->send(request, callbacks, msCanWait, true, !dc, after); } template inline mtpRequestId send(const TRequest &request, RPCDoneHandlerPtr onDone, RPCFailHandlerPtr onFail = RPCFailHandlerPtr(), int32 dc = 0, uint64 msCanWait = 0, mtpRequestId after = 0) { diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.cpp b/Telegram/SourceFiles/mtproto/mtpConnection.cpp index 5a33f60c8d..6652f97548 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.cpp +++ b/Telegram/SourceFiles/mtproto/mtpConnection.cpp @@ -473,7 +473,7 @@ namespace { mtpBuffer _preparePQFake(const MTPint128 &nonce) { MTPReq_pq req_pq(nonce); mtpBuffer buffer; - uint32 requestSize = req_pq.size() >> 2; + uint32 requestSize = req_pq.innerLength() >> 2; buffer.resize(0); buffer.reserve(8 + requestSize); @@ -604,7 +604,7 @@ void MTPabstractTcpConnection::socketRead() { } MTPautoConnection::MTPautoConnection(QThread *thread) : status(WaitingBoth), -tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()) { +tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()), _tcpTimeout(1) { moveToThread(thread); manager.moveToThread(thread); @@ -613,6 +613,9 @@ tcpNonce(MTP::nonce()), httpNonce(MTP::nonce()) { httpStartTimer.moveToThread(thread); httpStartTimer.setSingleShot(true); connect(&httpStartTimer, SIGNAL(timeout()), this, SLOT(onHttpStart())); + tcpTimeoutTimer.moveToThread(thread); + tcpTimeoutTimer.setSingleShot(true); + connect(&tcpTimeoutTimer, SIGNAL(timeout()), this, SLOT(onTcpTimeoutTimer())); sock.moveToThread(thread); sock.setProxy(QNetworkProxy(QNetworkProxy::NoProxy)); @@ -627,7 +630,7 @@ void MTPautoConnection::onHttpStart() { if (status == HttpReady) { DEBUG_LOG(("Connection Info: Http-transport chosen by timer")); status = UsingHttp; - sock.disconnect(); + sock.disconnectFromHost(); emit connected(); } } @@ -638,13 +641,37 @@ void MTPautoConnection::onSocketConnected() { DEBUG_LOG(("Connection Info: sending fake req_pq through tcp transport")); + if (_tcpTimeout < 0) _tcpTimeout = -_tcpTimeout; + tcpTimeoutTimer.start(_tcpTimeout * 1000); + tcpSend(buffer); } else if (status == WaitingHttp || status == UsingHttp) { - sock.disconnect(); + sock.disconnectFromHost(); + } +} + +void MTPautoConnection::onTcpTimeoutTimer() { + if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) { + if (_tcpTimeout < 64) _tcpTimeout *= 2; + _tcpTimeout = -_tcpTimeout; + + QAbstractSocket::SocketState state = sock.state(); + if (state == QAbstractSocket::ConnectedState || state == QAbstractSocket::ConnectingState || state == QAbstractSocket::HostLookupState) { + sock.disconnectFromHost(); + } else if (state != QAbstractSocket::ClosingState) { + sock.connectToHost(QHostAddress(_addr), _port); + } } } void MTPautoConnection::onSocketDisconnected() { + if (_tcpTimeout < 0) { + _tcpTimeout = -_tcpTimeout; + if (status == HttpReady || status == WaitingBoth || status == WaitingTcp) { + sock.connectToHost(QHostAddress(_addr), _port); + return; + } + } if (status == WaitingBoth) { status = WaitingHttp; } else if (status == WaitingTcp || status == UsingTcp) { @@ -725,14 +752,17 @@ void MTPautoConnection::connectToServer(const QString &addr, int32 port) { address = QUrl(qsl("http://%1:%2/api").arg(addr).arg(80));//not port - always 80 port for http transport connect(&manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*))); + _addr = addr; + _port = port; + + connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); + sock.connectToHost(QHostAddress(_addr), _port); + mtpBuffer buffer(_preparePQFake(httpNonce)); DEBUG_LOG(("Connection Info: sending fake req_pq through http transport")); httpSend(buffer); - - sock.connectToHost(QHostAddress(addr), port); - connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); } bool MTPautoConnection::isConnected() { @@ -766,7 +796,7 @@ void MTPautoConnection::requestFinished(QNetworkReply *reply) { } else { DEBUG_LOG(("Connection Info: Http-transport chosen by pq-response, awaited")); status = UsingHttp; - sock.disconnect(); + sock.disconnectFromHost(); emit connected(); } } @@ -786,7 +816,7 @@ void MTPautoConnection::requestFinished(QNetworkReply *reply) { return; } - bool mayBeBadKey = _handleHttpError(reply); + bool mayBeBadKey = _handleHttpError(reply) && _sentEncrypted; if (status == WaitingBoth) { status = WaitingTcp; } else if (status == WaitingHttp || status == UsingHttp) { @@ -802,14 +832,15 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { if (data.size() == 1) { if (status == WaitingBoth) { status = WaitingHttp; - sock.disconnect(); + sock.disconnectFromHost(); } else if (status == HttpReady) { DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, ready")); status = UsingHttp; - sock.disconnect(); + sock.disconnectFromHost(); emit connected(); } else if (status == WaitingTcp || status == UsingTcp) { - emit error(data[0] == -404); + bool mayBeBadKey = (data[0] == -404) && _sentEncrypted; + emit error(mayBeBadKey); } else { LOG(("Strange Tcp Error; status %1").arg(status)); } @@ -817,6 +848,7 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { receivedQueue.push_back(data); emit receivedData(); } else if (status == WaitingBoth || status == WaitingTcp || status == HttpReady) { + tcpTimeoutTimer.stop(); try { MTPResPQ res_pq = _readPQFakeReply(data); const MTPDresPQ &res_pq_data(res_pq.c_resPQ()); @@ -828,11 +860,11 @@ void MTPautoConnection::socketPacket(mtpPrime *packet, uint32 size) { } catch (Exception &e) { if (status == WaitingBoth) { status = WaitingHttp; - sock.disconnect(); + sock.disconnectFromHost(); } else if (status == HttpReady) { DEBUG_LOG(("Connection Info: Http-transport chosen by bad tcp response, awaited")); status = UsingHttp; - sock.disconnect(); + sock.disconnectFromHost(); emit connected(); } else { emit error(); @@ -907,14 +939,15 @@ void MTPtcpConnection::disconnectFromServer() { } void MTPtcpConnection::connectToServer(const QString &addr, int32 port) { - sock.connectToHost(QHostAddress(addr), port); connect(&sock, SIGNAL(readyRead()), this, SLOT(socketRead())); + sock.connectToHost(QHostAddress(addr), port); } void MTPtcpConnection::socketPacket(mtpPrime *packet, uint32 size) { mtpBuffer data = _handleTcpResponse(packet, size); if (data.size() == 1) { - emit error(data[0] == -404); + bool mayBeBadKey = (data[0] == -404) && _sentEncrypted; + emit error(mayBeBadKey); } receivedQueue.push_back(data); @@ -1002,7 +1035,7 @@ void MTPhttpConnection::requestFinished(QNetworkReply *reply) { return; } - bool mayBeBadKey = _handleHttpError(reply); + bool mayBeBadKey = _handleHttpError(reply) && _sentEncrypted; emit error(mayBeBadKey); } @@ -1362,6 +1395,7 @@ void MTProtoConnectionPrivate::tryToSend() { return; } + bool needsLayer = !sessionData->layerWasInited(); bool prependOnly = false; mtpRequest pingRequest; if (toSendPingId) { @@ -1370,7 +1404,7 @@ void MTProtoConnectionPrivate::tryToSend() { prependOnly = (getState() != MTProtoConnection::Connected); DEBUG_LOG(("MTP Info: sending ping, ping_id: %1, prepend_only: %2").arg(ping.vping_id.v).arg(prependOnly ? "[TRUE]" : "[FALSE]")); - uint32 pingSize = ping.size() >> 2; // copy from MTProtoSession::send + uint32 pingSize = ping.innerLength() >> 2; // copy from MTProtoSession::send pingRequest = mtpRequestData::prepare(pingSize); ping.write(*pingRequest); @@ -1391,7 +1425,7 @@ void MTProtoConnectionPrivate::tryToSend() { if (!prependOnly && !ackRequestData.isEmpty()) { MTPMsgsAck ack(MTP_msgs_ack(MTP_vector(ackRequestData))); - ackRequest = mtpRequestData::prepare(ack.size() >> 2); + ackRequest = mtpRequestData::prepare(ack.innerLength() >> 2); ack.write(*ackRequest); ackRequest->msDate = getms(true); // > 0 - can send without container @@ -1402,7 +1436,7 @@ void MTProtoConnectionPrivate::tryToSend() { if (!prependOnly && !resendRequestData.isEmpty()) { MTPMsgResendReq resend(MTP_msg_resend_req(MTP_vector(resendRequestData))); - resendRequest = mtpRequestData::prepare(resend.size() >> 2); + resendRequest = mtpRequestData::prepare(resend.innerLength() >> 2); resend.write(*resendRequest); resendRequest->msDate = getms(true); // > 0 - can send without container @@ -1426,7 +1460,7 @@ void MTProtoConnectionPrivate::tryToSend() { if (!stateReq.isEmpty()) { MTPMsgsStateReq req(MTP_msgs_state_req(MTP_vector(stateReq))); - stateRequest = mtpRequestData::prepare(req.size() >> 2); + stateRequest = mtpRequestData::prepare(req.innerLength() >> 2); req.write(*stateRequest); stateRequest->msDate = getms(true); // > 0 - can send without container @@ -1434,6 +1468,14 @@ void MTProtoConnectionPrivate::tryToSend() { } } + MTPInitConnection initWrapperImpl, *initWrapper = &initWrapperImpl; + int32 initSize = 0, initSizeInInts = 0; + if (needsLayer) { + initWrapperImpl = MTPInitConnection(MTP_int(ApiId), MTP_string(cApiDeviceModel()), MTP_string(cApiSystemVersion()), MTP_string(cApiAppVersion()), MTP_string(ApiLang), mtpRequest()); + initSizeInInts = (initWrapper->innerLength() >> 2) + 2; + initSize = initSizeInInts * sizeof(mtpPrime); + } + bool needAnyResponse = false; mtpRequest toSendRequest; { @@ -1473,14 +1515,27 @@ void MTProtoConnectionPrivate::tryToSend() { QWriteLocker locker2(sessionData->haveSentMutex()); mtpRequestMap &haveSent(sessionData->haveSentMap()); haveSent.insert(msgId, toSendRequest); + + if (needsLayer && !toSendRequest->needsLayer) needsLayer = false; if (toSendRequest->after) { - int32 toSendSize = toSendRequest->at(7) >> 2; + int32 toSendSize = toSendRequest.innerLength() >> 2; mtpRequest wrappedRequest(mtpRequestData::prepare(toSendSize, toSendSize + 3)); // cons + msg_id wrappedRequest->resize(4); memcpy(wrappedRequest->data(), toSendRequest->constData(), 4 * sizeof(mtpPrime)); _mtp_internal::wrapInvokeAfter(wrappedRequest, toSendRequest, haveSent); toSendRequest = wrappedRequest; } + if (needsLayer) { + int32 noWrapSize = (toSendRequest.innerLength() >> 2), toSendSize = noWrapSize + initSizeInInts; + mtpRequest wrappedRequest(mtpRequestData::prepare(toSendSize)); + memcpy(wrappedRequest->data(), toSendRequest->constData(), 7 * sizeof(mtpPrime)); // all except length + wrappedRequest->push_back(mtpc_invokeWithLayer); + wrappedRequest->push_back(mtpCurrentLayer); + initWrapper->write(*wrappedRequest); + wrappedRequest->resize(wrappedRequest->size() + noWrapSize); + memcpy(wrappedRequest->data() + wrappedRequest->size() - noWrapSize, toSendRequest->constData() + 8, noWrapSize * sizeof(mtpPrime)); + toSendRequest = wrappedRequest; + } needAnyResponse = true; } else { @@ -1489,6 +1544,7 @@ void MTProtoConnectionPrivate::tryToSend() { } } } else { // send in container + bool willNeedInit = false; uint32 containerSize = 1 + 1, idsWrapSize = (toSendCount << 1); // cons + vector size, idsWrapSize - size of "request-like" wrap for msgId vector if (pingRequest) containerSize += mtpRequestData::messageSize(pingRequest); if (ackRequest) containerSize += mtpRequestData::messageSize(ackRequest); @@ -1496,6 +1552,17 @@ void MTProtoConnectionPrivate::tryToSend() { if (stateRequest) containerSize += mtpRequestData::messageSize(stateRequest); for (mtpPreRequestMap::iterator i = toSend.begin(), e = toSend.end(); i != e; ++i) { containerSize += mtpRequestData::messageSize(i.value()); + if (needsLayer && i.value()->needsLayer) { + containerSize += initSizeInInts; + willNeedInit = true; + } + } + mtpBuffer initSerialized; + if (willNeedInit) { + initSerialized.reserve(initSizeInInts); + initSerialized.push_back(mtpc_invokeWithLayer); + initSerialized.push_back(mtpCurrentLayer); + initWrapper->write(initSerialized); } toSendRequest = mtpRequestData::prepare(containerSize, containerSize + 3 * toSend.size()); // prepare container + each in invoke after toSendRequest->push_back(mtpc_msg_container); @@ -1530,8 +1597,20 @@ void MTProtoConnectionPrivate::tryToSend() { if (req->requestId) { if (mtpRequestData::needAck(req)) { req->msDate = mtpRequestData::isStateRequest(req) ? 0 : getms(true); + int32 reqNeedsLayer = (needsLayer && req->needsLayer) ? toSendRequest->size() : 0; if (req->after) { - _mtp_internal::wrapInvokeAfter(toSendRequest, req, haveSent); + _mtp_internal::wrapInvokeAfter(toSendRequest, req, haveSent, reqNeedsLayer ? initSizeInInts : 0); + if (reqNeedsLayer) { + memcpy(toSendRequest->data() + reqNeedsLayer + 4, initSerialized.constData(), initSize); + *(toSendRequest->data() + reqNeedsLayer + 3) += initSize; + } + added = true; + } else if (reqNeedsLayer) { + toSendRequest->resize(reqNeedsLayer + initSizeInInts + mtpRequestData::messageSize(req)); + memcpy(toSendRequest->data() + reqNeedsLayer, req->constData() + 4, 4 * sizeof(mtpPrime)); + memcpy(toSendRequest->data() + reqNeedsLayer + 4, initSerialized.constData(), initSize); + memcpy(toSendRequest->data() + reqNeedsLayer + 4 + initSizeInInts, req->constData() + 8, req.innerLength()); + *(toSendRequest->data() + reqNeedsLayer + 3) += initSize; added = true; } haveSent.insert(msgId, req); @@ -2329,6 +2408,10 @@ int32 MTProtoConnectionPrivate::handleOneReceived(const mtpPrime *from, const mt response.resize(end - from); memcpy(response.data(), from, (end - from) * sizeof(mtpPrime)); } + if (!sessionData->layerWasInited()) { + sessionData->setLayerWasInited(true); + sessionData->owner()->notifyLayerInited(true); + } mtpRequestId requestId = wasSent(reqMsgId.v); if (requestId && requestId != mtpRequestId(0xFFFFFFFF)) { @@ -2787,7 +2870,7 @@ void MTProtoConnectionPrivate::pqAnswered() { string &dhEncString(req_DH_params.vencrypted_data._string().v); - uint32 p_q_inner_size = p_q_inner.size(), encSize = (p_q_inner_size >> 2) + 6; + uint32 p_q_inner_size = p_q_inner.innerLength(), encSize = (p_q_inner_size >> 2) + 6; if (encSize >= 65) { mtpBuffer tmp; tmp.reserve(encSize); @@ -2854,7 +2937,7 @@ void MTProtoConnectionPrivate::dhParamsAnswered() { return restart(); } - uint32 nlen = authKeyData->new_nonce.size(), slen = authKeyData->server_nonce.size(); + uint32 nlen = authKeyData->new_nonce.innerLength(), slen = authKeyData->server_nonce.innerLength(); uchar tmp_aes[1024], sha1ns[20], sha1sn[20], sha1nn[20]; memcpy(tmp_aes, &authKeyData->new_nonce, nlen); memcpy(tmp_aes + nlen, &authKeyData->server_nonce, slen); @@ -2979,7 +3062,7 @@ void MTProtoConnectionPrivate::dhClientParamsSend() { string &sdhEncString(req_client_DH_params.vencrypted_data._string().v); - uint32 client_dh_inner_size = client_dh_inner.size(), encSize = (client_dh_inner_size >> 2) + 5, encFullSize = encSize; + uint32 client_dh_inner_size = client_dh_inner.innerLength(), encSize = (client_dh_inner_size >> 2) + 5, encFullSize = encSize; if (encSize & 0x03) { encFullSize += 4 - (encSize & 0x03); } @@ -3047,7 +3130,7 @@ void MTProtoConnectionPrivate::dhClientParamsAnswered() { DEBUG_LOG(("AuthKey Info: auth key gen succeed, id: %1, server salt: %2, auth key: %3").arg(authKey->keyId()).arg(serverSalt).arg(mb(authKeyData->auth_key, 256).str())); - sessionData->owner()->keyCreated(authKey); // slot will call authKeyCreated() + sessionData->owner()->notifyKeyCreated(authKey); // slot will call authKeyCreated() sessionData->clear(); unlockKey(); } return; @@ -3146,7 +3229,7 @@ void MTProtoConnectionPrivate::sendPing() { } void MTProtoConnectionPrivate::onError(bool mayBeBadKey) { - MTP_LOG(dc, ("Restarting after error..")); + MTP_LOG(dc, ("Restarting after error, maybe bad key: %1..").arg(logBool(mayBeBadKey))); return restart(mayBeBadKey); } @@ -3157,7 +3240,7 @@ template void MTProtoConnectionPrivate::sendRequestNotSecure(const TRequest &request) { try { mtpBuffer buffer; - uint32 requestSize = request.size() >> 2; + uint32 requestSize = request.innerLength() >> 2; buffer.resize(0); buffer.reserve(8 + requestSize); @@ -3264,6 +3347,7 @@ bool MTProtoConnectionPrivate::sendRequest(mtpRequest &request, bool needAnyResp DEBUG_LOG(("MTP Info: sending request, size: %1, num: %2, time: %3").arg(fullSize + 6).arg((*request)[4]).arg((*request)[5])); + conn->setSentEncrypted(); conn->sendData(result); if (needAnyResponse) { diff --git a/Telegram/SourceFiles/mtproto/mtpConnection.h b/Telegram/SourceFiles/mtproto/mtpConnection.h index b540dbc7b0..313e46e2e9 100644 --- a/Telegram/SourceFiles/mtproto/mtpConnection.h +++ b/Telegram/SourceFiles/mtproto/mtpConnection.h @@ -106,6 +106,13 @@ class MTPabstractConnection : public QObject { public: + MTPabstractConnection() : _sentEncrypted(false) { + } + + void setSentEncrypted() { + _sentEncrypted = true; + } + virtual void sendData(mtpBuffer &buffer) = 0; // has size + 3, buffer[0] = len, buffer[1] = packetnum, buffer[last] = crc32 virtual void disconnectFromServer() = 0; virtual void connectToServer(const QString &addr, int32 port) = 0; @@ -135,6 +142,7 @@ signals: protected: BuffersQueue receivedQueue; // list of received packets, not processed yet + bool _sentEncrypted; }; @@ -189,6 +197,8 @@ public slots: void onSocketDisconnected(); void onHttpStart(); + void onTcpTimeoutTimer(); + protected: void socketPacket(mtpPrime *packet, uint32 packetSize); @@ -215,6 +225,10 @@ private: typedef QSet Requests; Requests requests; + QString _addr; + int32 _port, _tcpTimeout; + QTimer tcpTimeoutTimer; + }; class MTPtcpConnection : public MTPabstractTcpConnection { diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp b/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp index 91fef4707c..503420ac08 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.cpp @@ -172,12 +172,20 @@ void mtpTextSerializeCore(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; default: { - for (uint32 i = 1; i < mtpLayerMax; ++i) { + for (uint32 i = 1; i < mtpLayerMaxSingle; ++i) { if (cons == mtpLayers[i]) { to.add("[LAYER").add(mtpWrapNumber(i + 1)).add("] "); mtpTextSerializeType(to, from, end, 0, level); return; } } + if (cons == mtpc_invokeWithLayer) { + if (from >= end) { + throw Exception("from >= end in invokeWithLayer"); + } + int32 layer = *(from++); + to.add("[LAYER").add(mtpWrapNumber(layer)).add("] "); mtpTextSerializeType(to, from, end, 0, level); + return; + } throw Exception(QString("unknown cons 0x%1").arg(cons, 0, 16)); } break; } diff --git a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h index 116a8be4f4..0a43c1d39a 100644 --- a/Telegram/SourceFiles/mtproto/mtpCoreTypes.h +++ b/Telegram/SourceFiles/mtproto/mtpCoreTypes.h @@ -62,7 +62,7 @@ public: explicit mtpRequest(mtpRequestData *ptr) : QSharedPointer(ptr) { } - uint32 size() const; + uint32 innerLength() const; void write(mtpBuffer &to) const; typedef void ResponseType; // don't know real response type =( @@ -74,10 +74,12 @@ public: // in toSend: = 0 - must send in container, > 0 - can send without container // in haveSent: = 0 - container with msgIds, > 0 - when was sent uint64 msDate; + mtpRequestId requestId; mtpRequest after; + bool needsLayer; - mtpRequestData(bool/* sure*/) : msDate(0), requestId(0) { + mtpRequestData(bool/* sure*/) : msDate(0), requestId(0), needsLayer(false) { } static mtpRequest prepare(uint32 requestSize, uint32 maxSize = 0) { @@ -92,7 +94,7 @@ public: static void padding(mtpRequest &request) { if (request->size() < 9) return; - uint32 requestSize = ((*request)[7] >> 2), padding = _padding(requestSize), fullSize = 8 + requestSize + padding; // 2: salt, 2: session_id, 2: msg_id, 1: seq_no, 1: message_length + uint32 requestSize = (request.innerLength() >> 2), padding = _padding(requestSize), fullSize = 8 + requestSize + padding; // 2: salt, 2: session_id, 2: msg_id, 1: seq_no, 1: message_length if (uint32(request->size()) != fullSize) { request->resize(fullSize); if (padding) { @@ -103,7 +105,7 @@ public: static uint32 messageSize(const mtpRequest &request) { if (request->size() < 9) return 0; - return 4 + ((*request)[7] >> 2); // 2: msg_id, 1: seq_no, q: message_length + return 4 + (request.innerLength() >> 2); // 2: msg_id, 1: seq_no, q: message_length } static bool isSentContainer(const mtpRequest &request); // "request-like" wrap for msgIds vector @@ -119,7 +121,7 @@ private: }; -inline uint32 mtpRequest::size() const { // for template MTP requests and MTPBoxed instanciation +inline uint32 mtpRequest::innerLength() const { // for template MTP requests and MTPBoxed instanciation mtpRequestData *value = data(); if (!value || value->size() < 9) return 0; return value->at(7); @@ -128,7 +130,7 @@ inline uint32 mtpRequest::size() const { // for template MTP requests and MTPBox inline void mtpRequest::write(mtpBuffer &to) const { mtpRequestData *value = data(); if (!value || value->size() < 9) return; - uint32 was = to.size(), s = size() / sizeof(mtpPrime); + uint32 was = to.size(), s = innerLength() / sizeof(mtpPrime); to.resize(was + s); memcpy(to.data() + was, value->constData() + 8, s * sizeof(mtpPrime)); } @@ -335,6 +337,8 @@ enum { mtpc_invokeWithLayer17 = 0x50858a19, mtpc_invokeWithLayer18 = 0x1c900537, + mtpc_invokeWithLayer = 0xda9b0d0d, // after 18 layer + // manually parsed mtpc_rpc_result = 0xf35c6d01, mtpc_msg_container = 0x73f1f8dc, @@ -362,7 +366,8 @@ static const mtpTypeId mtpLayers[] = { mtpc_invokeWithLayer16, mtpc_invokeWithLayer17, mtpc_invokeWithLayer18, -}, mtpLayerMax = sizeof(mtpLayers) / sizeof(mtpLayers[0]); +}, mtpLayerMaxSingle = sizeof(mtpLayers) / sizeof(mtpLayers[0]); +static const mtpPrime mtpCurrentLayer = 19; template class MTPBoxed : public bareT { @@ -386,8 +391,8 @@ public: return *this; } - uint32 size() const { - return sizeof(mtpTypeId) + bareT::size(); + uint32 innerLength() const { + return sizeof(mtpTypeId) + bareT::innerLength(); } void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) { if (from + 1 > end) throw mtpErrorInsufficient(); @@ -414,7 +419,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return sizeof(int32); } mtpTypeId type() const { @@ -457,7 +462,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return sizeof(uint64); } mtpTypeId type() const { @@ -503,7 +508,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return sizeof(uint64) + sizeof(uint64); } mtpTypeId type() const { @@ -552,8 +557,8 @@ public: read(from, end, cons); } - uint32 size() const { - return l.size() + h.size(); + uint32 innerLength() const { + return l.innerLength() + h.innerLength(); } mtpTypeId type() const { return mtpc_int256; @@ -596,7 +601,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return sizeof(float64); } mtpTypeId type() const { @@ -666,7 +671,7 @@ public: return *(const MTPDstring*)data; } - uint32 size() const { + uint32 innerLength() const { uint32 l = c_string().v.length(); if (l < 254) { l += 1; @@ -770,7 +775,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -858,10 +863,10 @@ public: return *(const MTPDvector*)data; } - uint32 size() const { + uint32 innerLength() const { uint32 result(sizeof(uint32)); for (typename VType::const_iterator i = c_vector().v.cbegin(), e = c_vector().v.cend(); i != e; ++i) { - result += i->size(); + result += i->innerLength(); } return result; } @@ -961,8 +966,8 @@ public: return *(const MTPDerror*)data; } - uint32 size() const { - return c_error().vcode.size() + c_error().vtext.size(); + uint32 innerLength() const { + return c_error().vcode.innerLength() + c_error().vtext.innerLength(); } mtpTypeId type() const { return mtpc_error; @@ -999,7 +1004,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { diff --git a/Telegram/SourceFiles/mtproto/mtpDC.cpp b/Telegram/SourceFiles/mtproto/mtpDC.cpp index e7e2c2f75f..ad61522870 100644 --- a/Telegram/SourceFiles/mtproto/mtpDC.cpp +++ b/Telegram/SourceFiles/mtproto/mtpDC.cpp @@ -350,7 +350,7 @@ void mtpSetDC(int32 dc) { } } -MTProtoDC::MTProtoDC(int32 id, const mtpAuthKeyPtr &key) : _id(id), _key(key), _connectionInited(false), _connectionInitSent(false) { +MTProtoDC::MTProtoDC(int32 id, const mtpAuthKeyPtr &key) : _id(id), _key(key), _connectionInited(false) { connect(this, SIGNAL(authKeyCreated()), this, SLOT(authKeyWrite()), Qt::QueuedConnection); QMutexLocker lock(&_keysMapForWriteMutex); @@ -371,6 +371,7 @@ void MTProtoDC::authKeyWrite() { void MTProtoDC::setKey(const mtpAuthKeyPtr &key) { DEBUG_LOG(("AuthKey Info: MTProtoDC::setKey(%1), emitting authKeyCreated, dc %2").arg(key ? key->keyId() : 0).arg(_id)); _key = key; + _connectionInited = false; emit authKeyCreated(); QMutexLocker lock(&_keysMapForWriteMutex); diff --git a/Telegram/SourceFiles/mtproto/mtpDC.h b/Telegram/SourceFiles/mtproto/mtpDC.h index c2421fae05..9fd31d78fe 100644 --- a/Telegram/SourceFiles/mtproto/mtpDC.h +++ b/Telegram/SourceFiles/mtproto/mtpDC.h @@ -29,13 +29,6 @@ public: void setKey(const mtpAuthKeyPtr &key); void destroyKey(); - bool needConnectionInit() { - QMutexLocker lock(&initLock); - if (_connectionInited || _connectionInitSent) return false; - _connectionInitSent = true; - return true; - } - bool connectionInited() const { QMutexLocker lock(&initLock); bool res = _connectionInited; @@ -49,6 +42,7 @@ public: signals: void authKeyCreated(); + void layerWasInited(bool was); private slots: @@ -61,7 +55,6 @@ private: int32 _id; mtpAuthKeyPtr _key; bool _connectionInited; - bool _connectionInitSent; }; typedef QSharedPointer MTProtoDCPtr; diff --git a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp index 75dca6ed94..62d12d9616 100644 --- a/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp +++ b/Telegram/SourceFiles/mtproto/mtpFileLoader.cpp @@ -174,8 +174,7 @@ bool mtpFileLoader::loadPart() { App::app()->killDownloadSessionsStop(dc); } - MTPupload_GetFile request(MTPupload_getFile(loc, MTP_int(offset), MTP_int(limit))); - mtpRequestId reqId = MTP::send(request, rpcDone(&mtpFileLoader::partLoaded, offset), rpcFail(&mtpFileLoader::partFailed), MTP::dld[dcIndex] + dc, 50); + mtpRequestId reqId = MTP::send(MTPupload_GetFile(MTPupload_getFile(loc, MTP_int(offset), MTP_int(limit))), rpcDone(&mtpFileLoader::partLoaded, offset), rpcFail(&mtpFileLoader::partFailed), MTP::dld[dcIndex] + dc, 50); ++queue->queries; dr.v[dcIndex] += limit; diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.cpp b/Telegram/SourceFiles/mtproto/mtpScheme.cpp index d2f2e386e8..d104573cd2 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.cpp +++ b/Telegram/SourceFiles/mtproto/mtpScheme.cpp @@ -51,25 +51,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP int32 lev = level + types.size() - 1; switch (type) { - case mtpc_userProfilePhotoEmpty: - to.add("{ userProfilePhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_userProfilePhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ userProfilePhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photo_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" photo_small: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" photo_big: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - case mtpc_rpc_error: if (stage) { to.add(",\n").addSpaces(lev); @@ -84,1094 +65,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_dh_gen_ok: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ dh_gen_ok"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" new_nonce_hash1: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_dh_gen_retry: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ dh_gen_retry"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" new_nonce_hash2: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_dh_gen_fail: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ dh_gen_fail"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" new_nonce_hash3: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPeerEmpty: - to.add("{ inputPeerEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPeerSelf: - to.add("{ inputPeerSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPeerContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPeerForeign: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerForeign"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPeerChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photoEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photoEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_p_q_inner_data: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ p_q_inner_data"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" pq: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" p: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" new_nonce: "); ++stages.back(); types.push_back(mtpc_int256); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_client_DH_inner_data: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ client_DH_inner_data"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" retry_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" g_b: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_link: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_link"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" my_link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" foreign_link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPhotoCropAuto: - to.add("{ inputPhotoCropAuto }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPhotoCrop: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPhotoCrop"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" crop_left: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" crop_top: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" crop_width: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputFile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputFile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" md5_checksum: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputFileBig: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputFileBig"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionEmpty: - to.add("{ messageActionEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messageActionChatCreate: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionChatCreate"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionChatEditTitle: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionChatEditTitle"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionChatEditPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionChatEditPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionChatDeletePhoto: - to.add("{ messageActionChatDeletePhoto }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messageActionChatAddUser: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionChatAddUser"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionChatDeleteUser: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionChatDeleteUser"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionGeoChatCreate: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageActionGeoChatCreate"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageActionGeoChatCheckin: - to.add("{ messageActionGeoChatCheckin }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterEmpty: - to.add("{ inputMessagesFilterEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterPhotos: - to.add("{ inputMessagesFilterPhotos }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterVideo: - to.add("{ inputMessagesFilterVideo }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterPhotoVideo: - to.add("{ inputMessagesFilterPhotoVideo }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterDocument: - to.add("{ inputMessagesFilterDocument }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMessagesFilterAudio: - to.add("{ inputMessagesFilterAudio }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_help_support: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ help_support"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contactFound: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contactFound"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_future_salts: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ future_salts"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" now: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" salts: "); ++stages.back(); types.push_back(mtpc_vector); vtypes.push_back(mtpc_future_salt); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPhotoEmpty: - to.add("{ inputPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatParticipant: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatParticipant"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" inviter_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_auth_exportedAuthorization: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ auth_exportedAuthorization"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contactStatus: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contactStatus"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" expires: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_new_session_created: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ new_session_created"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" first_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" unique_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" server_salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_located: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_located"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" results: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updatesTooLong: - to.add("{ updatesTooLong }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_updateShortMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updateShortMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updateShortChatMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updateShortChatMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updateShort: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updateShort"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" update: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updatesCombined: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updatesCombined"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" seq_start: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updates: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updates"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_future_salt: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ future_salt"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" valid_since: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" valid_until: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_server_DH_inner_data: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ server_DH_inner_data"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" g: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" dh_prime: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" server_time: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_resPQ: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ resPQ"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" pq: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" server_public_key_fingerprints: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_upload_file: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ upload_file"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" type: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" mtime: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaEmpty: - to.add("{ inputMediaEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputMediaUploadedPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaGeoPoint: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaGeoPoint"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaUploadedVideo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedVideo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaUploadedThumbVideo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedThumbVideo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaVideo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaVideo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaUploadedAudio: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedAudio"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaAudio: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaAudio"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaUploadedDocument: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedDocument"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaUploadedThumbDocument: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaUploadedThumbDocument"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputMediaDocument: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputMediaDocument"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_documentEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ documentEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_document: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ document"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 8: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputEncryptedFileEmpty: - to.add("{ inputEncryptedFileEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputEncryptedFileUploaded: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputEncryptedFileUploaded"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" md5_checksum: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputEncryptedFile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputEncryptedFile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputEncryptedFileBigUploaded: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputEncryptedFileBigUploaded"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_found: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_found"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" results: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputFileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputFileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputVideoFileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputVideoFileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputEncryptedFileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputEncryptedFileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputAudioFileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputAudioFileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputDocumentFileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputDocumentFileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatFull: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatFull"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" participants: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chat_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatParticipantsForbidden: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatParticipantsForbidden"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatParticipants: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatParticipants"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" participants: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_msgs_ack: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ msgs_ack"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_userFull: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ userFull"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" profile_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" blocked: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" real_first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" real_last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_videoEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ videoEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_video: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ video"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 8: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 9: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 10: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 11: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - case mtpc_messageEmpty: if (stage) { to.add(",\n").addSpaces(lev); @@ -1243,236 +136,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_notifyPeer: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ notifyPeer"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_notifyUsers: - to.add("{ notifyUsers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_notifyChats: - to.add("{ notifyChats }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_notifyAll: - to.add("{ notifyAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messages_messageEmpty: - to.add("{ messages_messageEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messages_message: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_message"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPhoneContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPhoneContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" client_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" phone: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_rpc_answer_unknown: - to.add("{ rpc_answer_unknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_rpc_answer_dropped_running: - to.add("{ rpc_answer_dropped_running }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_rpc_answer_dropped: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ rpc_answer_dropped"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" seq_no: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputVideoEmpty: - to.add("{ inputVideoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputVideo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputVideo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geoChatMessageEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessageEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geoChatMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geoChatMessageService: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChatMessageService"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" action: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geoPointEmpty: - to.add("{ geoPointEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_geoPoint: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoPoint"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" long: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" lat: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_dialogs: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_dialogs"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" dialogs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_dialogsSlice: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_dialogsSlice"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" dialogs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_dhConfigNotModified: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_dhConfigNotModified"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" random: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_dhConfig: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_dhConfig"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" g: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" p: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" random: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - case mtpc_peerUser: if (stage) { to.add(",\n").addSpaces(lev); @@ -1499,526 +162,162 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_server_DH_params_fail: + case mtpc_geoPointEmpty: + to.add("{ geoPointEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_geoPoint: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ server_DH_params_fail"); + to.add("{ geoPoint"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" new_nonce_hash: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" long: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" lat: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_server_DH_params_ok: + case mtpc_msg_detailed_info: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ server_DH_params_ok"); + to.add("{ msg_detailed_info"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" encrypted_answer: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" answer_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" status: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_inputAppEvent: + case mtpc_msg_new_detailed_info: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ inputAppEvent"); + to.add("{ msg_new_detailed_info"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" time: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" peer: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" answer_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" status: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_photos_photo: + case mtpc_chatParticipantsForbidden: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ photos_photo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_peerNotifyEventsEmpty: - to.add("{ peerNotifyEventsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_peerNotifyEventsAll: - to.add("{ peerNotifyEventsAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_nearestDc: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ nearestDc"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" country: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" this_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" nearest_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_wallPaper: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ wallPaper"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_wallPaperSolid: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ wallPaperSolid"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" bg_color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_messages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_messages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_messagesSlice: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_messagesSlice"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_blocked: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_blocked"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" blocked: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_blockedSlice: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_blockedSlice"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" blocked: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_statedMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_statedMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_statedMessageLink: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_statedMessageLink"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaEmpty: - to.add("{ messageMediaEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messageMediaPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaVideo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaVideo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" video: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaGeo: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaGeo"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaUnsupported: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaUnsupported"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaDocument: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaDocument"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" document: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messageMediaAudio: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messageMediaAudio"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" audio: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputGeoChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputGeoChat"); + to.add("{ chatParticipantsForbidden"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_help_appUpdate: + case mtpc_chatParticipants: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ help_appUpdate"); + to.add("{ chatParticipants"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" critical: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" url: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" text: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" participants: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_help_noAppUpdate: - to.add("{ help_noAppUpdate }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_updates_differenceEmpty: + case mtpc_contactSuggested: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ updates_differenceEmpty"); + to.add("{ contactSuggested"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" mutual_contacts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_updates_difference: + case mtpc_bad_msg_notification: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ updates_difference"); + to.add("{ bad_msg_notification"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" new_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" new_encrypted_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" other_updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" state: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" bad_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" bad_msg_seqno: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" error_code: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_updates_differenceSlice: + case mtpc_bad_server_salt: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ updates_differenceSlice"); + to.add("{ bad_server_salt"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" new_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" new_encrypted_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" other_updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" intermediate_state: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" bad_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" bad_msg_seqno: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" error_code: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" new_server_salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_msgs_state_info: + case mtpc_videoEmpty: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ msgs_state_info"); + to.add("{ videoEmpty"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" info: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_msgs_state_req: + case mtpc_video: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ msgs_state_req"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_msg_resend_req: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ msg_resend_req"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputDocumentEmpty: - to.add("{ inputDocumentEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputDocument: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputDocument"); + to.add("{ video"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_userStatusEmpty: - to.add("{ userStatusEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_userStatusOnline: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ userStatusOnline"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" expires: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_userStatusOffline: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ userStatusOffline"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" was_online: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photos_photos: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photos_photos"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photos: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photos_photosSlice: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photos_photosSlice"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" photos: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_importedContacts: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_importedContacts"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" imported: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" retry_contacts: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 8: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 9: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 10: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 11: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -2063,356 +362,34 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP to.add("{ sendMessageChooseContactAction }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_fileLocationUnavailable: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ fileLocationUnavailable"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } + case mtpc_rpc_answer_unknown: + to.add("{ rpc_answer_unknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_fileLocation: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ fileLocation"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } + case mtpc_rpc_answer_dropped_running: + to.add("{ rpc_answer_dropped_running }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_photoSizeEmpty: + case mtpc_rpc_answer_dropped: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ photoSizeEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photoSize: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photoSize"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photoCachedSize: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photoCachedSize"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_msg_detailed_info: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ msg_detailed_info"); + to.add("{ rpc_answer_dropped"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" answer_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" seq_no: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; case 2: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" status: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_msg_new_detailed_info: + case mtpc_inputGeoChat: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ msg_new_detailed_info"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" answer_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" status: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputChatPhotoEmpty: - to.add("{ inputChatPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputChatUploadedPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputChatUploadedPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputChatPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputChatPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sentMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sentMessageLink: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentMessageLink"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_chatFull: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_chatFull"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" full_chat: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_statedMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_statedMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatPhotoEmpty: - to.add("{ chatPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_chatPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" photo_small: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" photo_big: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedMessageService: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedMessageService"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_destroy_session_ok: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ destroy_session_ok"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_destroy_session_none: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ destroy_session_none"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_http_wait: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ http_wait"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" max_delay: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" wait_after: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" max_wait: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sentEncryptedMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentEncryptedMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sentEncryptedFile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sentEncryptedFile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_myLinkEmpty: - to.add("{ contacts_myLinkEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_contacts_myLinkRequested: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_myLinkRequested"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" contact: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_myLinkContact: - to.add("{ contacts_myLinkContact }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputEncryptedChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputEncryptedChat"); + to.add("{ inputGeoChat"); to.add("\n").addSpaces(lev); } switch (stage) { @@ -2422,440 +399,49 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messages_chats: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_chats"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } + case mtpc_messages_messageEmpty: + to.add("{ messages_messageEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_encryptedChatEmpty: + case mtpc_messages_message: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ encryptedChatEmpty"); + to.add("{ messages_message"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedChatWaiting: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedChatWaiting"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedChatRequested: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedChatRequested"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" g_a_or_b: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_encryptedChatDiscarded: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ encryptedChatDiscarded"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_messages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_messages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_messages_messagesSlice: + case mtpc_account_privacyRules: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_messagesSlice"); + to.add("{ account_privacyRules"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_auth_checkedPhone: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ auth_checkedPhone"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_registered: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" phone_invited: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contactSuggested: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contactSuggested"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" mutual_contacts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_foreignLinkUnknown: - to.add("{ contacts_foreignLinkUnknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_contacts_foreignLinkRequested: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_foreignLinkRequested"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" has_phone: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_foreignLinkMutual: - to.add("{ contacts_foreignLinkMutual }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputAudioEmpty: - to.add("{ inputAudioEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputAudio: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputAudio"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_contacts: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_contacts"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" rules: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_contacts_contactsNotModified: - to.add("{ contacts_contactsNotModified }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_chatEmpty: + case mtpc_photos_photo: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ chatEmpty"); + to.add("{ photos_photo"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" left: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_chatForbidden: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ chatForbidden"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geoChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geoChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" venue: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 8: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 9: to.add(" checked_in: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 10: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_pong: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ pong"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" ping_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputPeerNotifyEventsEmpty: - to.add("{ inputPeerNotifyEventsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPeerNotifyEventsAll: - to.add("{ inputPeerNotifyEventsAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputPeerNotifySettings: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputPeerNotifySettings"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" mute_until: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" sound: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" show_previews: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" events_mask: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_affectedHistory: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_affectedHistory"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputNotifyPeer: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputNotifyPeer"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputNotifyUsers: - to.add("{ inputNotifyUsers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputNotifyChats: - to.add("{ inputNotifyChats }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputNotifyAll: - to.add("{ inputNotifyAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputNotifyGeoChatPeer: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputNotifyGeoChatPeer"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_bad_msg_notification: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ bad_msg_notification"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" bad_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" bad_msg_seqno: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" error_code: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_bad_server_salt: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ bad_server_salt"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" bad_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" bad_msg_seqno: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" error_code: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" new_server_salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_config: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ config"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" test_mode: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" this_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" dc_options: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" chat_size_max: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" broadcast_size_max: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_inputGeoPointEmpty: - to.add("{ inputGeoPointEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_inputGeoPoint: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ inputGeoPoint"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" lat: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" long: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -2895,32 +481,79 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_dialog: + case mtpc_msg_resend_req: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ dialog"); + to.add("{ msg_resend_req"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" top_message: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_importedContact: + case mtpc_inputFile: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ importedContact"); + to.add("{ inputFile"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" client_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" md5_checksum: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputFileBig: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputFileBig"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_help_inviteText: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_inviteText"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_peerNotifySettingsEmpty: + to.add("{ peerNotifySettingsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_peerNotifySettings: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ peerNotifySettings"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" mute_until: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" sound: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" show_previews: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" events_mask: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -2941,6 +574,138 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_contacts_found: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_found"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" results: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_pong: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ pong"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" ping_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_documentEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ documentEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_document: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ document"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 8: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_resPQ: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ resPQ"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" pq: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" server_public_key_fingerprints: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_msgs_state_req: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ msgs_state_req"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_future_salt: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ future_salt"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" valid_since: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" valid_until: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_destroy_session_ok: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ destroy_session_ok"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_destroy_session_none: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ destroy_session_none"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_updateNewMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -3314,15 +1079,450 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_peerNotifySettingsEmpty: - to.add("{ peerNotifySettingsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_peerNotifySettings: + case mtpc_updatePrivacy: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ peerNotifySettings"); + to.add("{ updatePrivacy"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" key: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" rules: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_myLinkEmpty: + to.add("{ contacts_myLinkEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_contacts_myLinkRequested: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_myLinkRequested"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" contact: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_myLinkContact: + to.add("{ contacts_myLinkContact }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_server_DH_inner_data: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ server_DH_inner_data"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" g: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" dh_prime: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" server_time: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPeerEmpty: + to.add("{ inputPeerEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPeerSelf: + to.add("{ inputPeerSelf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPeerContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPeerForeign: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerForeign"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPeerChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sentEncryptedMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sentEncryptedMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sentEncryptedFile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sentEncryptedFile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_blocked: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_blocked"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" blocked: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_blockedSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_blockedSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" blocked: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photoSizeEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photoSizeEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photoSize: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photoSize"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photoCachedSize: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photoCachedSize"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_upload_file: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ upload_file"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" type: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" mtime: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photos_photos: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photos_photos"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" photos: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photos_photosSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photos_photosSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" photos: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates_state: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updates_state"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_chatFull: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_chatFull"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" full_chat: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedMessageService: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedMessageService"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_authorization: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_authorization"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" expires: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" mutual: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_statedMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_statedMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_importedContacts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_importedContacts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" imported: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" retry_contacts: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_affectedHistory: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_affectedHistory"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPhoneContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPhoneContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" client_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" phone: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_contacts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_contacts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_contactsNotModified: + to.add("{ contacts_contactsNotModified }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_p_q_inner_data: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ p_q_inner_data"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" pq: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" p: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" new_nonce: "); ++stages.back(); types.push_back(mtpc_int256); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPeerNotifySettings: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPeerNotifySettings"); to.add("\n").addSpaces(lev); } switch (stage) { @@ -3334,6 +1534,1546 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_storage_fileUnknown: + to.add("{ storage_fileUnknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileJpeg: + to.add("{ storage_fileJpeg }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileGif: + to.add("{ storage_fileGif }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_filePng: + to.add("{ storage_filePng }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_filePdf: + to.add("{ storage_filePdf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileMp3: + to.add("{ storage_fileMp3 }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileMov: + to.add("{ storage_fileMov }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_filePartial: + to.add("{ storage_filePartial }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileMp4: + to.add("{ storage_fileMp4 }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_storage_fileWebp: + to.add("{ storage_fileWebp }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_geochats_messages: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_messages"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_messagesSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_messagesSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMessagesFilterEmpty: + to.add("{ inputMessagesFilterEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMessagesFilterPhotos: + to.add("{ inputMessagesFilterPhotos }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMessagesFilterVideo: + to.add("{ inputMessagesFilterVideo }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMessagesFilterPhotoVideo: + to.add("{ inputMessagesFilterPhotoVideo }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMessagesFilterDocument: + to.add("{ inputMessagesFilterDocument }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMessagesFilterAudio: + to.add("{ inputMessagesFilterAudio }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_server_DH_params_fail: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ server_DH_params_fail"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" new_nonce_hash: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_server_DH_params_ok: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ server_DH_params_ok"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" encrypted_answer: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_chat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_chat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_help_support: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_support"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contactStatus: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contactStatus"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" status: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_msgs_state_info: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ msgs_state_info"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" info: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_privacyKeyStatusTimestamp: + to.add("{ privacyKeyStatusTimestamp }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messages_statedMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_statedMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_statedMessageLink: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_statedMessageLink"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" message: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPrivacyValueAllowContacts: + to.add("{ inputPrivacyValueAllowContacts }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPrivacyValueAllowAll: + to.add("{ inputPrivacyValueAllowAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPrivacyValueAllowUsers: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPrivacyValueAllowUsers"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPrivacyValueDisallowContacts: + to.add("{ inputPrivacyValueDisallowContacts }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPrivacyValueDisallowAll: + to.add("{ inputPrivacyValueDisallowAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPrivacyValueDisallowUsers: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPrivacyValueDisallowUsers"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contactBlocked: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contactBlocked"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_exportedAuthorization: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_exportedAuthorization"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_dialog: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ dialog"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" top_message: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contactFound: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contactFound"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sentMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sentMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sentMessageLink: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sentMessageLink"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputAudioEmpty: + to.add("{ inputAudioEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputAudio: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputAudio"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_notifyPeer: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ notifyPeer"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_notifyUsers: + to.add("{ notifyUsers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_notifyChats: + to.add("{ notifyChats }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_notifyAll: + to.add("{ notifyAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_encryptedFileEmpty: + to.add("{ encryptedFileEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_encryptedFile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedFile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_accountDaysTTL: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ accountDaysTTL"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" days: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_audioEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ audioEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_audio: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ audio"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_client_DH_inner_data: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ client_DH_inner_data"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" retry_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" g_b: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_userStatusEmpty: + to.add("{ userStatusEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_userStatusOnline: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ userStatusOnline"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" expires: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_userStatusOffline: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ userStatusOffline"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" was_online: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_userStatusRecently: + to.add("{ userStatusRecently }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_userStatusLastWeek: + to.add("{ userStatusLastWeek }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_userStatusLastMonth: + to.add("{ userStatusLastMonth }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_wallPaper: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ wallPaper"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_wallPaperSolid: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ wallPaperSolid"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" bg_color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" color: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photoEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photoEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" sizes: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_link: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_link"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" my_link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" foreign_link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPeerNotifyEventsEmpty: + to.add("{ inputPeerNotifyEventsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPeerNotifyEventsAll: + to.add("{ inputPeerNotifyEventsAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messages_statedMessages: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_statedMessages"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_statedMessagesLinks: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_statedMessagesLinks"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputAppEvent: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputAppEvent"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" time: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" peer: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedChatEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedChatEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedChatWaiting: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedChatWaiting"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedChatRequested: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedChatRequested"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" admin_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" participant_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" g_a_or_b: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_encryptedChatDiscarded: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ encryptedChatDiscarded"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_privacyValueAllowContacts: + to.add("{ privacyValueAllowContacts }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_privacyValueAllowAll: + to.add("{ privacyValueAllowAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_privacyValueAllowUsers: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ privacyValueAllowUsers"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" users: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_privacyValueDisallowContacts: + to.add("{ privacyValueDisallowContacts }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_privacyValueDisallowAll: + to.add("{ privacyValueDisallowAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_privacyValueDisallowUsers: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ privacyValueDisallowUsers"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" users: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputFileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputFileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputVideoFileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputVideoFileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputEncryptedFileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputEncryptedFileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputAudioFileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputAudioFileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputDocumentFileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputDocumentFileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_located: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_located"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" results: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_msgs_all_info: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ msgs_all_info"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; + case 1: to.add(" info: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_foreignLinkUnknown: + to.add("{ contacts_foreignLinkUnknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_contacts_foreignLinkRequested: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_foreignLinkRequested"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" has_phone: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_foreignLinkMutual: + to.add("{ contacts_foreignLinkMutual }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_chatPhotoEmpty: + to.add("{ chatPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_chatPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chatPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" photo_small: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" photo_big: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputDocumentEmpty: + to.add("{ inputDocumentEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputDocument: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputDocument"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputEncryptedChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputEncryptedChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_msgs_ack: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ msgs_ack"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_dh_gen_ok: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ dh_gen_ok"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" new_nonce_hash1: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_dh_gen_retry: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ dh_gen_retry"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" new_nonce_hash2: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_dh_gen_fail: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ dh_gen_fail"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" new_nonce_hash3: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geoChatMessageEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geoChatMessageEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geoChatMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geoChatMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geoChatMessageService: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geoChatMessageService"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" action: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_chatParticipant: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chatParticipant"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" inviter_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_fileLocationUnavailable: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ fileLocationUnavailable"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_fileLocation: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ fileLocation"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" volume_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" local_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" secret: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputEncryptedFileEmpty: + to.add("{ inputEncryptedFileEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputEncryptedFileUploaded: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputEncryptedFileUploaded"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" md5_checksum: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputEncryptedFile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputEncryptedFile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputEncryptedFileBigUploaded: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputEncryptedFileBigUploaded"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" parts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates_differenceEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updates_differenceEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates_difference: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updates_difference"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" new_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" new_encrypted_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" other_updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" state: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates_differenceSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updates_differenceSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" new_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" new_encrypted_messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" other_updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" intermediate_state: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionEmpty: + to.add("{ messageActionEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messageActionChatCreate: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionChatCreate"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionChatEditTitle: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionChatEditTitle"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionChatEditPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionChatEditPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionChatDeletePhoto: + to.add("{ messageActionChatDeletePhoto }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messageActionChatAddUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionChatAddUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionChatDeleteUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionChatDeleteUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionGeoChatCreate: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageActionGeoChatCreate"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageActionGeoChatCheckin: + to.add("{ messageActionGeoChatCheckin }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_new_session_created: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ new_session_created"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" first_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" unique_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" server_salt: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_chatFull: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chatFull"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" participants: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chat_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaEmpty: + to.add("{ messageMediaEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messageMediaPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaVideo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaVideo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" video: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaGeo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaGeo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaUnsupported: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaUnsupported"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaDocument: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaDocument"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" document: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messageMediaAudio: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messageMediaAudio"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" audio: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_peerNotifyEventsEmpty: + to.add("{ peerNotifyEventsEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_peerNotifyEventsAll: + to.add("{ peerNotifyEventsAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messages_dialogs: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_dialogs"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" dialogs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_dialogsSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_dialogsSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" dialogs: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_http_wait: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ http_wait"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" max_delay: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" wait_after: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" max_wait: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_nearestDc: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ nearestDc"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" country: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" this_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" nearest_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_dhConfigNotModified: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_dhConfigNotModified"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" random: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_dhConfig: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_dhConfig"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" g: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" p: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" random: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_future_salts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ future_salts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" now: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" salts: "); ++stages.back(); types.push_back(mtpc_vector); vtypes.push_back(mtpc_future_salt); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_userEmpty: if (stage) { to.add(",\n").addSpaces(lev); @@ -3442,6 +3182,24 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_inputPhotoEmpty: + to.add("{ inputPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_contacts_suggested: if (stage) { to.add(",\n").addSpaces(lev); @@ -3456,30 +3214,201 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_auth_authorization: + case mtpc_inputVideoEmpty: + to.add("{ inputVideoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputVideo: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ auth_authorization"); + to.add("{ inputVideo"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" expires: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_messages_chat: + case mtpc_messages_messages: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_chat"); + to.add("{ messages_messages"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" chat: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_messagesSlice: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_messagesSlice"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputPrivacyKeyStatusTimestamp: + to.add("{ inputPrivacyKeyStatusTimestamp }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_help_appUpdate: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_appUpdate"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" critical: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" url: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" text: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_help_noAppUpdate: + to.add("{ help_noAppUpdate }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputNotifyPeer: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputNotifyPeer"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputNotifyUsers: + to.add("{ inputNotifyUsers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputNotifyChats: + to.add("{ inputNotifyChats }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputNotifyAll: + to.add("{ inputNotifyAll }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputNotifyGeoChatPeer: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputNotifyGeoChatPeer"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_chatEmpty: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chatEmpty"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_chat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" left: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_chatForbidden: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ chatForbidden"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geoChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geoChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" address: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" venue: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" geo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" participants_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 8: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 9: to.add(" checked_in: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 10: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_config: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ config"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" test_mode: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" this_dc: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" dc_options: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" chat_size_max: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" broadcast_size_max: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -3516,137 +3445,363 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_audioEmpty: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ audioEmpty"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } + case mtpc_updatesTooLong: + to.add("{ updatesTooLong }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_audio: + case mtpc_updateShortMessage: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ audio"); + to.add("{ updateShortMessage"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_statedMessages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_statedMessages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; case 3: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_statedMessagesLinks: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_statedMessagesLinks"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" messages: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" links: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_contactBlocked: + case mtpc_updateShortChatMessage: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ contactBlocked"); + to.add("{ updateShortChatMessage"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" from_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updateShort: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updateShort"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" update: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_storage_fileUnknown: - to.add("{ storage_fileUnknown }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileJpeg: - to.add("{ storage_fileJpeg }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileGif: - to.add("{ storage_fileGif }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_filePng: - to.add("{ storage_filePng }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_filePdf: - to.add("{ storage_filePdf }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileMp3: - to.add("{ storage_fileMp3 }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileMov: - to.add("{ storage_fileMov }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_filePartial: - to.add("{ storage_filePartial }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileMp4: - to.add("{ storage_fileMp4 }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_storage_fileWebp: - to.add("{ storage_fileWebp }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_help_inviteText: + case mtpc_updatesCombined: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ help_inviteText"); + to.add("{ updatesCombined"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" seq_start: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ updates"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" updates: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputChatPhotoEmpty: + to.add("{ inputChatPhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputChatUploadedPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputChatUploadedPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputChatPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputChatPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaEmpty: + to.add("{ inputMediaEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputMediaUploadedPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaGeoPoint: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaGeoPoint"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaUploadedVideo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedVideo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaUploadedThumbVideo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedThumbVideo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" w: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" h: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaVideo: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaVideo"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaUploadedAudio: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedAudio"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" duration: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaAudio: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaAudio"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaUploadedDocument: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedDocument"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaUploadedThumbDocument: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaUploadedThumbDocument"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" thumb: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" file_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" mime_type: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_inputMediaDocument: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ inputMediaDocument"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_importedContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ importedContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" client_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_userProfilePhotoEmpty: + to.add("{ userProfilePhotoEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_userProfilePhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ userProfilePhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" photo_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" photo_small: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" photo_big: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_checkedPhone: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_checkedPhone"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_registered: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" phone_invited: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_chats: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_chats"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chats: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -3665,237 +3820,58 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_contact: + case mtpc_inputPhotoCropAuto: + to.add("{ inputPhotoCropAuto }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_inputPhotoCrop: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ contact"); + to.add("{ inputPhotoCrop"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" mutual: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" crop_left: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" crop_top: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" crop_width: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_updates_state: + case mtpc_userFull: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ updates_state"); + to.add("{ userFull"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" seq: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" unread_count: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" user: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" link: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" profile_photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" notify_settings: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" blocked: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" real_first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" real_last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_encryptedFileEmpty: - to.add("{ encryptedFileEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + case mtpc_inputGeoPointEmpty: + to.add("{ inputGeoPointEmpty }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - case mtpc_encryptedFile: + case mtpc_inputGeoPoint: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ encryptedFile"); + to.add("{ inputGeoPoint"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" access_hash: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" size: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_msgs_all_info: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ msgs_all_info"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" msg_ids: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_long); stages.push_back(0); break; - case 1: to.add(" info: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photos_updateProfilePhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photos_updateProfilePhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_getMessages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_getMessages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_getHistory: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_getHistory"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_search: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_search"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" filter: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" min_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" max_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_set_client_DH_params: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ set_client_DH_params"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" encrypted_data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_getStatuses: - to.add("{ contacts_getStatuses }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_auth_checkPhone: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ auth_checkPhone"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_help_getAppUpdate: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ help_getAppUpdate"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updates_getDifference: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ updates_getDifference"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_help_getInviteText: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ help_getInviteText"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_users_getFullUser: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ users_getFullUser"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_updates_getState: - to.add("{ updates_getState }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_contacts_getContacts: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_getContacts"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" lat: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" long: "); ++stages.back(); types.push_back(mtpc_double); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -3988,6 +3964,169 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_contacts_deleteContact: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_deleteContact"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_getStatuses: + to.add("{ contacts_getStatuses }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_rpc_drop_answer: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ rpc_drop_answer"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_getAccountTTL: + to.add("{ account_getAccountTTL }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messages_requestEncryption: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_requestEncryption"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_acceptEncryption: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_acceptEncryption"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" g_b: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_getPrivacy: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ account_getPrivacy"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" key: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_setPrivacy: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ account_setPrivacy"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" key: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" rules: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photos_uploadProfilePhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photos_uploadProfilePhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_getLocated: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_getLocated"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" radius: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_help_getInviteText: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ help_getInviteText"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_getNotifySettings: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ account_getNotifySettings"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_set_client_DH_params: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ set_client_DH_params"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" encrypted_data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_ping: if (stage) { to.add(",\n").addSpaces(lev); @@ -4015,50 +4154,292 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_help_getSupport: - to.add("{ help_getSupport }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messages_readHistory: + case mtpc_req_pq: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_readHistory"); + to.add("{ req_pq"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_getWallPapers: + to.add("{ account_getWallPapers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_destroy_session: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ destroy_session"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_updates_getState: + to.add("{ updates_getState }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_contacts_importContacts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_importContacts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" replace: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sendEncrypted: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sendEncrypted"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sendEncryptedFile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sendEncryptedFile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sendEncryptedService: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sendEncryptedService"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_getDialogs: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_getDialogs"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" read_contents: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_messages_deleteHistory: + case mtpc_help_getNearestDc: + to.add("{ help_getNearestDc }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_auth_exportAuthorization: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_deleteHistory"); + to.add("{ auth_exportAuthorization"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_getDhConfig: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_getDhConfig"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" random_length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_getBlocked: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_getBlocked"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_get_future_salts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ get_future_salts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" num: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_updateProfile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ account_updateProfile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_importCard: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_importCard"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" export_card: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_account_updateUsername: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ account_updateUsername"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" username: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_upload_getFile: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ upload_getFile"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_photos_getUserPhotos: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ photos_getUserPhotos"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_getSuggested: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_getSuggested"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_receivedQueue: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_receivedQueue"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" max_qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_getFullChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_getFullChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_getFullChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_getFullChat"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_search: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_search"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; @@ -4119,6 +4500,69 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_auth_signUp: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_signUp"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" phone_code_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" phone_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_signIn: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_signIn"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" phone_code_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" phone_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_importAuthorization: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_importAuthorization"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_auth_sendCode: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ auth_sendCode"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" sms_type: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" api_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" api_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_users_getUsers: if (stage) { to.add(",\n").addSpaces(lev); @@ -4132,28 +4576,44 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_get_future_salts: + case mtpc_help_getAppUpdate: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ get_future_salts"); + to.add("{ help_getAppUpdate"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" num: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" device_model: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" system_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" app_version: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_photos_getUserPhotos: + case mtpc_messages_getMessages: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ photos_getUserPhotos"); + to.add("{ messages_getMessages"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_getHistory: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_getHistory"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; @@ -4161,6 +4621,260 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; + case mtpc_messages_search: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_search"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" filter: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" min_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" max_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_getContacts: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_getContacts"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_getRecents: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_getRecents"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_search: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_search"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" filter: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" min_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" max_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 6: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 7: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_geochats_getHistory: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ geochats_getHistory"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_req_DH_params: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ req_DH_params"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" p: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 4: to.add(" public_key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 5: to.add(" encrypted_data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_help_getConfig: + to.add("{ help_getConfig }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_help_getSupport: + to.add("{ help_getSupport }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); + break; + + case mtpc_messages_readHistory: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_readHistory"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 3: to.add(" read_contents: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_deleteHistory: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_deleteHistory"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_sendMedia: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_sendMedia"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_editChatTitle: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_editChatTitle"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_editChatPhoto: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_editChatPhoto"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_addChatUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_addChatUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" fwd_limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_deleteChatUser: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_deleteChatUser"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_createChat: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_createChat"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_messages_forwardMessage: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ messages_forwardMessage"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + + case mtpc_contacts_search: + if (stage) { + to.add(",\n").addSpaces(lev); + } else { + to.add("{ contacts_search"); + to.add("\n").addSpaces(lev); + } + switch (stage) { + case 0: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; + } + break; + case mtpc_register_saveDeveloperInfo: if (stage) { to.add(",\n").addSpaces(lev); @@ -4473,357 +5187,100 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_req_pq: + case mtpc_account_deleteAccount: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ req_pq"); + to.add("{ account_deleteAccount"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" reason: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_auth_exportAuthorization: + case mtpc_account_setAccountTTL: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ auth_exportAuthorization"); + to.add("{ account_setAccountTTL"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" dc_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" ttl: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_contacts_importContacts: + case mtpc_updates_getDifference: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ contacts_importContacts"); + to.add("{ updates_getDifference"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" replace: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" pts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_rpc_drop_answer: + case mtpc_photos_updateProfilePhoto: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ rpc_drop_answer"); + to.add("{ photos_updateProfilePhoto"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" req_msg_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_help_getConfig: - to.add("{ help_getConfig }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messages_getDialogs: + case mtpc_auth_checkPhone: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_getDialogs"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_account_getNotifySettings: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ account_getNotifySettings"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_getLocated: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getLocated"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" radius: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_getDhConfig: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_getDhConfig"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" version: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" random_length: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_account_updateProfile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ account_updateProfile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_importCard: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_importCard"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" export_card: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_account_updateUsername: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ account_updateUsername"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" username: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_getFullChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_getFullChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_getFullChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getFullChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_req_DH_params: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ req_DH_params"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" server_nonce: "); ++stages.back(); types.push_back(mtpc_int128); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" p: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" public_key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" encrypted_data: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_getSuggested: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_getSuggested"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_auth_signUp: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ auth_signUp"); + to.add("{ auth_checkPhone"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" phone_code_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" phone_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" first_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" last_name: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_auth_signIn: + case mtpc_messages_getChats: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ auth_signIn"); + to.add("{ messages_getChats"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" phone_code_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" phone_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_auth_importAuthorization: + case mtpc_users_getFullUser: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ auth_importAuthorization"); + to.add("{ users_getFullUser"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" bytes: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_upload_getFile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ upload_getFile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" location: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_photos_uploadProfilePhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ photos_uploadProfilePhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" caption: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" geo_point: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" crop: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_auth_sendCode: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ auth_sendCode"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" phone_number: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" sms_type: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" api_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" api_hash: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" lang_code: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_forwardMessages: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_forwardMessages"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sendBroadcast: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sendBroadcast"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_receivedQueue: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_receivedQueue"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" max_qts: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_help_getNearestDc: - to.add("{ help_getNearestDc }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - case mtpc_messages_sendMessage: if (stage) { to.add(",\n").addSpaces(lev); @@ -4839,146 +5296,6 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_geochats_getRecents: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getRecents"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_search: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_search"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" q: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" filter: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" min_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 4: to.add(" max_date: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 5: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 6: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 7: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_geochats_getHistory: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ geochats_getHistory"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" max_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_destroy_session: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ destroy_session"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" session_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_account_getWallPapers: - to.add("{ account_getWallPapers }"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); - break; - - case mtpc_messages_sendEncrypted: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sendEncrypted"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sendEncryptedFile: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sendEncryptedFile"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - case 3: to.add(" file: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sendEncryptedService: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sendEncryptedService"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" data: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_getBlocked: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_getBlocked"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" offset: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_contacts_deleteContact: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ contacts_deleteContact"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - case mtpc_invokeAfterMsg: if (stage) { to.add(",\n").addSpaces(lev); @@ -5025,146 +5342,31 @@ void mtpTextSerializeType(MTPStringLogger &to, const mtpPrime *&from, const mtpP } break; - case mtpc_messages_getChats: + case mtpc_messages_forwardMessages: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_getChats"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_sendMedia: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_sendMedia"); + to.add("{ messages_forwardMessages"); to.add("\n").addSpaces(lev); } switch (stage) { case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" id: "); ++stages.back(); types.push_back(0); vtypes.push_back(mtpc_int); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; - case mtpc_messages_editChatTitle: + case mtpc_messages_sendBroadcast: if (stage) { to.add(",\n").addSpaces(lev); } else { - to.add("{ messages_editChatTitle"); + to.add("{ messages_sendBroadcast"); to.add("\n").addSpaces(lev); } switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_editChatPhoto: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_editChatPhoto"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" photo: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_addChatUser: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_addChatUser"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" fwd_limit: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_deleteChatUser: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_deleteChatUser"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" chat_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_createChat: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_createChat"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" users: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" title: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_forwardMessage: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_forwardMessage"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_requestEncryption: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_requestEncryption"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" user_id: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" random_id: "); ++stages.back(); types.push_back(mtpc_int); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" g_a: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; - } - break; - - case mtpc_messages_acceptEncryption: - if (stage) { - to.add(",\n").addSpaces(lev); - } else { - to.add("{ messages_acceptEncryption"); - to.add("\n").addSpaces(lev); - } - switch (stage) { - case 0: to.add(" peer: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; - case 1: to.add(" g_b: "); ++stages.back(); types.push_back(mtpc_bytes); vtypes.push_back(0); stages.push_back(0); break; - case 2: to.add(" key_fingerprint: "); ++stages.back(); types.push_back(mtpc_long); vtypes.push_back(0); stages.push_back(0); break; + case 0: to.add(" contacts: "); ++stages.back(); types.push_back(00); vtypes.push_back(0); stages.push_back(0); break; + case 1: to.add(" message: "); ++stages.back(); types.push_back(mtpc_string); vtypes.push_back(0); stages.push_back(0); break; + case 2: to.add(" media: "); ++stages.back(); types.push_back(0); vtypes.push_back(0); stages.push_back(0); break; default: to.add("}"); types.pop_back(); vtypes.pop_back(); stages.pop_back(); break; } break; diff --git a/Telegram/SourceFiles/mtproto/mtpScheme.h b/Telegram/SourceFiles/mtproto/mtpScheme.h index 888be883a2..414934e4a8 100644 --- a/Telegram/SourceFiles/mtproto/mtpScheme.h +++ b/Telegram/SourceFiles/mtproto/mtpScheme.h @@ -178,7 +178,7 @@ enum { mtpc_importedContact = 0xd0028438, mtpc_contactBlocked = 0x561bc879, mtpc_contactSuggested = 0x3de191a1, - mtpc_contactStatus = 0xaa77b873, + mtpc_contactStatus = 0xd3680c61, mtpc_chatLocated = 0x3631cf4c, mtpc_contacts_foreignLinkUnknown = 0x133421f8, mtpc_contacts_foreignLinkRequested = 0xa7801f47, @@ -329,6 +329,26 @@ enum { mtpc_contactFound = 0xea879f95, mtpc_contacts_found = 0x566000e, mtpc_updateServiceNotification = 0x382dd3e4, + mtpc_userStatusRecently = 0xe26f42f1, + mtpc_userStatusLastWeek = 0x7bf09fc, + mtpc_userStatusLastMonth = 0x77ebc742, + mtpc_updatePrivacy = 0xee3b272a, + mtpc_inputPrivacyKeyStatusTimestamp = 0x4f96cb18, + mtpc_privacyKeyStatusTimestamp = 0xbc2eab30, + mtpc_inputPrivacyValueAllowContacts = 0xd09e07b, + mtpc_inputPrivacyValueAllowAll = 0x184b35ce, + mtpc_inputPrivacyValueAllowUsers = 0x131cc67f, + mtpc_inputPrivacyValueDisallowContacts = 0xba52007, + mtpc_inputPrivacyValueDisallowAll = 0xd66b66c9, + mtpc_inputPrivacyValueDisallowUsers = 0x90110467, + mtpc_privacyValueAllowContacts = 0xfffe1bac, + mtpc_privacyValueAllowAll = 0x65427b82, + mtpc_privacyValueAllowUsers = 0x4d5bbe0c, + mtpc_privacyValueDisallowContacts = 0xf888fa1a, + mtpc_privacyValueDisallowAll = 0x8b73e763, + mtpc_privacyValueDisallowUsers = 0xc7f49b7, + mtpc_account_privacyRules = 0x554abb6f, + mtpc_accountDaysTTL = 0xb8d0afdf, mtpc_invokeAfterMsg = 0xcb9f372d, mtpc_invokeAfterMsgs = 0x3dc4b4f0, mtpc_auth_checkPhone = 0x6fe51dfb, @@ -426,7 +446,12 @@ enum { mtpc_messages_readMessageContents = 0x354b5bc2, mtpc_account_checkUsername = 0x2714d86c, mtpc_account_updateUsername = 0x3e0bdd7c, - mtpc_contacts_search = 0x11f812d8 + mtpc_contacts_search = 0x11f812d8, + mtpc_account_getPrivacy = 0xdadbc950, + mtpc_account_setPrivacy = 0xc9f81ce8, + mtpc_account_deleteAccount = 0x418d4e0b, + mtpc_account_getAccountTTL = 0x8fc711d, + mtpc_account_setAccountTTL = 0x2442485e }; // Type forward declarations @@ -779,6 +804,7 @@ class MTPDupdateDcOptions; class MTPDupdateUserBlocked; class MTPDupdateNotifySettings; class MTPDupdateServiceNotification; +class MTPDupdatePrivacy; class MTPupdates_state; class MTPDupdates_state; @@ -896,6 +922,24 @@ class MTPDcontactFound; class MTPcontacts_found; class MTPDcontacts_found; +class MTPinputPrivacyKey; + +class MTPprivacyKey; + +class MTPinputPrivacyRule; +class MTPDinputPrivacyValueAllowUsers; +class MTPDinputPrivacyValueDisallowUsers; + +class MTPprivacyRule; +class MTPDprivacyValueAllowUsers; +class MTPDprivacyValueDisallowUsers; + +class MTPaccount_privacyRules; +class MTPDaccount_privacyRules; + +class MTPaccountDaysTTL; +class MTPDaccountDaysTTL; + // Boxed types definitions typedef MTPBoxed MTPResPQ; @@ -1018,6 +1062,12 @@ typedef MTPBoxed MTPNotifyPeer; typedef MTPBoxed MTPSendMessageAction; typedef MTPBoxed MTPContactFound; typedef MTPBoxed MTPcontacts_Found; +typedef MTPBoxed MTPInputPrivacyKey; +typedef MTPBoxed MTPPrivacyKey; +typedef MTPBoxed MTPInputPrivacyRule; +typedef MTPBoxed MTPPrivacyRule; +typedef MTPBoxed MTPaccount_PrivacyRules; +typedef MTPBoxed MTPAccountDaysTTL; // Type classes definitions @@ -1038,7 +1088,7 @@ public: return *(const MTPDresPQ*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_resPQ); void write(mtpBuffer &to) const; @@ -1069,7 +1119,7 @@ public: return *(const MTPDp_q_inner_data*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_p_q_inner_data); void write(mtpBuffer &to) const; @@ -1115,7 +1165,7 @@ public: return *(const MTPDserver_DH_params_ok*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1151,7 +1201,7 @@ public: return *(const MTPDserver_DH_inner_data*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_server_DH_inner_data); void write(mtpBuffer &to) const; @@ -1182,7 +1232,7 @@ public: return *(const MTPDclient_DH_inner_data*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_client_DH_inner_data); void write(mtpBuffer &to) const; @@ -1240,7 +1290,7 @@ public: return *(const MTPDdh_gen_fail*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1278,7 +1328,7 @@ public: return *(const MTPDmsgs_ack*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_msgs_ack); void write(mtpBuffer &to) const; @@ -1324,7 +1374,7 @@ public: return *(const MTPDbad_server_salt*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1360,7 +1410,7 @@ public: return *(const MTPDmsgs_state_req*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_msgs_state_req); void write(mtpBuffer &to) const; @@ -1391,7 +1441,7 @@ public: return *(const MTPDmsgs_state_info*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_msgs_state_info); void write(mtpBuffer &to) const; @@ -1422,7 +1472,7 @@ public: return *(const MTPDmsgs_all_info*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_msgs_all_info); void write(mtpBuffer &to) const; @@ -1468,7 +1518,7 @@ public: return *(const MTPDmsg_new_detailed_info*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1504,7 +1554,7 @@ public: return *(const MTPDmsg_resend_req*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_msg_resend_req); void write(mtpBuffer &to) const; @@ -1535,7 +1585,7 @@ public: return *(const MTPDrpc_error*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_rpc_error); void write(mtpBuffer &to) const; @@ -1569,7 +1619,7 @@ public: return *(const MTPDrpc_answer_dropped*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1605,7 +1655,7 @@ public: return *(const MTPDfuture_salt*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_future_salt); void write(mtpBuffer &to) const; @@ -1636,7 +1686,7 @@ public: return *(const MTPDfuture_salts*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_future_salts); void write(mtpBuffer &to) const; @@ -1667,7 +1717,7 @@ public: return *(const MTPDpong*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_pong); void write(mtpBuffer &to) const; @@ -1713,7 +1763,7 @@ public: return *(const MTPDdestroy_session_none*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1749,7 +1799,7 @@ public: return *(const MTPDnew_session_created*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_new_session_created); void write(mtpBuffer &to) const; @@ -1780,7 +1830,7 @@ public: return *(const MTPDhttp_wait*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_http_wait); void write(mtpBuffer &to) const; @@ -1838,7 +1888,7 @@ public: return *(const MTPDinputPeerChat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1893,7 +1943,7 @@ public: return *(const MTPDinputUserForeign*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -1931,7 +1981,7 @@ public: return *(const MTPDinputPhoneContact*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputPhoneContact); void write(mtpBuffer &to) const; @@ -1977,7 +2027,7 @@ public: return *(const MTPDinputFileBig*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2148,7 +2198,7 @@ public: return *(const MTPDinputMediaDocument*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2220,7 +2270,7 @@ public: return *(const MTPDinputChatPhoto*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2260,7 +2310,7 @@ public: return *(const MTPDinputGeoPoint*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2298,7 +2348,7 @@ public: return *(const MTPDinputPhoto*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2336,7 +2386,7 @@ public: return *(const MTPDinputVideo*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2422,7 +2472,7 @@ public: return *(const MTPDinputDocumentFileLocation*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2467,7 +2517,7 @@ public: return *(const MTPDinputPhotoCrop*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2502,7 +2552,7 @@ public: return *(const MTPDinputAppEvent*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputAppEvent); void write(mtpBuffer &to) const; @@ -2548,7 +2598,7 @@ public: return *(const MTPDpeerChat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2575,7 +2625,7 @@ public: read(from, end, cons); } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2632,7 +2682,7 @@ public: return *(const MTPDfileLocation*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2731,7 +2781,7 @@ public: return *(const MTPDuserDeleted*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2778,7 +2828,7 @@ public: return *(const MTPDuserProfilePhoto*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2828,7 +2878,7 @@ public: return *(const MTPDuserStatusOffline*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2843,6 +2893,9 @@ private: friend MTPuserStatus MTP_userStatusEmpty(); friend MTPuserStatus MTP_userStatusOnline(MTPint _expires); friend MTPuserStatus MTP_userStatusOffline(MTPint _was_online); + friend MTPuserStatus MTP_userStatusRecently(); + friend MTPuserStatus MTP_userStatusLastWeek(); + friend MTPuserStatus MTP_userStatusLastMonth(); mtpTypeId _type; }; @@ -2904,7 +2957,7 @@ public: return *(const MTPDgeoChat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -2944,7 +2997,7 @@ public: return *(const MTPDchatFull*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_chatFull); void write(mtpBuffer &to) const; @@ -2975,7 +3028,7 @@ public: return *(const MTPDchatParticipant*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_chatParticipant); void write(mtpBuffer &to) const; @@ -3021,7 +3074,7 @@ public: return *(const MTPDchatParticipants*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3060,7 +3113,7 @@ public: return *(const MTPDchatPhoto*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3134,7 +3187,7 @@ public: return *(const MTPDmessageService*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3249,7 +3302,7 @@ public: return *(const MTPDmessageMediaAudio*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3359,7 +3412,7 @@ public: return *(const MTPDmessageActionGeoChatCreate*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3406,7 +3459,7 @@ public: return *(const MTPDdialog*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_dialog); void write(mtpBuffer &to) const; @@ -3452,7 +3505,7 @@ public: return *(const MTPDphoto*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3515,7 +3568,7 @@ public: return *(const MTPDphotoCachedSize*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3568,7 +3621,7 @@ public: return *(const MTPDvideo*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3607,7 +3660,7 @@ public: return *(const MTPDgeoPoint*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3642,7 +3695,7 @@ public: return *(const MTPDauth_checkedPhone*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_checkedPhone); void write(mtpBuffer &to) const; @@ -3688,7 +3741,7 @@ public: return *(const MTPDauth_sentAppCode*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3724,7 +3777,7 @@ public: return *(const MTPDauth_authorization*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_authorization); void write(mtpBuffer &to) const; @@ -3755,7 +3808,7 @@ public: return *(const MTPDauth_exportedAuthorization*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_auth_exportedAuthorization); void write(mtpBuffer &to) const; @@ -3801,7 +3854,7 @@ public: return *(const MTPDinputNotifyGeoChatPeer*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3831,7 +3884,7 @@ public: read(from, end, cons); } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3865,7 +3918,7 @@ public: return *(const MTPDinputPeerNotifySettings*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputPeerNotifySettings); void write(mtpBuffer &to) const; @@ -3887,7 +3940,7 @@ public: read(from, end, cons); } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3924,7 +3977,7 @@ public: return *(const MTPDpeerNotifySettings*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -3974,7 +4027,7 @@ public: return *(const MTPDwallPaperSolid*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4010,7 +4063,7 @@ public: return *(const MTPDuserFull*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_userFull); void write(mtpBuffer &to) const; @@ -4041,7 +4094,7 @@ public: return *(const MTPDcontact*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contact); void write(mtpBuffer &to) const; @@ -4072,7 +4125,7 @@ public: return *(const MTPDimportedContact*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_importedContact); void write(mtpBuffer &to) const; @@ -4103,7 +4156,7 @@ public: return *(const MTPDcontactBlocked*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contactBlocked); void write(mtpBuffer &to) const; @@ -4134,7 +4187,7 @@ public: return *(const MTPDcontactSuggested*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contactSuggested); void write(mtpBuffer &to) const; @@ -4165,7 +4218,7 @@ public: return *(const MTPDcontactStatus*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contactStatus); void write(mtpBuffer &to) const; @@ -4175,7 +4228,7 @@ public: private: explicit MTPcontactStatus(MTPDcontactStatus *_data); - friend MTPcontactStatus MTP_contactStatus(MTPint _user_id, MTPint _expires); + friend MTPcontactStatus MTP_contactStatus(MTPint _user_id, const MTPUserStatus &_status); }; typedef MTPBoxed MTPContactStatus; @@ -4196,7 +4249,7 @@ public: return *(const MTPDchatLocated*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_chatLocated); void write(mtpBuffer &to) const; @@ -4230,7 +4283,7 @@ public: return *(const MTPDcontacts_foreignLinkRequested*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4269,7 +4322,7 @@ public: return *(const MTPDcontacts_myLinkRequested*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4305,7 +4358,7 @@ public: return *(const MTPDcontacts_link*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_link); void write(mtpBuffer &to) const; @@ -4339,7 +4392,7 @@ public: return *(const MTPDcontacts_contacts*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4374,7 +4427,7 @@ public: return *(const MTPDcontacts_importedContacts*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_importedContacts); void write(mtpBuffer &to) const; @@ -4420,7 +4473,7 @@ public: return *(const MTPDcontacts_blockedSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4456,7 +4509,7 @@ public: return *(const MTPDcontacts_suggested*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_suggested); void write(mtpBuffer &to) const; @@ -4502,7 +4555,7 @@ public: return *(const MTPDmessages_dialogsSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4553,7 +4606,7 @@ public: return *(const MTPDmessages_messagesSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4592,7 +4645,7 @@ public: return *(const MTPDmessages_message*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4642,7 +4695,7 @@ public: return *(const MTPDmessages_statedMessagesLinks*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4693,7 +4746,7 @@ public: return *(const MTPDmessages_statedMessageLink*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4744,7 +4797,7 @@ public: return *(const MTPDmessages_sentMessageLink*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -4780,7 +4833,7 @@ public: return *(const MTPDmessages_chat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_chat); void write(mtpBuffer &to) const; @@ -4811,7 +4864,7 @@ public: return *(const MTPDmessages_chats*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_chats); void write(mtpBuffer &to) const; @@ -4842,7 +4895,7 @@ public: return *(const MTPDmessages_chatFull*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_chatFull); void write(mtpBuffer &to) const; @@ -4873,7 +4926,7 @@ public: return *(const MTPDmessages_affectedHistory*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_messages_affectedHistory); void write(mtpBuffer &to) const; @@ -4895,7 +4948,7 @@ public: read(from, end, cons); } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5236,7 +5289,19 @@ public: return *(const MTPDupdateServiceNotification*)data; } - uint32 size() const; + MTPDupdatePrivacy &_updatePrivacy() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_updatePrivacy) throw mtpErrorWrongTypeId(_type, mtpc_updatePrivacy); + split(); + return *(MTPDupdatePrivacy*)data; + } + const MTPDupdatePrivacy &c_updatePrivacy() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_updatePrivacy) throw mtpErrorWrongTypeId(_type, mtpc_updatePrivacy); + return *(const MTPDupdatePrivacy*)data; + } + + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5271,6 +5336,7 @@ private: explicit MTPupdate(MTPDupdateUserBlocked *_data); explicit MTPupdate(MTPDupdateNotifySettings *_data); explicit MTPupdate(MTPDupdateServiceNotification *_data); + explicit MTPupdate(MTPDupdatePrivacy *_data); friend MTPupdate MTP_updateNewMessage(const MTPMessage &_message, MTPint _pts); friend MTPupdate MTP_updateMessageID(MTPint _id, const MTPlong &_random_id); @@ -5298,6 +5364,7 @@ private: friend MTPupdate MTP_updateUserBlocked(MTPint _user_id, MTPBool _blocked); friend MTPupdate MTP_updateNotifySettings(const MTPNotifyPeer &_peer, const MTPPeerNotifySettings &_notify_settings); friend MTPupdate MTP_updateServiceNotification(const MTPstring &_type, const MTPstring &_message, const MTPMessageMedia &_media, MTPBool _popup); + friend MTPupdate MTP_updatePrivacy(const MTPPrivacyKey &_key, const MTPVector &_rules); mtpTypeId _type; }; @@ -5320,7 +5387,7 @@ public: return *(const MTPDupdates_state*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_updates_state); void write(mtpBuffer &to) const; @@ -5378,7 +5445,7 @@ public: return *(const MTPDupdates_differenceSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5467,7 +5534,7 @@ public: return *(const MTPDupdates*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5525,7 +5592,7 @@ public: return *(const MTPDphotos_photosSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5561,7 +5628,7 @@ public: return *(const MTPDphotos_photo*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_photos_photo); void write(mtpBuffer &to) const; @@ -5592,7 +5659,7 @@ public: return *(const MTPDupload_file*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_upload_file); void write(mtpBuffer &to) const; @@ -5623,7 +5690,7 @@ public: return *(const MTPDdcOption*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_dcOption); void write(mtpBuffer &to) const; @@ -5654,7 +5721,7 @@ public: return *(const MTPDconfig*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_config); void write(mtpBuffer &to) const; @@ -5685,7 +5752,7 @@ public: return *(const MTPDnearestDc*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_nearestDc); void write(mtpBuffer &to) const; @@ -5719,7 +5786,7 @@ public: return *(const MTPDhelp_appUpdate*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5754,7 +5821,7 @@ public: return *(const MTPDhelp_inviteText*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_inviteText); void write(mtpBuffer &to) const; @@ -5785,7 +5852,7 @@ public: return *(const MTPDinputGeoChat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputGeoChat); void write(mtpBuffer &to) const; @@ -5843,7 +5910,7 @@ public: return *(const MTPDgeoChatMessageService*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -5881,7 +5948,7 @@ public: return *(const MTPDgeochats_statedMessage*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_statedMessage); void write(mtpBuffer &to) const; @@ -5912,7 +5979,7 @@ public: return *(const MTPDgeochats_located*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_geochats_located); void write(mtpBuffer &to) const; @@ -5958,7 +6025,7 @@ public: return *(const MTPDgeochats_messagesSlice*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6045,7 +6112,7 @@ public: return *(const MTPDencryptedChatDiscarded*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6087,7 +6154,7 @@ public: return *(const MTPDinputEncryptedChat*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputEncryptedChat); void write(mtpBuffer &to) const; @@ -6121,7 +6188,7 @@ public: return *(const MTPDencryptedFile*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6183,7 +6250,7 @@ public: return *(const MTPDinputEncryptedFileBigUploaded*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6237,7 +6304,7 @@ public: return *(const MTPDencryptedMessageService*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6288,7 +6355,7 @@ public: return *(const MTPDmessages_dhConfig*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6339,7 +6406,7 @@ public: return *(const MTPDmessages_sentEncryptedFile*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6378,7 +6445,7 @@ public: return *(const MTPDinputAudio*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6416,7 +6483,7 @@ public: return *(const MTPDinputDocument*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6466,7 +6533,7 @@ public: return *(const MTPDaudio*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6517,7 +6584,7 @@ public: return *(const MTPDdocument*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6553,7 +6620,7 @@ public: return *(const MTPDhelp_support*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_help_support); void write(mtpBuffer &to) const; @@ -6587,7 +6654,7 @@ public: return *(const MTPDnotifyPeer*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6615,7 +6682,7 @@ public: read(from, end, cons); } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); void write(mtpBuffer &to) const; @@ -6657,7 +6724,7 @@ public: return *(const MTPDcontactFound*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contactFound); void write(mtpBuffer &to) const; @@ -6688,7 +6755,7 @@ public: return *(const MTPDcontacts_found*)data; } - uint32 size() const; + uint32 innerLength() const; mtpTypeId type() const; void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_contacts_found); void write(mtpBuffer &to) const; @@ -6702,6 +6769,220 @@ private: }; typedef MTPBoxed MTPcontacts_Found; +class MTPinputPrivacyKey { +public: + MTPinputPrivacyKey() { + } + MTPinputPrivacyKey(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputPrivacyKeyStatusTimestamp) { + read(from, end, cons); + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_inputPrivacyKeyStatusTimestamp); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + + friend MTPinputPrivacyKey MTP_inputPrivacyKeyStatusTimestamp(); +}; +typedef MTPBoxed MTPInputPrivacyKey; + +class MTPprivacyKey { +public: + MTPprivacyKey() { + } + MTPprivacyKey(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_privacyKeyStatusTimestamp) { + read(from, end, cons); + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_privacyKeyStatusTimestamp); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + + friend MTPprivacyKey MTP_privacyKeyStatusTimestamp(); +}; +typedef MTPBoxed MTPPrivacyKey; + +class MTPinputPrivacyRule : private mtpDataOwner { +public: + MTPinputPrivacyRule() : mtpDataOwner(0), _type(0) { + } + MTPinputPrivacyRule(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDinputPrivacyValueAllowUsers &_inputPrivacyValueAllowUsers() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPrivacyValueAllowUsers) throw mtpErrorWrongTypeId(_type, mtpc_inputPrivacyValueAllowUsers); + split(); + return *(MTPDinputPrivacyValueAllowUsers*)data; + } + const MTPDinputPrivacyValueAllowUsers &c_inputPrivacyValueAllowUsers() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPrivacyValueAllowUsers) throw mtpErrorWrongTypeId(_type, mtpc_inputPrivacyValueAllowUsers); + return *(const MTPDinputPrivacyValueAllowUsers*)data; + } + + MTPDinputPrivacyValueDisallowUsers &_inputPrivacyValueDisallowUsers() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPrivacyValueDisallowUsers) throw mtpErrorWrongTypeId(_type, mtpc_inputPrivacyValueDisallowUsers); + split(); + return *(MTPDinputPrivacyValueDisallowUsers*)data; + } + const MTPDinputPrivacyValueDisallowUsers &c_inputPrivacyValueDisallowUsers() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_inputPrivacyValueDisallowUsers) throw mtpErrorWrongTypeId(_type, mtpc_inputPrivacyValueDisallowUsers); + return *(const MTPDinputPrivacyValueDisallowUsers*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPinputPrivacyRule(mtpTypeId type); + explicit MTPinputPrivacyRule(MTPDinputPrivacyValueAllowUsers *_data); + explicit MTPinputPrivacyRule(MTPDinputPrivacyValueDisallowUsers *_data); + + friend MTPinputPrivacyRule MTP_inputPrivacyValueAllowContacts(); + friend MTPinputPrivacyRule MTP_inputPrivacyValueAllowAll(); + friend MTPinputPrivacyRule MTP_inputPrivacyValueAllowUsers(const MTPVector &_users); + friend MTPinputPrivacyRule MTP_inputPrivacyValueDisallowContacts(); + friend MTPinputPrivacyRule MTP_inputPrivacyValueDisallowAll(); + friend MTPinputPrivacyRule MTP_inputPrivacyValueDisallowUsers(const MTPVector &_users); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPInputPrivacyRule; + +class MTPprivacyRule : private mtpDataOwner { +public: + MTPprivacyRule() : mtpDataOwner(0), _type(0) { + } + MTPprivacyRule(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) : mtpDataOwner(0), _type(0) { + read(from, end, cons); + } + + MTPDprivacyValueAllowUsers &_privacyValueAllowUsers() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_privacyValueAllowUsers) throw mtpErrorWrongTypeId(_type, mtpc_privacyValueAllowUsers); + split(); + return *(MTPDprivacyValueAllowUsers*)data; + } + const MTPDprivacyValueAllowUsers &c_privacyValueAllowUsers() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_privacyValueAllowUsers) throw mtpErrorWrongTypeId(_type, mtpc_privacyValueAllowUsers); + return *(const MTPDprivacyValueAllowUsers*)data; + } + + MTPDprivacyValueDisallowUsers &_privacyValueDisallowUsers() { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_privacyValueDisallowUsers) throw mtpErrorWrongTypeId(_type, mtpc_privacyValueDisallowUsers); + split(); + return *(MTPDprivacyValueDisallowUsers*)data; + } + const MTPDprivacyValueDisallowUsers &c_privacyValueDisallowUsers() const { + if (!data) throw mtpErrorUninitialized(); + if (_type != mtpc_privacyValueDisallowUsers) throw mtpErrorWrongTypeId(_type, mtpc_privacyValueDisallowUsers); + return *(const MTPDprivacyValueDisallowUsers*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPprivacyRule(mtpTypeId type); + explicit MTPprivacyRule(MTPDprivacyValueAllowUsers *_data); + explicit MTPprivacyRule(MTPDprivacyValueDisallowUsers *_data); + + friend MTPprivacyRule MTP_privacyValueAllowContacts(); + friend MTPprivacyRule MTP_privacyValueAllowAll(); + friend MTPprivacyRule MTP_privacyValueAllowUsers(const MTPVector &_users); + friend MTPprivacyRule MTP_privacyValueDisallowContacts(); + friend MTPprivacyRule MTP_privacyValueDisallowAll(); + friend MTPprivacyRule MTP_privacyValueDisallowUsers(const MTPVector &_users); + + mtpTypeId _type; +}; +typedef MTPBoxed MTPPrivacyRule; + +class MTPaccount_privacyRules : private mtpDataOwner { +public: + MTPaccount_privacyRules(); + MTPaccount_privacyRules(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_privacyRules) : mtpDataOwner(0) { + read(from, end, cons); + } + + MTPDaccount_privacyRules &_account_privacyRules() { + if (!data) throw mtpErrorUninitialized(); + split(); + return *(MTPDaccount_privacyRules*)data; + } + const MTPDaccount_privacyRules &c_account_privacyRules() const { + if (!data) throw mtpErrorUninitialized(); + return *(const MTPDaccount_privacyRules*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_privacyRules); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPaccount_privacyRules(MTPDaccount_privacyRules *_data); + + friend MTPaccount_privacyRules MTP_account_privacyRules(const MTPVector &_rules, const MTPVector &_users); +}; +typedef MTPBoxed MTPaccount_PrivacyRules; + +class MTPaccountDaysTTL : private mtpDataOwner { +public: + MTPaccountDaysTTL(); + MTPaccountDaysTTL(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_accountDaysTTL) : mtpDataOwner(0) { + read(from, end, cons); + } + + MTPDaccountDaysTTL &_accountDaysTTL() { + if (!data) throw mtpErrorUninitialized(); + split(); + return *(MTPDaccountDaysTTL*)data; + } + const MTPDaccountDaysTTL &c_accountDaysTTL() const { + if (!data) throw mtpErrorUninitialized(); + return *(const MTPDaccountDaysTTL*)data; + } + + uint32 innerLength() const; + mtpTypeId type() const; + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_accountDaysTTL); + void write(mtpBuffer &to) const; + + typedef void ResponseType; + +private: + explicit MTPaccountDaysTTL(MTPDaccountDaysTTL *_data); + + friend MTPaccountDaysTTL MTP_accountDaysTTL(MTPint _days); +}; +typedef MTPBoxed MTPAccountDaysTTL; + // Type constructors with data class MTPDresPQ : public mtpDataImpl { @@ -8180,11 +8461,11 @@ class MTPDcontactStatus : public mtpDataImpl { public: MTPDcontactStatus() { } - MTPDcontactStatus(MTPint _user_id, MTPint _expires) : vuser_id(_user_id), vexpires(_expires) { + MTPDcontactStatus(MTPint _user_id, const MTPUserStatus &_status) : vuser_id(_user_id), vstatus(_status) { } MTPint vuser_id; - MTPint vexpires; + MTPUserStatus vstatus; }; class MTPDchatLocated : public mtpDataImpl { @@ -8777,6 +9058,17 @@ public: MTPBool vpopup; }; +class MTPDupdatePrivacy : public mtpDataImpl { +public: + MTPDupdatePrivacy() { + } + MTPDupdatePrivacy(const MTPPrivacyKey &_key, const MTPVector &_rules) : vkey(_key), vrules(_rules) { + } + + MTPPrivacyKey vkey; + MTPVector vrules; +}; + class MTPDupdates_state : public mtpDataImpl { public: MTPDupdates_state() { @@ -9430,6 +9722,67 @@ public: MTPVector vusers; }; +class MTPDinputPrivacyValueAllowUsers : public mtpDataImpl { +public: + MTPDinputPrivacyValueAllowUsers() { + } + MTPDinputPrivacyValueAllowUsers(const MTPVector &_users) : vusers(_users) { + } + + MTPVector vusers; +}; + +class MTPDinputPrivacyValueDisallowUsers : public mtpDataImpl { +public: + MTPDinputPrivacyValueDisallowUsers() { + } + MTPDinputPrivacyValueDisallowUsers(const MTPVector &_users) : vusers(_users) { + } + + MTPVector vusers; +}; + +class MTPDprivacyValueAllowUsers : public mtpDataImpl { +public: + MTPDprivacyValueAllowUsers() { + } + MTPDprivacyValueAllowUsers(const MTPVector &_users) : vusers(_users) { + } + + MTPVector vusers; +}; + +class MTPDprivacyValueDisallowUsers : public mtpDataImpl { +public: + MTPDprivacyValueDisallowUsers() { + } + MTPDprivacyValueDisallowUsers(const MTPVector &_users) : vusers(_users) { + } + + MTPVector vusers; +}; + +class MTPDaccount_privacyRules : public mtpDataImpl { +public: + MTPDaccount_privacyRules() { + } + MTPDaccount_privacyRules(const MTPVector &_rules, const MTPVector &_users) : vrules(_rules), vusers(_users) { + } + + MTPVector vrules; + MTPVector vusers; +}; + +class MTPDaccountDaysTTL : public mtpDataImpl { +public: + MTPDaccountDaysTTL() { + } + MTPDaccountDaysTTL(MTPint _days) : vdays(_days) { + } + + MTPint vdays; +}; + // RPC methods class MTPreq_pq { // RPC method 'req_pq' @@ -9444,8 +9797,8 @@ public: MTPreq_pq(const MTPint128 &_nonce) : vnonce(_nonce) { } - uint32 size() const { - return vnonce.size(); + uint32 innerLength() const { + return vnonce.innerLength(); } mtpTypeId type() const { return mtpc_req_pq; @@ -9488,8 +9841,8 @@ public: MTPreq_DH_params(const MTPint128 &_nonce, const MTPint128 &_server_nonce, const MTPstring &_p, const MTPstring &_q, const MTPlong &_public_key_fingerprint, const MTPstring &_encrypted_data) : vnonce(_nonce), vserver_nonce(_server_nonce), vp(_p), vq(_q), vpublic_key_fingerprint(_public_key_fingerprint), vencrypted_data(_encrypted_data) { } - uint32 size() const { - return vnonce.size() + vserver_nonce.size() + vp.size() + vq.size() + vpublic_key_fingerprint.size() + vencrypted_data.size(); + uint32 innerLength() const { + return vnonce.innerLength() + vserver_nonce.innerLength() + vp.innerLength() + vq.innerLength() + vpublic_key_fingerprint.innerLength() + vencrypted_data.innerLength(); } mtpTypeId type() const { return mtpc_req_DH_params; @@ -9539,8 +9892,8 @@ public: MTPset_client_DH_params(const MTPint128 &_nonce, const MTPint128 &_server_nonce, const MTPstring &_encrypted_data) : vnonce(_nonce), vserver_nonce(_server_nonce), vencrypted_data(_encrypted_data) { } - uint32 size() const { - return vnonce.size() + vserver_nonce.size() + vencrypted_data.size(); + uint32 innerLength() const { + return vnonce.innerLength() + vserver_nonce.innerLength() + vencrypted_data.innerLength(); } mtpTypeId type() const { return mtpc_set_client_DH_params; @@ -9582,8 +9935,8 @@ public: MTPrpc_drop_answer(const MTPlong &_req_msg_id) : vreq_msg_id(_req_msg_id) { } - uint32 size() const { - return vreq_msg_id.size(); + uint32 innerLength() const { + return vreq_msg_id.innerLength(); } mtpTypeId type() const { return mtpc_rpc_drop_answer; @@ -9621,8 +9974,8 @@ public: MTPget_future_salts(MTPint _num) : vnum(_num) { } - uint32 size() const { - return vnum.size(); + uint32 innerLength() const { + return vnum.innerLength(); } mtpTypeId type() const { return mtpc_get_future_salts; @@ -9660,8 +10013,8 @@ public: MTPping(const MTPlong &_ping_id) : vping_id(_ping_id) { } - uint32 size() const { - return vping_id.size(); + uint32 innerLength() const { + return vping_id.innerLength(); } mtpTypeId type() const { return mtpc_ping; @@ -9700,8 +10053,8 @@ public: MTPping_delay_disconnect(const MTPlong &_ping_id, MTPint _disconnect_delay) : vping_id(_ping_id), vdisconnect_delay(_disconnect_delay) { } - uint32 size() const { - return vping_id.size() + vdisconnect_delay.size(); + uint32 innerLength() const { + return vping_id.innerLength() + vdisconnect_delay.innerLength(); } mtpTypeId type() const { return mtpc_ping_delay_disconnect; @@ -9741,8 +10094,8 @@ public: MTPdestroy_session(const MTPlong &_session_id) : vsession_id(_session_id) { } - uint32 size() const { - return vsession_id.size(); + uint32 innerLength() const { + return vsession_id.innerLength(); } mtpTypeId type() const { return mtpc_destroy_session; @@ -9784,8 +10137,8 @@ public: MTPregister_saveDeveloperInfo(const MTPstring &_name, const MTPstring &_email, const MTPstring &_phone_number, MTPint _age, const MTPstring &_city) : vname(_name), vemail(_email), vphone_number(_phone_number), vage(_age), vcity(_city) { } - uint32 size() const { - return vname.size() + vemail.size() + vphone_number.size() + vage.size() + vcity.size(); + uint32 innerLength() const { + return vname.innerLength() + vemail.innerLength() + vphone_number.innerLength() + vage.innerLength() + vcity.innerLength(); } mtpTypeId type() const { return mtpc_register_saveDeveloperInfo; @@ -9833,8 +10186,8 @@ public: MTPinvokeAfterMsg(const MTPlong &_msg_id, const TQueryType &_query) : vmsg_id(_msg_id), vquery(_query) { } - uint32 size() const { - return vmsg_id.size() + vquery.size(); + uint32 innerLength() const { + return vmsg_id.innerLength() + vquery.innerLength(); } mtpTypeId type() const { return mtpc_invokeAfterMsg; @@ -9875,8 +10228,8 @@ public: MTPinvokeAfterMsgs(const MTPVector &_msg_ids, const TQueryType &_query) : vmsg_ids(_msg_ids), vquery(_query) { } - uint32 size() const { - return vmsg_ids.size() + vquery.size(); + uint32 innerLength() const { + return vmsg_ids.innerLength() + vquery.innerLength(); } mtpTypeId type() const { return mtpc_invokeAfterMsgs; @@ -9915,8 +10268,8 @@ public: MTPauth_checkPhone(const MTPstring &_phone_number) : vphone_number(_phone_number) { } - uint32 size() const { - return vphone_number.size(); + uint32 innerLength() const { + return vphone_number.innerLength(); } mtpTypeId type() const { return mtpc_auth_checkPhone; @@ -9958,8 +10311,8 @@ public: MTPauth_sendCode(const MTPstring &_phone_number, MTPint _sms_type, MTPint _api_id, const MTPstring &_api_hash, const MTPstring &_lang_code) : vphone_number(_phone_number), vsms_type(_sms_type), vapi_id(_api_id), vapi_hash(_api_hash), vlang_code(_lang_code) { } - uint32 size() const { - return vphone_number.size() + vsms_type.size() + vapi_id.size() + vapi_hash.size() + vlang_code.size(); + uint32 innerLength() const { + return vphone_number.innerLength() + vsms_type.innerLength() + vapi_id.innerLength() + vapi_hash.innerLength() + vlang_code.innerLength(); } mtpTypeId type() const { return mtpc_auth_sendCode; @@ -10006,8 +10359,8 @@ public: MTPauth_sendCall(const MTPstring &_phone_number, const MTPstring &_phone_code_hash) : vphone_number(_phone_number), vphone_code_hash(_phone_code_hash) { } - uint32 size() const { - return vphone_number.size() + vphone_code_hash.size(); + uint32 innerLength() const { + return vphone_number.innerLength() + vphone_code_hash.innerLength(); } mtpTypeId type() const { return mtpc_auth_sendCall; @@ -10051,8 +10404,8 @@ public: MTPauth_signUp(const MTPstring &_phone_number, const MTPstring &_phone_code_hash, const MTPstring &_phone_code, const MTPstring &_first_name, const MTPstring &_last_name) : vphone_number(_phone_number), vphone_code_hash(_phone_code_hash), vphone_code(_phone_code), vfirst_name(_first_name), vlast_name(_last_name) { } - uint32 size() const { - return vphone_number.size() + vphone_code_hash.size() + vphone_code.size() + vfirst_name.size() + vlast_name.size(); + uint32 innerLength() const { + return vphone_number.innerLength() + vphone_code_hash.innerLength() + vphone_code.innerLength() + vfirst_name.innerLength() + vlast_name.innerLength(); } mtpTypeId type() const { return mtpc_auth_signUp; @@ -10100,8 +10453,8 @@ public: MTPauth_signIn(const MTPstring &_phone_number, const MTPstring &_phone_code_hash, const MTPstring &_phone_code) : vphone_number(_phone_number), vphone_code_hash(_phone_code_hash), vphone_code(_phone_code) { } - uint32 size() const { - return vphone_number.size() + vphone_code_hash.size() + vphone_code.size(); + uint32 innerLength() const { + return vphone_number.innerLength() + vphone_code_hash.innerLength() + vphone_code.innerLength(); } mtpTypeId type() const { return mtpc_auth_signIn; @@ -10139,7 +10492,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -10170,7 +10523,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -10206,8 +10559,8 @@ public: MTPauth_sendInvites(const MTPVector &_phone_numbers, const MTPstring &_message) : vphone_numbers(_phone_numbers), vmessage(_message) { } - uint32 size() const { - return vphone_numbers.size() + vmessage.size(); + uint32 innerLength() const { + return vphone_numbers.innerLength() + vmessage.innerLength(); } mtpTypeId type() const { return mtpc_auth_sendInvites; @@ -10247,8 +10600,8 @@ public: MTPauth_exportAuthorization(MTPint _dc_id) : vdc_id(_dc_id) { } - uint32 size() const { - return vdc_id.size(); + uint32 innerLength() const { + return vdc_id.innerLength(); } mtpTypeId type() const { return mtpc_auth_exportAuthorization; @@ -10287,8 +10640,8 @@ public: MTPauth_importAuthorization(MTPint _id, const MTPbytes &_bytes) : vid(_id), vbytes(_bytes) { } - uint32 size() const { - return vid.size() + vbytes.size(); + uint32 innerLength() const { + return vid.innerLength() + vbytes.innerLength(); } mtpTypeId type() const { return mtpc_auth_importAuthorization; @@ -10331,8 +10684,8 @@ public: MTPauth_bindTempAuthKey(const MTPlong &_perm_auth_key_id, const MTPlong &_nonce, MTPint _expires_at, const MTPbytes &_encrypted_message) : vperm_auth_key_id(_perm_auth_key_id), vnonce(_nonce), vexpires_at(_expires_at), vencrypted_message(_encrypted_message) { } - uint32 size() const { - return vperm_auth_key_id.size() + vnonce.size() + vexpires_at.size() + vencrypted_message.size(); + uint32 innerLength() const { + return vperm_auth_key_id.innerLength() + vnonce.innerLength() + vexpires_at.innerLength() + vencrypted_message.innerLength(); } mtpTypeId type() const { return mtpc_auth_bindTempAuthKey; @@ -10382,8 +10735,8 @@ public: MTPaccount_registerDevice(MTPint _token_type, const MTPstring &_token, const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, MTPBool _app_sandbox, const MTPstring &_lang_code) : vtoken_type(_token_type), vtoken(_token), vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vapp_sandbox(_app_sandbox), vlang_code(_lang_code) { } - uint32 size() const { - return vtoken_type.size() + vtoken.size() + vdevice_model.size() + vsystem_version.size() + vapp_version.size() + vapp_sandbox.size() + vlang_code.size(); + uint32 innerLength() const { + return vtoken_type.innerLength() + vtoken.innerLength() + vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vapp_sandbox.innerLength() + vlang_code.innerLength(); } mtpTypeId type() const { return mtpc_account_registerDevice; @@ -10434,8 +10787,8 @@ public: MTPaccount_unregisterDevice(MTPint _token_type, const MTPstring &_token) : vtoken_type(_token_type), vtoken(_token) { } - uint32 size() const { - return vtoken_type.size() + vtoken.size(); + uint32 innerLength() const { + return vtoken_type.innerLength() + vtoken.innerLength(); } mtpTypeId type() const { return mtpc_account_unregisterDevice; @@ -10476,8 +10829,8 @@ public: MTPaccount_updateNotifySettings(const MTPInputNotifyPeer &_peer, const MTPInputPeerNotifySettings &_settings) : vpeer(_peer), vsettings(_settings) { } - uint32 size() const { - return vpeer.size() + vsettings.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vsettings.innerLength(); } mtpTypeId type() const { return mtpc_account_updateNotifySettings; @@ -10517,8 +10870,8 @@ public: MTPaccount_getNotifySettings(const MTPInputNotifyPeer &_peer) : vpeer(_peer) { } - uint32 size() const { - return vpeer.size(); + uint32 innerLength() const { + return vpeer.innerLength(); } mtpTypeId type() const { return mtpc_account_getNotifySettings; @@ -10552,7 +10905,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -10588,8 +10941,8 @@ public: MTPaccount_updateProfile(const MTPstring &_first_name, const MTPstring &_last_name) : vfirst_name(_first_name), vlast_name(_last_name) { } - uint32 size() const { - return vfirst_name.size() + vlast_name.size(); + uint32 innerLength() const { + return vfirst_name.innerLength() + vlast_name.innerLength(); } mtpTypeId type() const { return mtpc_account_updateProfile; @@ -10629,8 +10982,8 @@ public: MTPaccount_updateStatus(MTPBool _offline) : voffline(_offline) { } - uint32 size() const { - return voffline.size(); + uint32 innerLength() const { + return voffline.innerLength(); } mtpTypeId type() const { return mtpc_account_updateStatus; @@ -10664,7 +11017,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -10699,8 +11052,8 @@ public: MTPusers_getUsers(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_users_getUsers; @@ -10738,8 +11091,8 @@ public: MTPusers_getFullUser(const MTPInputUser &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_users_getFullUser; @@ -10773,7 +11126,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -10808,8 +11161,8 @@ public: MTPcontacts_getContacts(const MTPstring &_hash) : vhash(_hash) { } - uint32 size() const { - return vhash.size(); + uint32 innerLength() const { + return vhash.innerLength(); } mtpTypeId type() const { return mtpc_contacts_getContacts; @@ -10848,8 +11201,8 @@ public: MTPcontacts_importContacts(const MTPVector &_contacts, MTPBool _replace) : vcontacts(_contacts), vreplace(_replace) { } - uint32 size() const { - return vcontacts.size() + vreplace.size(); + uint32 innerLength() const { + return vcontacts.innerLength() + vreplace.innerLength(); } mtpTypeId type() const { return mtpc_contacts_importContacts; @@ -10889,8 +11242,8 @@ public: MTPcontacts_getSuggested(MTPint _limit) : vlimit(_limit) { } - uint32 size() const { - return vlimit.size(); + uint32 innerLength() const { + return vlimit.innerLength(); } mtpTypeId type() const { return mtpc_contacts_getSuggested; @@ -10928,8 +11281,8 @@ public: MTPcontacts_deleteContact(const MTPInputUser &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_contacts_deleteContact; @@ -10967,8 +11320,8 @@ public: MTPcontacts_deleteContacts(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_contacts_deleteContacts; @@ -11006,8 +11359,8 @@ public: MTPcontacts_block(const MTPInputUser &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_contacts_block; @@ -11045,8 +11398,8 @@ public: MTPcontacts_unblock(const MTPInputUser &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_contacts_unblock; @@ -11085,8 +11438,8 @@ public: MTPcontacts_getBlocked(MTPint _offset, MTPint _limit) : voffset(_offset), vlimit(_limit) { } - uint32 size() const { - return voffset.size() + vlimit.size(); + uint32 innerLength() const { + return voffset.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_contacts_getBlocked; @@ -11122,7 +11475,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -11157,8 +11510,8 @@ public: MTPcontacts_importCard(const MTPVector &_export_card) : vexport_card(_export_card) { } - uint32 size() const { - return vexport_card.size(); + uint32 innerLength() const { + return vexport_card.innerLength(); } mtpTypeId type() const { return mtpc_contacts_importCard; @@ -11196,8 +11549,8 @@ public: MTPmessages_getMessages(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_getMessages; @@ -11237,8 +11590,8 @@ public: MTPmessages_getDialogs(MTPint _offset, MTPint _max_id, MTPint _limit) : voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_messages_getDialogs; @@ -11283,8 +11636,8 @@ public: MTPmessages_getHistory(const MTPInputPeer &_peer, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return vpeer.size() + voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return vpeer.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_messages_getHistory; @@ -11335,8 +11688,8 @@ public: MTPmessages_search(const MTPInputPeer &_peer, const MTPstring &_q, const MTPMessagesFilter &_filter, MTPint _min_date, MTPint _max_date, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), vq(_q), vfilter(_filter), vmin_date(_min_date), vmax_date(_max_date), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return vpeer.size() + vq.size() + vfilter.size() + vmin_date.size() + vmax_date.size() + voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vq.innerLength() + vfilter.innerLength() + vmin_date.innerLength() + vmax_date.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_messages_search; @@ -11391,8 +11744,8 @@ public: MTPmessages_readHistory(const MTPInputPeer &_peer, MTPint _max_id, MTPint _offset, MTPBool _read_contents) : vpeer(_peer), vmax_id(_max_id), voffset(_offset), vread_contents(_read_contents) { } - uint32 size() const { - return vpeer.size() + vmax_id.size() + voffset.size() + vread_contents.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmax_id.innerLength() + voffset.innerLength() + vread_contents.innerLength(); } mtpTypeId type() const { return mtpc_messages_readHistory; @@ -11437,8 +11790,8 @@ public: MTPmessages_deleteHistory(const MTPInputPeer &_peer, MTPint _offset) : vpeer(_peer), voffset(_offset) { } - uint32 size() const { - return vpeer.size() + voffset.size(); + uint32 innerLength() const { + return vpeer.innerLength() + voffset.innerLength(); } mtpTypeId type() const { return mtpc_messages_deleteHistory; @@ -11478,8 +11831,8 @@ public: MTPmessages_deleteMessages(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_deleteMessages; @@ -11517,8 +11870,8 @@ public: MTPmessages_restoreMessages(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_restoreMessages; @@ -11556,8 +11909,8 @@ public: MTPmessages_receivedMessages(MTPint _max_id) : vmax_id(_max_id) { } - uint32 size() const { - return vmax_id.size(); + uint32 innerLength() const { + return vmax_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_receivedMessages; @@ -11596,8 +11949,8 @@ public: MTPmessages_setTyping(const MTPInputPeer &_peer, const MTPSendMessageAction &_action) : vpeer(_peer), vaction(_action) { } - uint32 size() const { - return vpeer.size() + vaction.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vaction.innerLength(); } mtpTypeId type() const { return mtpc_messages_setTyping; @@ -11639,8 +11992,8 @@ public: MTPmessages_sendMessage(const MTPInputPeer &_peer, const MTPstring &_message, const MTPlong &_random_id) : vpeer(_peer), vmessage(_message), vrandom_id(_random_id) { } - uint32 size() const { - return vpeer.size() + vmessage.size() + vrandom_id.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmessage.innerLength() + vrandom_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendMessage; @@ -11684,8 +12037,8 @@ public: MTPmessages_sendMedia(const MTPInputPeer &_peer, const MTPInputMedia &_media, const MTPlong &_random_id) : vpeer(_peer), vmedia(_media), vrandom_id(_random_id) { } - uint32 size() const { - return vpeer.size() + vmedia.size() + vrandom_id.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmedia.innerLength() + vrandom_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendMedia; @@ -11728,8 +12081,8 @@ public: MTPmessages_forwardMessages(const MTPInputPeer &_peer, const MTPVector &_id) : vpeer(_peer), vid(_id) { } - uint32 size() const { - return vpeer.size() + vid.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_forwardMessages; @@ -11769,8 +12122,8 @@ public: MTPmessages_getChats(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_getChats; @@ -11808,8 +12161,8 @@ public: MTPmessages_getFullChat(MTPint _chat_id) : vchat_id(_chat_id) { } - uint32 size() const { - return vchat_id.size(); + uint32 innerLength() const { + return vchat_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_getFullChat; @@ -11848,8 +12201,8 @@ public: MTPmessages_editChatTitle(MTPint _chat_id, const MTPstring &_title) : vchat_id(_chat_id), vtitle(_title) { } - uint32 size() const { - return vchat_id.size() + vtitle.size(); + uint32 innerLength() const { + return vchat_id.innerLength() + vtitle.innerLength(); } mtpTypeId type() const { return mtpc_messages_editChatTitle; @@ -11890,8 +12243,8 @@ public: MTPmessages_editChatPhoto(MTPint _chat_id, const MTPInputChatPhoto &_photo) : vchat_id(_chat_id), vphoto(_photo) { } - uint32 size() const { - return vchat_id.size() + vphoto.size(); + uint32 innerLength() const { + return vchat_id.innerLength() + vphoto.innerLength(); } mtpTypeId type() const { return mtpc_messages_editChatPhoto; @@ -11933,8 +12286,8 @@ public: MTPmessages_addChatUser(MTPint _chat_id, const MTPInputUser &_user_id, MTPint _fwd_limit) : vchat_id(_chat_id), vuser_id(_user_id), vfwd_limit(_fwd_limit) { } - uint32 size() const { - return vchat_id.size() + vuser_id.size() + vfwd_limit.size(); + uint32 innerLength() const { + return vchat_id.innerLength() + vuser_id.innerLength() + vfwd_limit.innerLength(); } mtpTypeId type() const { return mtpc_messages_addChatUser; @@ -11977,8 +12330,8 @@ public: MTPmessages_deleteChatUser(MTPint _chat_id, const MTPInputUser &_user_id) : vchat_id(_chat_id), vuser_id(_user_id) { } - uint32 size() const { - return vchat_id.size() + vuser_id.size(); + uint32 innerLength() const { + return vchat_id.innerLength() + vuser_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_deleteChatUser; @@ -12019,8 +12372,8 @@ public: MTPmessages_createChat(const MTPVector &_users, const MTPstring &_title) : vusers(_users), vtitle(_title) { } - uint32 size() const { - return vusers.size() + vtitle.size(); + uint32 innerLength() const { + return vusers.innerLength() + vtitle.innerLength(); } mtpTypeId type() const { return mtpc_messages_createChat; @@ -12056,7 +12409,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -12093,8 +12446,8 @@ public: MTPupdates_getDifference(MTPint _pts, MTPint _date, MTPint _qts) : vpts(_pts), vdate(_date), vqts(_qts) { } - uint32 size() const { - return vpts.size() + vdate.size() + vqts.size(); + uint32 innerLength() const { + return vpts.innerLength() + vdate.innerLength() + vqts.innerLength(); } mtpTypeId type() const { return mtpc_updates_getDifference; @@ -12137,8 +12490,8 @@ public: MTPphotos_updateProfilePhoto(const MTPInputPhoto &_id, const MTPInputPhotoCrop &_crop) : vid(_id), vcrop(_crop) { } - uint32 size() const { - return vid.size() + vcrop.size(); + uint32 innerLength() const { + return vid.innerLength() + vcrop.innerLength(); } mtpTypeId type() const { return mtpc_photos_updateProfilePhoto; @@ -12181,8 +12534,8 @@ public: MTPphotos_uploadProfilePhoto(const MTPInputFile &_file, const MTPstring &_caption, const MTPInputGeoPoint &_geo_point, const MTPInputPhotoCrop &_crop) : vfile(_file), vcaption(_caption), vgeo_point(_geo_point), vcrop(_crop) { } - uint32 size() const { - return vfile.size() + vcaption.size() + vgeo_point.size() + vcrop.size(); + uint32 innerLength() const { + return vfile.innerLength() + vcaption.innerLength() + vgeo_point.innerLength() + vcrop.innerLength(); } mtpTypeId type() const { return mtpc_photos_uploadProfilePhoto; @@ -12228,8 +12581,8 @@ public: MTPupload_saveFilePart(const MTPlong &_file_id, MTPint _file_part, const MTPbytes &_bytes) : vfile_id(_file_id), vfile_part(_file_part), vbytes(_bytes) { } - uint32 size() const { - return vfile_id.size() + vfile_part.size() + vbytes.size(); + uint32 innerLength() const { + return vfile_id.innerLength() + vfile_part.innerLength() + vbytes.innerLength(); } mtpTypeId type() const { return mtpc_upload_saveFilePart; @@ -12273,8 +12626,8 @@ public: MTPupload_getFile(const MTPInputFileLocation &_location, MTPint _offset, MTPint _limit) : vlocation(_location), voffset(_offset), vlimit(_limit) { } - uint32 size() const { - return vlocation.size() + voffset.size() + vlimit.size(); + uint32 innerLength() const { + return vlocation.innerLength() + voffset.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_upload_getFile; @@ -12312,7 +12665,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -12343,7 +12696,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -12381,8 +12734,8 @@ public: MTPhelp_getAppUpdate(const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code) : vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code) { } - uint32 size() const { - return vdevice_model.size() + vsystem_version.size() + vapp_version.size() + vlang_code.size(); + uint32 innerLength() const { + return vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength(); } mtpTypeId type() const { return mtpc_help_getAppUpdate; @@ -12426,8 +12779,8 @@ public: MTPhelp_saveAppLog(const MTPVector &_events) : vevents(_events) { } - uint32 size() const { - return vevents.size(); + uint32 innerLength() const { + return vevents.innerLength(); } mtpTypeId type() const { return mtpc_help_saveAppLog; @@ -12465,8 +12818,8 @@ public: MTPhelp_getInviteText(const MTPstring &_lang_code) : vlang_code(_lang_code) { } - uint32 size() const { - return vlang_code.size(); + uint32 innerLength() const { + return vlang_code.innerLength(); } mtpTypeId type() const { return mtpc_help_getInviteText; @@ -12507,8 +12860,8 @@ public: MTPphotos_getUserPhotos(const MTPInputUser &_user_id, MTPint _offset, MTPint _max_id, MTPint _limit) : vuser_id(_user_id), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return vuser_id.size() + voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return vuser_id.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_photos_getUserPhotos; @@ -12554,8 +12907,8 @@ public: MTPmessages_forwardMessage(const MTPInputPeer &_peer, MTPint _id, const MTPlong &_random_id) : vpeer(_peer), vid(_id), vrandom_id(_random_id) { } - uint32 size() const { - return vpeer.size() + vid.size() + vrandom_id.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vid.innerLength() + vrandom_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_forwardMessage; @@ -12599,8 +12952,8 @@ public: MTPmessages_sendBroadcast(const MTPVector &_contacts, const MTPstring &_message, const MTPInputMedia &_media) : vcontacts(_contacts), vmessage(_message), vmedia(_media) { } - uint32 size() const { - return vcontacts.size() + vmessage.size() + vmedia.size(); + uint32 innerLength() const { + return vcontacts.innerLength() + vmessage.innerLength() + vmedia.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendBroadcast; @@ -12644,8 +12997,8 @@ public: MTPgeochats_getLocated(const MTPInputGeoPoint &_geo_point, MTPint _radius, MTPint _limit) : vgeo_point(_geo_point), vradius(_radius), vlimit(_limit) { } - uint32 size() const { - return vgeo_point.size() + vradius.size() + vlimit.size(); + uint32 innerLength() const { + return vgeo_point.innerLength() + vradius.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_geochats_getLocated; @@ -12688,8 +13041,8 @@ public: MTPgeochats_getRecents(MTPint _offset, MTPint _limit) : voffset(_offset), vlimit(_limit) { } - uint32 size() const { - return voffset.size() + vlimit.size(); + uint32 innerLength() const { + return voffset.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_geochats_getRecents; @@ -12729,8 +13082,8 @@ public: MTPgeochats_checkin(const MTPInputGeoChat &_peer) : vpeer(_peer) { } - uint32 size() const { - return vpeer.size(); + uint32 innerLength() const { + return vpeer.innerLength(); } mtpTypeId type() const { return mtpc_geochats_checkin; @@ -12768,8 +13121,8 @@ public: MTPgeochats_getFullChat(const MTPInputGeoChat &_peer) : vpeer(_peer) { } - uint32 size() const { - return vpeer.size(); + uint32 innerLength() const { + return vpeer.innerLength(); } mtpTypeId type() const { return mtpc_geochats_getFullChat; @@ -12809,8 +13162,8 @@ public: MTPgeochats_editChatTitle(const MTPInputGeoChat &_peer, const MTPstring &_title, const MTPstring &_address) : vpeer(_peer), vtitle(_title), vaddress(_address) { } - uint32 size() const { - return vpeer.size() + vtitle.size() + vaddress.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vtitle.innerLength() + vaddress.innerLength(); } mtpTypeId type() const { return mtpc_geochats_editChatTitle; @@ -12853,8 +13206,8 @@ public: MTPgeochats_editChatPhoto(const MTPInputGeoChat &_peer, const MTPInputChatPhoto &_photo) : vpeer(_peer), vphoto(_photo) { } - uint32 size() const { - return vpeer.size() + vphoto.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vphoto.innerLength(); } mtpTypeId type() const { return mtpc_geochats_editChatPhoto; @@ -12901,8 +13254,8 @@ public: MTPgeochats_search(const MTPInputGeoChat &_peer, const MTPstring &_q, const MTPMessagesFilter &_filter, MTPint _min_date, MTPint _max_date, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), vq(_q), vfilter(_filter), vmin_date(_min_date), vmax_date(_max_date), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return vpeer.size() + vq.size() + vfilter.size() + vmin_date.size() + vmax_date.size() + voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vq.innerLength() + vfilter.innerLength() + vmin_date.innerLength() + vmax_date.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_geochats_search; @@ -12957,8 +13310,8 @@ public: MTPgeochats_getHistory(const MTPInputGeoChat &_peer, MTPint _offset, MTPint _max_id, MTPint _limit) : vpeer(_peer), voffset(_offset), vmax_id(_max_id), vlimit(_limit) { } - uint32 size() const { - return vpeer.size() + voffset.size() + vmax_id.size() + vlimit.size(); + uint32 innerLength() const { + return vpeer.innerLength() + voffset.innerLength() + vmax_id.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_geochats_getHistory; @@ -13003,8 +13356,8 @@ public: MTPgeochats_setTyping(const MTPInputGeoChat &_peer, MTPBool _typing) : vpeer(_peer), vtyping(_typing) { } - uint32 size() const { - return vpeer.size() + vtyping.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vtyping.innerLength(); } mtpTypeId type() const { return mtpc_geochats_setTyping; @@ -13046,8 +13399,8 @@ public: MTPgeochats_sendMessage(const MTPInputGeoChat &_peer, const MTPstring &_message, const MTPlong &_random_id) : vpeer(_peer), vmessage(_message), vrandom_id(_random_id) { } - uint32 size() const { - return vpeer.size() + vmessage.size() + vrandom_id.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmessage.innerLength() + vrandom_id.innerLength(); } mtpTypeId type() const { return mtpc_geochats_sendMessage; @@ -13091,8 +13444,8 @@ public: MTPgeochats_sendMedia(const MTPInputGeoChat &_peer, const MTPInputMedia &_media, const MTPlong &_random_id) : vpeer(_peer), vmedia(_media), vrandom_id(_random_id) { } - uint32 size() const { - return vpeer.size() + vmedia.size() + vrandom_id.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmedia.innerLength() + vrandom_id.innerLength(); } mtpTypeId type() const { return mtpc_geochats_sendMedia; @@ -13137,8 +13490,8 @@ public: MTPgeochats_createGeoChat(const MTPstring &_title, const MTPInputGeoPoint &_geo_point, const MTPstring &_address, const MTPstring &_venue) : vtitle(_title), vgeo_point(_geo_point), vaddress(_address), vvenue(_venue) { } - uint32 size() const { - return vtitle.size() + vgeo_point.size() + vaddress.size() + vvenue.size(); + uint32 innerLength() const { + return vtitle.innerLength() + vgeo_point.innerLength() + vaddress.innerLength() + vvenue.innerLength(); } mtpTypeId type() const { return mtpc_geochats_createGeoChat; @@ -13183,8 +13536,8 @@ public: MTPmessages_getDhConfig(MTPint _version, MTPint _random_length) : vversion(_version), vrandom_length(_random_length) { } - uint32 size() const { - return vversion.size() + vrandom_length.size(); + uint32 innerLength() const { + return vversion.innerLength() + vrandom_length.innerLength(); } mtpTypeId type() const { return mtpc_messages_getDhConfig; @@ -13226,8 +13579,8 @@ public: MTPmessages_requestEncryption(const MTPInputUser &_user_id, MTPint _random_id, const MTPbytes &_g_a) : vuser_id(_user_id), vrandom_id(_random_id), vg_a(_g_a) { } - uint32 size() const { - return vuser_id.size() + vrandom_id.size() + vg_a.size(); + uint32 innerLength() const { + return vuser_id.innerLength() + vrandom_id.innerLength() + vg_a.innerLength(); } mtpTypeId type() const { return mtpc_messages_requestEncryption; @@ -13271,8 +13624,8 @@ public: MTPmessages_acceptEncryption(const MTPInputEncryptedChat &_peer, const MTPbytes &_g_b, const MTPlong &_key_fingerprint) : vpeer(_peer), vg_b(_g_b), vkey_fingerprint(_key_fingerprint) { } - uint32 size() const { - return vpeer.size() + vg_b.size() + vkey_fingerprint.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vg_b.innerLength() + vkey_fingerprint.innerLength(); } mtpTypeId type() const { return mtpc_messages_acceptEncryption; @@ -13314,8 +13667,8 @@ public: MTPmessages_discardEncryption(MTPint _chat_id) : vchat_id(_chat_id) { } - uint32 size() const { - return vchat_id.size(); + uint32 innerLength() const { + return vchat_id.innerLength(); } mtpTypeId type() const { return mtpc_messages_discardEncryption; @@ -13354,8 +13707,8 @@ public: MTPmessages_setEncryptedTyping(const MTPInputEncryptedChat &_peer, MTPBool _typing) : vpeer(_peer), vtyping(_typing) { } - uint32 size() const { - return vpeer.size() + vtyping.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vtyping.innerLength(); } mtpTypeId type() const { return mtpc_messages_setEncryptedTyping; @@ -13396,8 +13749,8 @@ public: MTPmessages_readEncryptedHistory(const MTPInputEncryptedChat &_peer, MTPint _max_date) : vpeer(_peer), vmax_date(_max_date) { } - uint32 size() const { - return vpeer.size() + vmax_date.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vmax_date.innerLength(); } mtpTypeId type() const { return mtpc_messages_readEncryptedHistory; @@ -13439,8 +13792,8 @@ public: MTPmessages_sendEncrypted(const MTPInputEncryptedChat &_peer, const MTPlong &_random_id, const MTPbytes &_data) : vpeer(_peer), vrandom_id(_random_id), vdata(_data) { } - uint32 size() const { - return vpeer.size() + vrandom_id.size() + vdata.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vrandom_id.innerLength() + vdata.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendEncrypted; @@ -13485,8 +13838,8 @@ public: MTPmessages_sendEncryptedFile(const MTPInputEncryptedChat &_peer, const MTPlong &_random_id, const MTPbytes &_data, const MTPInputEncryptedFile &_file) : vpeer(_peer), vrandom_id(_random_id), vdata(_data), vfile(_file) { } - uint32 size() const { - return vpeer.size() + vrandom_id.size() + vdata.size() + vfile.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vrandom_id.innerLength() + vdata.innerLength() + vfile.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendEncryptedFile; @@ -13532,8 +13885,8 @@ public: MTPmessages_sendEncryptedService(const MTPInputEncryptedChat &_peer, const MTPlong &_random_id, const MTPbytes &_data) : vpeer(_peer), vrandom_id(_random_id), vdata(_data) { } - uint32 size() const { - return vpeer.size() + vrandom_id.size() + vdata.size(); + uint32 innerLength() const { + return vpeer.innerLength() + vrandom_id.innerLength() + vdata.innerLength(); } mtpTypeId type() const { return mtpc_messages_sendEncryptedService; @@ -13575,8 +13928,8 @@ public: MTPmessages_receivedQueue(MTPint _max_qts) : vmax_qts(_max_qts) { } - uint32 size() const { - return vmax_qts.size(); + uint32 innerLength() const { + return vmax_qts.innerLength(); } mtpTypeId type() const { return mtpc_messages_receivedQueue; @@ -13617,8 +13970,8 @@ public: MTPupload_saveBigFilePart(const MTPlong &_file_id, MTPint _file_part, MTPint _file_total_parts, const MTPbytes &_bytes) : vfile_id(_file_id), vfile_part(_file_part), vfile_total_parts(_file_total_parts), vbytes(_bytes) { } - uint32 size() const { - return vfile_id.size() + vfile_part.size() + vfile_total_parts.size() + vbytes.size(); + uint32 innerLength() const { + return vfile_id.innerLength() + vfile_part.innerLength() + vfile_total_parts.innerLength() + vbytes.innerLength(); } mtpTypeId type() const { return mtpc_upload_saveBigFilePart; @@ -13668,8 +14021,8 @@ public: MTPinitConnection(MTPint _api_id, const MTPstring &_device_model, const MTPstring &_system_version, const MTPstring &_app_version, const MTPstring &_lang_code, const TQueryType &_query) : vapi_id(_api_id), vdevice_model(_device_model), vsystem_version(_system_version), vapp_version(_app_version), vlang_code(_lang_code), vquery(_query) { } - uint32 size() const { - return vapi_id.size() + vdevice_model.size() + vsystem_version.size() + vapp_version.size() + vlang_code.size() + vquery.size(); + uint32 innerLength() const { + return vapi_id.innerLength() + vdevice_model.innerLength() + vsystem_version.innerLength() + vapp_version.innerLength() + vlang_code.innerLength() + vquery.innerLength(); } mtpTypeId type() const { return mtpc_initConnection; @@ -13712,7 +14065,7 @@ public: read(from, end, cons); } - uint32 size() const { + uint32 innerLength() const { return 0; } mtpTypeId type() const { @@ -13748,8 +14101,8 @@ public: MTPauth_sendSms(const MTPstring &_phone_number, const MTPstring &_phone_code_hash) : vphone_number(_phone_number), vphone_code_hash(_phone_code_hash) { } - uint32 size() const { - return vphone_number.size() + vphone_code_hash.size(); + uint32 innerLength() const { + return vphone_number.innerLength() + vphone_code_hash.innerLength(); } mtpTypeId type() const { return mtpc_auth_sendSms; @@ -13789,8 +14142,8 @@ public: MTPmessages_readMessageContents(const MTPVector &_id) : vid(_id) { } - uint32 size() const { - return vid.size(); + uint32 innerLength() const { + return vid.innerLength(); } mtpTypeId type() const { return mtpc_messages_readMessageContents; @@ -13828,8 +14181,8 @@ public: MTPaccount_checkUsername(const MTPstring &_username) : vusername(_username) { } - uint32 size() const { - return vusername.size(); + uint32 innerLength() const { + return vusername.innerLength(); } mtpTypeId type() const { return mtpc_account_checkUsername; @@ -13867,8 +14220,8 @@ public: MTPaccount_updateUsername(const MTPstring &_username) : vusername(_username) { } - uint32 size() const { - return vusername.size(); + uint32 innerLength() const { + return vusername.innerLength(); } mtpTypeId type() const { return mtpc_account_updateUsername; @@ -13907,8 +14260,8 @@ public: MTPcontacts_search(const MTPstring &_q, MTPint _limit) : vq(_q), vlimit(_limit) { } - uint32 size() const { - return vq.size() + vlimit.size(); + uint32 innerLength() const { + return vq.innerLength() + vlimit.innerLength(); } mtpTypeId type() const { return mtpc_contacts_search; @@ -13936,14 +14289,204 @@ public: } }; +class MTPaccount_getPrivacy { // RPC method 'account.getPrivacy' +public: + MTPInputPrivacyKey vkey; + + MTPaccount_getPrivacy() { + } + MTPaccount_getPrivacy(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getPrivacy) { + read(from, end, cons); + } + MTPaccount_getPrivacy(const MTPInputPrivacyKey &_key) : vkey(_key) { + } + + uint32 innerLength() const { + return vkey.innerLength(); + } + mtpTypeId type() const { + return mtpc_account_getPrivacy; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getPrivacy) { + vkey.read(from, end); + } + void write(mtpBuffer &to) const { + vkey.write(to); + } + + typedef MTPaccount_PrivacyRules ResponseType; +}; +class MTPaccount_GetPrivacy : public MTPBoxed { +public: + MTPaccount_GetPrivacy() { + } + MTPaccount_GetPrivacy(const MTPaccount_getPrivacy &v) : MTPBoxed(v) { + } + MTPaccount_GetPrivacy(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPaccount_GetPrivacy(const MTPInputPrivacyKey &_key) : MTPBoxed(MTPaccount_getPrivacy(_key)) { + } +}; + +class MTPaccount_setPrivacy { // RPC method 'account.setPrivacy' +public: + MTPInputPrivacyKey vkey; + MTPVector vrules; + + MTPaccount_setPrivacy() { + } + MTPaccount_setPrivacy(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_setPrivacy) { + read(from, end, cons); + } + MTPaccount_setPrivacy(const MTPInputPrivacyKey &_key, const MTPVector &_rules) : vkey(_key), vrules(_rules) { + } + + uint32 innerLength() const { + return vkey.innerLength() + vrules.innerLength(); + } + mtpTypeId type() const { + return mtpc_account_setPrivacy; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_setPrivacy) { + vkey.read(from, end); + vrules.read(from, end); + } + void write(mtpBuffer &to) const { + vkey.write(to); + vrules.write(to); + } + + typedef MTPaccount_PrivacyRules ResponseType; +}; +class MTPaccount_SetPrivacy : public MTPBoxed { +public: + MTPaccount_SetPrivacy() { + } + MTPaccount_SetPrivacy(const MTPaccount_setPrivacy &v) : MTPBoxed(v) { + } + MTPaccount_SetPrivacy(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPaccount_SetPrivacy(const MTPInputPrivacyKey &_key, const MTPVector &_rules) : MTPBoxed(MTPaccount_setPrivacy(_key, _rules)) { + } +}; + +class MTPaccount_deleteAccount { // RPC method 'account.deleteAccount' +public: + MTPstring vreason; + + MTPaccount_deleteAccount() { + } + MTPaccount_deleteAccount(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_deleteAccount) { + read(from, end, cons); + } + MTPaccount_deleteAccount(const MTPstring &_reason) : vreason(_reason) { + } + + uint32 innerLength() const { + return vreason.innerLength(); + } + mtpTypeId type() const { + return mtpc_account_deleteAccount; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_deleteAccount) { + vreason.read(from, end); + } + void write(mtpBuffer &to) const { + vreason.write(to); + } + + typedef MTPBool ResponseType; +}; +class MTPaccount_DeleteAccount : public MTPBoxed { +public: + MTPaccount_DeleteAccount() { + } + MTPaccount_DeleteAccount(const MTPaccount_deleteAccount &v) : MTPBoxed(v) { + } + MTPaccount_DeleteAccount(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPaccount_DeleteAccount(const MTPstring &_reason) : MTPBoxed(MTPaccount_deleteAccount(_reason)) { + } +}; + +class MTPaccount_getAccountTTL { // RPC method 'account.getAccountTTL' +public: + MTPaccount_getAccountTTL() { + } + MTPaccount_getAccountTTL(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getAccountTTL) { + read(from, end, cons); + } + + uint32 innerLength() const { + return 0; + } + mtpTypeId type() const { + return mtpc_account_getAccountTTL; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_getAccountTTL) { + } + void write(mtpBuffer &to) const { + } + + typedef MTPAccountDaysTTL ResponseType; +}; +class MTPaccount_GetAccountTTL : public MTPBoxed { +public: + MTPaccount_GetAccountTTL() { + } + MTPaccount_GetAccountTTL(const MTPaccount_getAccountTTL &v) : MTPBoxed(v) { + } + MTPaccount_GetAccountTTL(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } +}; + +class MTPaccount_setAccountTTL { // RPC method 'account.setAccountTTL' +public: + MTPAccountDaysTTL vttl; + + MTPaccount_setAccountTTL() { + } + MTPaccount_setAccountTTL(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_setAccountTTL) { + read(from, end, cons); + } + MTPaccount_setAccountTTL(const MTPAccountDaysTTL &_ttl) : vttl(_ttl) { + } + + uint32 innerLength() const { + return vttl.innerLength(); + } + mtpTypeId type() const { + return mtpc_account_setAccountTTL; + } + void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_account_setAccountTTL) { + vttl.read(from, end); + } + void write(mtpBuffer &to) const { + vttl.write(to); + } + + typedef MTPBool ResponseType; +}; +class MTPaccount_SetAccountTTL : public MTPBoxed { +public: + MTPaccount_SetAccountTTL() { + } + MTPaccount_SetAccountTTL(const MTPaccount_setAccountTTL &v) : MTPBoxed(v) { + } + MTPaccount_SetAccountTTL(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = 0) : MTPBoxed(from, end, cons) { + } + MTPaccount_SetAccountTTL(const MTPAccountDaysTTL &_ttl) : MTPBoxed(MTPaccount_setAccountTTL(_ttl)) { + } +}; + // Inline methods definition inline MTPresPQ::MTPresPQ() : mtpDataOwner(new MTPDresPQ()) { } -inline uint32 MTPresPQ::size() const { +inline uint32 MTPresPQ::innerLength() const { const MTPDresPQ &v(c_resPQ()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vpq.size() + v.vserver_public_key_fingerprints.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vpq.innerLength() + v.vserver_public_key_fingerprints.innerLength(); } inline mtpTypeId MTPresPQ::type() const { return mtpc_resPQ; @@ -13974,9 +14517,9 @@ inline MTPresPQ MTP_resPQ(const MTPint128 &_nonce, const MTPint128 &_server_nonc inline MTPp_Q_inner_data::MTPp_Q_inner_data() : mtpDataOwner(new MTPDp_q_inner_data()) { } -inline uint32 MTPp_Q_inner_data::size() const { +inline uint32 MTPp_Q_inner_data::innerLength() const { const MTPDp_q_inner_data &v(c_p_q_inner_data()); - return v.vpq.size() + v.vp.size() + v.vq.size() + v.vnonce.size() + v.vserver_nonce.size() + v.vnew_nonce.size(); + return v.vpq.innerLength() + v.vp.innerLength() + v.vq.innerLength() + v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vnew_nonce.innerLength(); } inline mtpTypeId MTPp_Q_inner_data::type() const { return mtpc_p_q_inner_data; @@ -14008,15 +14551,15 @@ inline MTPp_Q_inner_data MTP_p_q_inner_data(const MTPstring &_pq, const MTPstrin return MTPp_Q_inner_data(new MTPDp_q_inner_data(_pq, _p, _q, _nonce, _server_nonce, _new_nonce)); } -inline uint32 MTPserver_DH_Params::size() const { +inline uint32 MTPserver_DH_Params::innerLength() const { switch (_type) { case mtpc_server_DH_params_fail: { const MTPDserver_DH_params_fail &v(c_server_DH_params_fail()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vnew_nonce_hash.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vnew_nonce_hash.innerLength(); } case mtpc_server_DH_params_ok: { const MTPDserver_DH_params_ok &v(c_server_DH_params_ok()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vencrypted_answer.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vencrypted_answer.innerLength(); } } return 0; @@ -14082,9 +14625,9 @@ inline MTPserver_DH_Params MTP_server_DH_params_ok(const MTPint128 &_nonce, cons inline MTPserver_DH_inner_data::MTPserver_DH_inner_data() : mtpDataOwner(new MTPDserver_DH_inner_data()) { } -inline uint32 MTPserver_DH_inner_data::size() const { +inline uint32 MTPserver_DH_inner_data::innerLength() const { const MTPDserver_DH_inner_data &v(c_server_DH_inner_data()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vg.size() + v.vdh_prime.size() + v.vg_a.size() + v.vserver_time.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vg.innerLength() + v.vdh_prime.innerLength() + v.vg_a.innerLength() + v.vserver_time.innerLength(); } inline mtpTypeId MTPserver_DH_inner_data::type() const { return mtpc_server_DH_inner_data; @@ -14119,9 +14662,9 @@ inline MTPserver_DH_inner_data MTP_server_DH_inner_data(const MTPint128 &_nonce, inline MTPclient_DH_Inner_Data::MTPclient_DH_Inner_Data() : mtpDataOwner(new MTPDclient_DH_inner_data()) { } -inline uint32 MTPclient_DH_Inner_Data::size() const { +inline uint32 MTPclient_DH_Inner_Data::innerLength() const { const MTPDclient_DH_inner_data &v(c_client_DH_inner_data()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vretry_id.size() + v.vg_b.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vretry_id.innerLength() + v.vg_b.innerLength(); } inline mtpTypeId MTPclient_DH_Inner_Data::type() const { return mtpc_client_DH_inner_data; @@ -14149,19 +14692,19 @@ inline MTPclient_DH_Inner_Data MTP_client_DH_inner_data(const MTPint128 &_nonce, return MTPclient_DH_Inner_Data(new MTPDclient_DH_inner_data(_nonce, _server_nonce, _retry_id, _g_b)); } -inline uint32 MTPset_client_DH_params_answer::size() const { +inline uint32 MTPset_client_DH_params_answer::innerLength() const { switch (_type) { case mtpc_dh_gen_ok: { const MTPDdh_gen_ok &v(c_dh_gen_ok()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vnew_nonce_hash1.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vnew_nonce_hash1.innerLength(); } case mtpc_dh_gen_retry: { const MTPDdh_gen_retry &v(c_dh_gen_retry()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vnew_nonce_hash2.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vnew_nonce_hash2.innerLength(); } case mtpc_dh_gen_fail: { const MTPDdh_gen_fail &v(c_dh_gen_fail()); - return v.vnonce.size() + v.vserver_nonce.size() + v.vnew_nonce_hash3.size(); + return v.vnonce.innerLength() + v.vserver_nonce.innerLength() + v.vnew_nonce_hash3.innerLength(); } } return 0; @@ -14246,9 +14789,9 @@ inline MTPset_client_DH_params_answer MTP_dh_gen_fail(const MTPint128 &_nonce, c inline MTPmsgsAck::MTPmsgsAck() : mtpDataOwner(new MTPDmsgs_ack()) { } -inline uint32 MTPmsgsAck::size() const { +inline uint32 MTPmsgsAck::innerLength() const { const MTPDmsgs_ack &v(c_msgs_ack()); - return v.vmsg_ids.size(); + return v.vmsg_ids.innerLength(); } inline mtpTypeId MTPmsgsAck::type() const { return mtpc_msgs_ack; @@ -14270,15 +14813,15 @@ inline MTPmsgsAck MTP_msgs_ack(const MTPVector &_msg_ids) { return MTPmsgsAck(new MTPDmsgs_ack(_msg_ids)); } -inline uint32 MTPbadMsgNotification::size() const { +inline uint32 MTPbadMsgNotification::innerLength() const { switch (_type) { case mtpc_bad_msg_notification: { const MTPDbad_msg_notification &v(c_bad_msg_notification()); - return v.vbad_msg_id.size() + v.vbad_msg_seqno.size() + v.verror_code.size(); + return v.vbad_msg_id.innerLength() + v.vbad_msg_seqno.innerLength() + v.verror_code.innerLength(); } case mtpc_bad_server_salt: { const MTPDbad_server_salt &v(c_bad_server_salt()); - return v.vbad_msg_id.size() + v.vbad_msg_seqno.size() + v.verror_code.size() + v.vnew_server_salt.size(); + return v.vbad_msg_id.innerLength() + v.vbad_msg_seqno.innerLength() + v.verror_code.innerLength() + v.vnew_server_salt.innerLength(); } } return 0; @@ -14346,9 +14889,9 @@ inline MTPbadMsgNotification MTP_bad_server_salt(const MTPlong &_bad_msg_id, MTP inline MTPmsgsStateReq::MTPmsgsStateReq() : mtpDataOwner(new MTPDmsgs_state_req()) { } -inline uint32 MTPmsgsStateReq::size() const { +inline uint32 MTPmsgsStateReq::innerLength() const { const MTPDmsgs_state_req &v(c_msgs_state_req()); - return v.vmsg_ids.size(); + return v.vmsg_ids.innerLength(); } inline mtpTypeId MTPmsgsStateReq::type() const { return mtpc_msgs_state_req; @@ -14373,9 +14916,9 @@ inline MTPmsgsStateReq MTP_msgs_state_req(const MTPVector &_msg_ids) { inline MTPmsgsStateInfo::MTPmsgsStateInfo() : mtpDataOwner(new MTPDmsgs_state_info()) { } -inline uint32 MTPmsgsStateInfo::size() const { +inline uint32 MTPmsgsStateInfo::innerLength() const { const MTPDmsgs_state_info &v(c_msgs_state_info()); - return v.vreq_msg_id.size() + v.vinfo.size(); + return v.vreq_msg_id.innerLength() + v.vinfo.innerLength(); } inline mtpTypeId MTPmsgsStateInfo::type() const { return mtpc_msgs_state_info; @@ -14402,9 +14945,9 @@ inline MTPmsgsStateInfo MTP_msgs_state_info(const MTPlong &_req_msg_id, const MT inline MTPmsgsAllInfo::MTPmsgsAllInfo() : mtpDataOwner(new MTPDmsgs_all_info()) { } -inline uint32 MTPmsgsAllInfo::size() const { +inline uint32 MTPmsgsAllInfo::innerLength() const { const MTPDmsgs_all_info &v(c_msgs_all_info()); - return v.vmsg_ids.size() + v.vinfo.size(); + return v.vmsg_ids.innerLength() + v.vinfo.innerLength(); } inline mtpTypeId MTPmsgsAllInfo::type() const { return mtpc_msgs_all_info; @@ -14428,15 +14971,15 @@ inline MTPmsgsAllInfo MTP_msgs_all_info(const MTPVector &_msg_ids, cons return MTPmsgsAllInfo(new MTPDmsgs_all_info(_msg_ids, _info)); } -inline uint32 MTPmsgDetailedInfo::size() const { +inline uint32 MTPmsgDetailedInfo::innerLength() const { switch (_type) { case mtpc_msg_detailed_info: { const MTPDmsg_detailed_info &v(c_msg_detailed_info()); - return v.vmsg_id.size() + v.vanswer_msg_id.size() + v.vbytes.size() + v.vstatus.size(); + return v.vmsg_id.innerLength() + v.vanswer_msg_id.innerLength() + v.vbytes.innerLength() + v.vstatus.innerLength(); } case mtpc_msg_new_detailed_info: { const MTPDmsg_new_detailed_info &v(c_msg_new_detailed_info()); - return v.vanswer_msg_id.size() + v.vbytes.size() + v.vstatus.size(); + return v.vanswer_msg_id.innerLength() + v.vbytes.innerLength() + v.vstatus.innerLength(); } } return 0; @@ -14504,9 +15047,9 @@ inline MTPmsgDetailedInfo MTP_msg_new_detailed_info(const MTPlong &_answer_msg_i inline MTPmsgResendReq::MTPmsgResendReq() : mtpDataOwner(new MTPDmsg_resend_req()) { } -inline uint32 MTPmsgResendReq::size() const { +inline uint32 MTPmsgResendReq::innerLength() const { const MTPDmsg_resend_req &v(c_msg_resend_req()); - return v.vmsg_ids.size(); + return v.vmsg_ids.innerLength(); } inline mtpTypeId MTPmsgResendReq::type() const { return mtpc_msg_resend_req; @@ -14531,9 +15074,9 @@ inline MTPmsgResendReq MTP_msg_resend_req(const MTPVector &_msg_ids) { inline MTPrpcError::MTPrpcError() : mtpDataOwner(new MTPDrpc_error()) { } -inline uint32 MTPrpcError::size() const { +inline uint32 MTPrpcError::innerLength() const { const MTPDrpc_error &v(c_rpc_error()); - return v.verror_code.size() + v.verror_message.size(); + return v.verror_code.innerLength() + v.verror_message.innerLength(); } inline mtpTypeId MTPrpcError::type() const { return mtpc_rpc_error; @@ -14557,11 +15100,11 @@ inline MTPrpcError MTP_rpc_error(MTPint _error_code, const MTPstring &_error_mes return MTPrpcError(new MTPDrpc_error(_error_code, _error_message)); } -inline uint32 MTPrpcDropAnswer::size() const { +inline uint32 MTPrpcDropAnswer::innerLength() const { switch (_type) { case mtpc_rpc_answer_dropped: { const MTPDrpc_answer_dropped &v(c_rpc_answer_dropped()); - return v.vmsg_id.size() + v.vseq_no.size() + v.vbytes.size(); + return v.vmsg_id.innerLength() + v.vseq_no.innerLength() + v.vbytes.innerLength(); } } return 0; @@ -14618,9 +15161,9 @@ inline MTPrpcDropAnswer MTP_rpc_answer_dropped(const MTPlong &_msg_id, MTPint _s inline MTPfutureSalt::MTPfutureSalt() : mtpDataOwner(new MTPDfuture_salt()) { } -inline uint32 MTPfutureSalt::size() const { +inline uint32 MTPfutureSalt::innerLength() const { const MTPDfuture_salt &v(c_future_salt()); - return v.vvalid_since.size() + v.vvalid_until.size() + v.vsalt.size(); + return v.vvalid_since.innerLength() + v.vvalid_until.innerLength() + v.vsalt.innerLength(); } inline mtpTypeId MTPfutureSalt::type() const { return mtpc_future_salt; @@ -14649,9 +15192,9 @@ inline MTPfutureSalt MTP_future_salt(MTPint _valid_since, MTPint _valid_until, c inline MTPfutureSalts::MTPfutureSalts() : mtpDataOwner(new MTPDfuture_salts()) { } -inline uint32 MTPfutureSalts::size() const { +inline uint32 MTPfutureSalts::innerLength() const { const MTPDfuture_salts &v(c_future_salts()); - return v.vreq_msg_id.size() + v.vnow.size() + v.vsalts.size(); + return v.vreq_msg_id.innerLength() + v.vnow.innerLength() + v.vsalts.innerLength(); } inline mtpTypeId MTPfutureSalts::type() const { return mtpc_future_salts; @@ -14680,9 +15223,9 @@ inline MTPfutureSalts MTP_future_salts(const MTPlong &_req_msg_id, MTPint _now, inline MTPpong::MTPpong() : mtpDataOwner(new MTPDpong()) { } -inline uint32 MTPpong::size() const { +inline uint32 MTPpong::innerLength() const { const MTPDpong &v(c_pong()); - return v.vmsg_id.size() + v.vping_id.size(); + return v.vmsg_id.innerLength() + v.vping_id.innerLength(); } inline mtpTypeId MTPpong::type() const { return mtpc_pong; @@ -14706,15 +15249,15 @@ inline MTPpong MTP_pong(const MTPlong &_msg_id, const MTPlong &_ping_id) { return MTPpong(new MTPDpong(_msg_id, _ping_id)); } -inline uint32 MTPdestroySessionRes::size() const { +inline uint32 MTPdestroySessionRes::innerLength() const { switch (_type) { case mtpc_destroy_session_ok: { const MTPDdestroy_session_ok &v(c_destroy_session_ok()); - return v.vsession_id.size(); + return v.vsession_id.innerLength(); } case mtpc_destroy_session_none: { const MTPDdestroy_session_none &v(c_destroy_session_none()); - return v.vsession_id.size(); + return v.vsession_id.innerLength(); } } return 0; @@ -14772,9 +15315,9 @@ inline MTPdestroySessionRes MTP_destroy_session_none(const MTPlong &_session_id) inline MTPnewSession::MTPnewSession() : mtpDataOwner(new MTPDnew_session_created()) { } -inline uint32 MTPnewSession::size() const { +inline uint32 MTPnewSession::innerLength() const { const MTPDnew_session_created &v(c_new_session_created()); - return v.vfirst_msg_id.size() + v.vunique_id.size() + v.vserver_salt.size(); + return v.vfirst_msg_id.innerLength() + v.vunique_id.innerLength() + v.vserver_salt.innerLength(); } inline mtpTypeId MTPnewSession::type() const { return mtpc_new_session_created; @@ -14803,9 +15346,9 @@ inline MTPnewSession MTP_new_session_created(const MTPlong &_first_msg_id, const inline MTPhttpWait::MTPhttpWait() : mtpDataOwner(new MTPDhttp_wait()) { } -inline uint32 MTPhttpWait::size() const { +inline uint32 MTPhttpWait::innerLength() const { const MTPDhttp_wait &v(c_http_wait()); - return v.vmax_delay.size() + v.vwait_after.size() + v.vmax_wait.size(); + return v.vmax_delay.innerLength() + v.vwait_after.innerLength() + v.vmax_wait.innerLength(); } inline mtpTypeId MTPhttpWait::type() const { return mtpc_http_wait; @@ -14831,19 +15374,19 @@ inline MTPhttpWait MTP_http_wait(MTPint _max_delay, MTPint _wait_after, MTPint _ return MTPhttpWait(new MTPDhttp_wait(_max_delay, _wait_after, _max_wait)); } -inline uint32 MTPinputPeer::size() const { +inline uint32 MTPinputPeer::innerLength() const { switch (_type) { case mtpc_inputPeerContact: { const MTPDinputPeerContact &v(c_inputPeerContact()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_inputPeerForeign: { const MTPDinputPeerForeign &v(c_inputPeerForeign()); - return v.vuser_id.size() + v.vaccess_hash.size(); + return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); } case mtpc_inputPeerChat: { const MTPDinputPeerChat &v(c_inputPeerChat()); - return v.vchat_id.size(); + return v.vchat_id.innerLength(); } } return 0; @@ -14925,15 +15468,15 @@ inline MTPinputPeer MTP_inputPeerChat(MTPint _chat_id) { return MTPinputPeer(new MTPDinputPeerChat(_chat_id)); } -inline uint32 MTPinputUser::size() const { +inline uint32 MTPinputUser::innerLength() const { switch (_type) { case mtpc_inputUserContact: { const MTPDinputUserContact &v(c_inputUserContact()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_inputUserForeign: { const MTPDinputUserForeign &v(c_inputUserForeign()); - return v.vuser_id.size() + v.vaccess_hash.size(); + return v.vuser_id.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -15003,9 +15546,9 @@ inline MTPinputUser MTP_inputUserForeign(MTPint _user_id, const MTPlong &_access inline MTPinputContact::MTPinputContact() : mtpDataOwner(new MTPDinputPhoneContact()) { } -inline uint32 MTPinputContact::size() const { +inline uint32 MTPinputContact::innerLength() const { const MTPDinputPhoneContact &v(c_inputPhoneContact()); - return v.vclient_id.size() + v.vphone.size() + v.vfirst_name.size() + v.vlast_name.size(); + return v.vclient_id.innerLength() + v.vphone.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength(); } inline mtpTypeId MTPinputContact::type() const { return mtpc_inputPhoneContact; @@ -15033,15 +15576,15 @@ inline MTPinputContact MTP_inputPhoneContact(const MTPlong &_client_id, const MT return MTPinputContact(new MTPDinputPhoneContact(_client_id, _phone, _first_name, _last_name)); } -inline uint32 MTPinputFile::size() const { +inline uint32 MTPinputFile::innerLength() const { switch (_type) { case mtpc_inputFile: { const MTPDinputFile &v(c_inputFile()); - return v.vid.size() + v.vparts.size() + v.vname.size() + v.vmd5_checksum.size(); + return v.vid.innerLength() + v.vparts.innerLength() + v.vname.innerLength() + v.vmd5_checksum.innerLength(); } case mtpc_inputFileBig: { const MTPDinputFileBig &v(c_inputFileBig()); - return v.vid.size() + v.vparts.size() + v.vname.size(); + return v.vid.innerLength() + v.vparts.innerLength() + v.vname.innerLength(); } } return 0; @@ -15106,55 +15649,55 @@ inline MTPinputFile MTP_inputFileBig(const MTPlong &_id, MTPint _parts, const MT return MTPinputFile(new MTPDinputFileBig(_id, _parts, _name)); } -inline uint32 MTPinputMedia::size() const { +inline uint32 MTPinputMedia::innerLength() const { switch (_type) { case mtpc_inputMediaUploadedPhoto: { const MTPDinputMediaUploadedPhoto &v(c_inputMediaUploadedPhoto()); - return v.vfile.size(); + return v.vfile.innerLength(); } case mtpc_inputMediaPhoto: { const MTPDinputMediaPhoto &v(c_inputMediaPhoto()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_inputMediaGeoPoint: { const MTPDinputMediaGeoPoint &v(c_inputMediaGeoPoint()); - return v.vgeo_point.size(); + return v.vgeo_point.innerLength(); } case mtpc_inputMediaContact: { const MTPDinputMediaContact &v(c_inputMediaContact()); - return v.vphone_number.size() + v.vfirst_name.size() + v.vlast_name.size(); + return v.vphone_number.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength(); } case mtpc_inputMediaUploadedVideo: { const MTPDinputMediaUploadedVideo &v(c_inputMediaUploadedVideo()); - return v.vfile.size() + v.vduration.size() + v.vw.size() + v.vh.size() + v.vmime_type.size(); + return v.vfile.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vmime_type.innerLength(); } case mtpc_inputMediaUploadedThumbVideo: { const MTPDinputMediaUploadedThumbVideo &v(c_inputMediaUploadedThumbVideo()); - return v.vfile.size() + v.vthumb.size() + v.vduration.size() + v.vw.size() + v.vh.size() + v.vmime_type.size(); + return v.vfile.innerLength() + v.vthumb.innerLength() + v.vduration.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vmime_type.innerLength(); } case mtpc_inputMediaVideo: { const MTPDinputMediaVideo &v(c_inputMediaVideo()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_inputMediaUploadedAudio: { const MTPDinputMediaUploadedAudio &v(c_inputMediaUploadedAudio()); - return v.vfile.size() + v.vduration.size() + v.vmime_type.size(); + return v.vfile.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength(); } case mtpc_inputMediaAudio: { const MTPDinputMediaAudio &v(c_inputMediaAudio()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_inputMediaUploadedDocument: { const MTPDinputMediaUploadedDocument &v(c_inputMediaUploadedDocument()); - return v.vfile.size() + v.vfile_name.size() + v.vmime_type.size(); + return v.vfile.innerLength() + v.vfile_name.innerLength() + v.vmime_type.innerLength(); } case mtpc_inputMediaUploadedThumbDocument: { const MTPDinputMediaUploadedThumbDocument &v(c_inputMediaUploadedThumbDocument()); - return v.vfile.size() + v.vthumb.size() + v.vfile_name.size() + v.vmime_type.size(); + return v.vfile.innerLength() + v.vthumb.innerLength() + v.vfile_name.innerLength() + v.vmime_type.innerLength(); } case mtpc_inputMediaDocument: { const MTPDinputMediaDocument &v(c_inputMediaDocument()); - return v.vid.size(); + return v.vid.innerLength(); } } return 0; @@ -15400,15 +15943,15 @@ inline MTPinputMedia MTP_inputMediaDocument(const MTPInputDocument &_id) { return MTPinputMedia(new MTPDinputMediaDocument(_id)); } -inline uint32 MTPinputChatPhoto::size() const { +inline uint32 MTPinputChatPhoto::innerLength() const { switch (_type) { case mtpc_inputChatUploadedPhoto: { const MTPDinputChatUploadedPhoto &v(c_inputChatUploadedPhoto()); - return v.vfile.size() + v.vcrop.size(); + return v.vfile.innerLength() + v.vcrop.innerLength(); } case mtpc_inputChatPhoto: { const MTPDinputChatPhoto &v(c_inputChatPhoto()); - return v.vid.size() + v.vcrop.size(); + return v.vid.innerLength() + v.vcrop.innerLength(); } } return 0; @@ -15472,11 +16015,11 @@ inline MTPinputChatPhoto MTP_inputChatPhoto(const MTPInputPhoto &_id, const MTPI return MTPinputChatPhoto(new MTPDinputChatPhoto(_id, _crop)); } -inline uint32 MTPinputGeoPoint::size() const { +inline uint32 MTPinputGeoPoint::innerLength() const { switch (_type) { case mtpc_inputGeoPoint: { const MTPDinputGeoPoint &v(c_inputGeoPoint()); - return v.vlat.size() + v.vlong.size(); + return v.vlat.innerLength() + v.vlong.innerLength(); } } return 0; @@ -15523,11 +16066,11 @@ inline MTPinputGeoPoint MTP_inputGeoPoint(const MTPdouble &_lat, const MTPdouble return MTPinputGeoPoint(new MTPDinputGeoPoint(_lat, _long)); } -inline uint32 MTPinputPhoto::size() const { +inline uint32 MTPinputPhoto::innerLength() const { switch (_type) { case mtpc_inputPhoto: { const MTPDinputPhoto &v(c_inputPhoto()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -15574,11 +16117,11 @@ inline MTPinputPhoto MTP_inputPhoto(const MTPlong &_id, const MTPlong &_access_h return MTPinputPhoto(new MTPDinputPhoto(_id, _access_hash)); } -inline uint32 MTPinputVideo::size() const { +inline uint32 MTPinputVideo::innerLength() const { switch (_type) { case mtpc_inputVideo: { const MTPDinputVideo &v(c_inputVideo()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -15625,27 +16168,27 @@ inline MTPinputVideo MTP_inputVideo(const MTPlong &_id, const MTPlong &_access_h return MTPinputVideo(new MTPDinputVideo(_id, _access_hash)); } -inline uint32 MTPinputFileLocation::size() const { +inline uint32 MTPinputFileLocation::innerLength() const { switch (_type) { case mtpc_inputFileLocation: { const MTPDinputFileLocation &v(c_inputFileLocation()); - return v.vvolume_id.size() + v.vlocal_id.size() + v.vsecret.size(); + return v.vvolume_id.innerLength() + v.vlocal_id.innerLength() + v.vsecret.innerLength(); } case mtpc_inputVideoFileLocation: { const MTPDinputVideoFileLocation &v(c_inputVideoFileLocation()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } case mtpc_inputEncryptedFileLocation: { const MTPDinputEncryptedFileLocation &v(c_inputEncryptedFileLocation()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } case mtpc_inputAudioFileLocation: { const MTPDinputAudioFileLocation &v(c_inputAudioFileLocation()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } case mtpc_inputDocumentFileLocation: { const MTPDinputDocumentFileLocation &v(c_inputDocumentFileLocation()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -15757,11 +16300,11 @@ inline MTPinputFileLocation MTP_inputDocumentFileLocation(const MTPlong &_id, co return MTPinputFileLocation(new MTPDinputDocumentFileLocation(_id, _access_hash)); } -inline uint32 MTPinputPhotoCrop::size() const { +inline uint32 MTPinputPhotoCrop::innerLength() const { switch (_type) { case mtpc_inputPhotoCrop: { const MTPDinputPhotoCrop &v(c_inputPhotoCrop()); - return v.vcrop_left.size() + v.vcrop_top.size() + v.vcrop_width.size(); + return v.vcrop_left.innerLength() + v.vcrop_top.innerLength() + v.vcrop_width.innerLength(); } } return 0; @@ -15813,9 +16356,9 @@ inline MTPinputPhotoCrop MTP_inputPhotoCrop(const MTPdouble &_crop_left, const M inline MTPinputAppEvent::MTPinputAppEvent() : mtpDataOwner(new MTPDinputAppEvent()) { } -inline uint32 MTPinputAppEvent::size() const { +inline uint32 MTPinputAppEvent::innerLength() const { const MTPDinputAppEvent &v(c_inputAppEvent()); - return v.vtime.size() + v.vtype.size() + v.vpeer.size() + v.vdata.size(); + return v.vtime.innerLength() + v.vtype.innerLength() + v.vpeer.innerLength() + v.vdata.innerLength(); } inline mtpTypeId MTPinputAppEvent::type() const { return mtpc_inputAppEvent; @@ -15843,15 +16386,15 @@ inline MTPinputAppEvent MTP_inputAppEvent(const MTPdouble &_time, const MTPstrin return MTPinputAppEvent(new MTPDinputAppEvent(_time, _type, _peer, _data)); } -inline uint32 MTPpeer::size() const { +inline uint32 MTPpeer::innerLength() const { switch (_type) { case mtpc_peerUser: { const MTPDpeerUser &v(c_peerUser()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_peerChat: { const MTPDpeerChat &v(c_peerChat()); - return v.vchat_id.size(); + return v.vchat_id.innerLength(); } } return 0; @@ -15906,7 +16449,7 @@ inline MTPpeer MTP_peerChat(MTPint _chat_id) { return MTPpeer(new MTPDpeerChat(_chat_id)); } -inline uint32 MTPstorage_fileType::size() const { +inline uint32 MTPstorage_fileType::innerLength() const { return 0; } inline mtpTypeId MTPstorage_fileType::type() const { @@ -15978,15 +16521,15 @@ inline MTPstorage_fileType MTP_storage_fileWebp() { return MTPstorage_fileType(mtpc_storage_fileWebp); } -inline uint32 MTPfileLocation::size() const { +inline uint32 MTPfileLocation::innerLength() const { switch (_type) { case mtpc_fileLocationUnavailable: { const MTPDfileLocationUnavailable &v(c_fileLocationUnavailable()); - return v.vvolume_id.size() + v.vlocal_id.size() + v.vsecret.size(); + return v.vvolume_id.innerLength() + v.vlocal_id.innerLength() + v.vsecret.innerLength(); } case mtpc_fileLocation: { const MTPDfileLocation &v(c_fileLocation()); - return v.vdc_id.size() + v.vvolume_id.size() + v.vlocal_id.size() + v.vsecret.size(); + return v.vdc_id.innerLength() + v.vvolume_id.innerLength() + v.vlocal_id.innerLength() + v.vsecret.innerLength(); } } return 0; @@ -16051,31 +16594,31 @@ inline MTPfileLocation MTP_fileLocation(MTPint _dc_id, const MTPlong &_volume_id return MTPfileLocation(new MTPDfileLocation(_dc_id, _volume_id, _local_id, _secret)); } -inline uint32 MTPuser::size() const { +inline uint32 MTPuser::innerLength() const { switch (_type) { case mtpc_userEmpty: { const MTPDuserEmpty &v(c_userEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_userSelf: { const MTPDuserSelf &v(c_userSelf()); - return v.vid.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size() + v.vphone.size() + v.vphoto.size() + v.vstatus.size() + v.vinactive.size(); + return v.vid.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength() + v.vphone.innerLength() + v.vphoto.innerLength() + v.vstatus.innerLength() + v.vinactive.innerLength(); } case mtpc_userContact: { const MTPDuserContact &v(c_userContact()); - return v.vid.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size() + v.vaccess_hash.size() + v.vphone.size() + v.vphoto.size() + v.vstatus.size(); + return v.vid.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength() + v.vaccess_hash.innerLength() + v.vphone.innerLength() + v.vphoto.innerLength() + v.vstatus.innerLength(); } case mtpc_userRequest: { const MTPDuserRequest &v(c_userRequest()); - return v.vid.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size() + v.vaccess_hash.size() + v.vphone.size() + v.vphoto.size() + v.vstatus.size(); + return v.vid.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength() + v.vaccess_hash.innerLength() + v.vphone.innerLength() + v.vphoto.innerLength() + v.vstatus.innerLength(); } case mtpc_userForeign: { const MTPDuserForeign &v(c_userForeign()); - return v.vid.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size() + v.vaccess_hash.size() + v.vphoto.size() + v.vstatus.size(); + return v.vid.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength() + v.vaccess_hash.innerLength() + v.vphoto.innerLength() + v.vstatus.innerLength(); } case mtpc_userDeleted: { const MTPDuserDeleted &v(c_userDeleted()); - return v.vid.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size(); + return v.vid.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength(); } } return 0; @@ -16250,11 +16793,11 @@ inline MTPuser MTP_userDeleted(MTPint _id, const MTPstring &_first_name, const M return MTPuser(new MTPDuserDeleted(_id, _first_name, _last_name, _username)); } -inline uint32 MTPuserProfilePhoto::size() const { +inline uint32 MTPuserProfilePhoto::innerLength() const { switch (_type) { case mtpc_userProfilePhoto: { const MTPDuserProfilePhoto &v(c_userProfilePhoto()); - return v.vphoto_id.size() + v.vphoto_small.size() + v.vphoto_big.size(); + return v.vphoto_id.innerLength() + v.vphoto_small.innerLength() + v.vphoto_big.innerLength(); } } return 0; @@ -16303,15 +16846,15 @@ inline MTPuserProfilePhoto MTP_userProfilePhoto(const MTPlong &_photo_id, const return MTPuserProfilePhoto(new MTPDuserProfilePhoto(_photo_id, _photo_small, _photo_big)); } -inline uint32 MTPuserStatus::size() const { +inline uint32 MTPuserStatus::innerLength() const { switch (_type) { case mtpc_userStatusOnline: { const MTPDuserStatusOnline &v(c_userStatusOnline()); - return v.vexpires.size(); + return v.vexpires.innerLength(); } case mtpc_userStatusOffline: { const MTPDuserStatusOffline &v(c_userStatusOffline()); - return v.vwas_online.size(); + return v.vwas_online.innerLength(); } } return 0; @@ -16334,6 +16877,9 @@ inline void MTPuserStatus::read(const mtpPrime *&from, const mtpPrime *end, mtpT MTPDuserStatusOffline &v(_userStatusOffline()); v.vwas_online.read(from, end); } break; + case mtpc_userStatusRecently: _type = cons; break; + case mtpc_userStatusLastWeek: _type = cons; break; + case mtpc_userStatusLastMonth: _type = cons; break; default: throw mtpErrorUnexpected(cons, "MTPuserStatus"); } } @@ -16354,6 +16900,9 @@ inline MTPuserStatus::MTPuserStatus(mtpTypeId type) : mtpDataOwner(0), _type(typ case mtpc_userStatusEmpty: break; case mtpc_userStatusOnline: setData(new MTPDuserStatusOnline()); break; case mtpc_userStatusOffline: setData(new MTPDuserStatusOffline()); break; + case mtpc_userStatusRecently: break; + case mtpc_userStatusLastWeek: break; + case mtpc_userStatusLastMonth: break; default: throw mtpErrorBadTypeId(type, "MTPuserStatus"); } } @@ -16370,24 +16919,33 @@ inline MTPuserStatus MTP_userStatusOnline(MTPint _expires) { inline MTPuserStatus MTP_userStatusOffline(MTPint _was_online) { return MTPuserStatus(new MTPDuserStatusOffline(_was_online)); } +inline MTPuserStatus MTP_userStatusRecently() { + return MTPuserStatus(mtpc_userStatusRecently); +} +inline MTPuserStatus MTP_userStatusLastWeek() { + return MTPuserStatus(mtpc_userStatusLastWeek); +} +inline MTPuserStatus MTP_userStatusLastMonth() { + return MTPuserStatus(mtpc_userStatusLastMonth); +} -inline uint32 MTPchat::size() const { +inline uint32 MTPchat::innerLength() const { switch (_type) { case mtpc_chatEmpty: { const MTPDchatEmpty &v(c_chatEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_chat: { const MTPDchat &v(c_chat()); - return v.vid.size() + v.vtitle.size() + v.vphoto.size() + v.vparticipants_count.size() + v.vdate.size() + v.vleft.size() + v.vversion.size(); + return v.vid.innerLength() + v.vtitle.innerLength() + v.vphoto.innerLength() + v.vparticipants_count.innerLength() + v.vdate.innerLength() + v.vleft.innerLength() + v.vversion.innerLength(); } case mtpc_chatForbidden: { const MTPDchatForbidden &v(c_chatForbidden()); - return v.vid.size() + v.vtitle.size() + v.vdate.size(); + return v.vid.innerLength() + v.vtitle.innerLength() + v.vdate.innerLength(); } case mtpc_geoChat: { const MTPDgeoChat &v(c_geoChat()); - return v.vid.size() + v.vaccess_hash.size() + v.vtitle.size() + v.vaddress.size() + v.vvenue.size() + v.vgeo.size() + v.vphoto.size() + v.vparticipants_count.size() + v.vdate.size() + v.vchecked_in.size() + v.vversion.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vtitle.innerLength() + v.vaddress.innerLength() + v.vvenue.innerLength() + v.vgeo.innerLength() + v.vphoto.innerLength() + v.vparticipants_count.innerLength() + v.vdate.innerLength() + v.vchecked_in.innerLength() + v.vversion.innerLength(); } } return 0; @@ -16511,9 +17069,9 @@ inline MTPchat MTP_geoChat(MTPint _id, const MTPlong &_access_hash, const MTPstr inline MTPchatFull::MTPchatFull() : mtpDataOwner(new MTPDchatFull()) { } -inline uint32 MTPchatFull::size() const { +inline uint32 MTPchatFull::innerLength() const { const MTPDchatFull &v(c_chatFull()); - return v.vid.size() + v.vparticipants.size() + v.vchat_photo.size() + v.vnotify_settings.size(); + return v.vid.innerLength() + v.vparticipants.innerLength() + v.vchat_photo.innerLength() + v.vnotify_settings.innerLength(); } inline mtpTypeId MTPchatFull::type() const { return mtpc_chatFull; @@ -16544,9 +17102,9 @@ inline MTPchatFull MTP_chatFull(MTPint _id, const MTPChatParticipants &_particip inline MTPchatParticipant::MTPchatParticipant() : mtpDataOwner(new MTPDchatParticipant()) { } -inline uint32 MTPchatParticipant::size() const { +inline uint32 MTPchatParticipant::innerLength() const { const MTPDchatParticipant &v(c_chatParticipant()); - return v.vuser_id.size() + v.vinviter_id.size() + v.vdate.size(); + return v.vuser_id.innerLength() + v.vinviter_id.innerLength() + v.vdate.innerLength(); } inline mtpTypeId MTPchatParticipant::type() const { return mtpc_chatParticipant; @@ -16572,15 +17130,15 @@ inline MTPchatParticipant MTP_chatParticipant(MTPint _user_id, MTPint _inviter_i return MTPchatParticipant(new MTPDchatParticipant(_user_id, _inviter_id, _date)); } -inline uint32 MTPchatParticipants::size() const { +inline uint32 MTPchatParticipants::innerLength() const { switch (_type) { case mtpc_chatParticipantsForbidden: { const MTPDchatParticipantsForbidden &v(c_chatParticipantsForbidden()); - return v.vchat_id.size(); + return v.vchat_id.innerLength(); } case mtpc_chatParticipants: { const MTPDchatParticipants &v(c_chatParticipants()); - return v.vchat_id.size() + v.vadmin_id.size() + v.vparticipants.size() + v.vversion.size(); + return v.vchat_id.innerLength() + v.vadmin_id.innerLength() + v.vparticipants.innerLength() + v.vversion.innerLength(); } } return 0; @@ -16641,11 +17199,11 @@ inline MTPchatParticipants MTP_chatParticipants(MTPint _chat_id, MTPint _admin_i return MTPchatParticipants(new MTPDchatParticipants(_chat_id, _admin_id, _participants, _version)); } -inline uint32 MTPchatPhoto::size() const { +inline uint32 MTPchatPhoto::innerLength() const { switch (_type) { case mtpc_chatPhoto: { const MTPDchatPhoto &v(c_chatPhoto()); - return v.vphoto_small.size() + v.vphoto_big.size(); + return v.vphoto_small.innerLength() + v.vphoto_big.innerLength(); } } return 0; @@ -16692,23 +17250,23 @@ inline MTPchatPhoto MTP_chatPhoto(const MTPFileLocation &_photo_small, const MTP return MTPchatPhoto(new MTPDchatPhoto(_photo_small, _photo_big)); } -inline uint32 MTPmessage::size() const { +inline uint32 MTPmessage::innerLength() const { switch (_type) { case mtpc_messageEmpty: { const MTPDmessageEmpty &v(c_messageEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_message: { const MTPDmessage &v(c_message()); - return v.vflags.size() + v.vid.size() + v.vfrom_id.size() + v.vto_id.size() + v.vdate.size() + v.vmessage.size() + v.vmedia.size(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength(); } case mtpc_messageForwarded: { const MTPDmessageForwarded &v(c_messageForwarded()); - return v.vflags.size() + v.vid.size() + v.vfwd_from_id.size() + v.vfwd_date.size() + v.vfrom_id.size() + v.vto_id.size() + v.vdate.size() + v.vmessage.size() + v.vmedia.size(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfwd_from_id.innerLength() + v.vfwd_date.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + v.vdate.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength(); } case mtpc_messageService: { const MTPDmessageService &v(c_messageService()); - return v.vflags.size() + v.vid.size() + v.vfrom_id.size() + v.vto_id.size() + v.vdate.size() + v.vaction.size(); + return v.vflags.innerLength() + v.vid.innerLength() + v.vfrom_id.innerLength() + v.vto_id.innerLength() + v.vdate.innerLength() + v.vaction.innerLength(); } } return 0; @@ -16831,35 +17389,35 @@ inline MTPmessage MTP_messageService(MTPint _flags, MTPint _id, MTPint _from_id, return MTPmessage(new MTPDmessageService(_flags, _id, _from_id, _to_id, _date, _action)); } -inline uint32 MTPmessageMedia::size() const { +inline uint32 MTPmessageMedia::innerLength() const { switch (_type) { case mtpc_messageMediaPhoto: { const MTPDmessageMediaPhoto &v(c_messageMediaPhoto()); - return v.vphoto.size(); + return v.vphoto.innerLength(); } case mtpc_messageMediaVideo: { const MTPDmessageMediaVideo &v(c_messageMediaVideo()); - return v.vvideo.size(); + return v.vvideo.innerLength(); } case mtpc_messageMediaGeo: { const MTPDmessageMediaGeo &v(c_messageMediaGeo()); - return v.vgeo.size(); + return v.vgeo.innerLength(); } case mtpc_messageMediaContact: { const MTPDmessageMediaContact &v(c_messageMediaContact()); - return v.vphone_number.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vuser_id.size(); + return v.vphone_number.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vuser_id.innerLength(); } case mtpc_messageMediaUnsupported: { const MTPDmessageMediaUnsupported &v(c_messageMediaUnsupported()); - return v.vbytes.size(); + return v.vbytes.innerLength(); } case mtpc_messageMediaDocument: { const MTPDmessageMediaDocument &v(c_messageMediaDocument()); - return v.vdocument.size(); + return v.vdocument.innerLength(); } case mtpc_messageMediaAudio: { const MTPDmessageMediaAudio &v(c_messageMediaAudio()); - return v.vaudio.size(); + return v.vaudio.innerLength(); } } return 0; @@ -17000,31 +17558,31 @@ inline MTPmessageMedia MTP_messageMediaAudio(const MTPAudio &_audio) { return MTPmessageMedia(new MTPDmessageMediaAudio(_audio)); } -inline uint32 MTPmessageAction::size() const { +inline uint32 MTPmessageAction::innerLength() const { switch (_type) { case mtpc_messageActionChatCreate: { const MTPDmessageActionChatCreate &v(c_messageActionChatCreate()); - return v.vtitle.size() + v.vusers.size(); + return v.vtitle.innerLength() + v.vusers.innerLength(); } case mtpc_messageActionChatEditTitle: { const MTPDmessageActionChatEditTitle &v(c_messageActionChatEditTitle()); - return v.vtitle.size(); + return v.vtitle.innerLength(); } case mtpc_messageActionChatEditPhoto: { const MTPDmessageActionChatEditPhoto &v(c_messageActionChatEditPhoto()); - return v.vphoto.size(); + return v.vphoto.innerLength(); } case mtpc_messageActionChatAddUser: { const MTPDmessageActionChatAddUser &v(c_messageActionChatAddUser()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_messageActionChatDeleteUser: { const MTPDmessageActionChatDeleteUser &v(c_messageActionChatDeleteUser()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_messageActionGeoChatCreate: { const MTPDmessageActionGeoChatCreate &v(c_messageActionGeoChatCreate()); - return v.vtitle.size() + v.vaddress.size(); + return v.vtitle.innerLength() + v.vaddress.innerLength(); } } return 0; @@ -17161,9 +17719,9 @@ inline MTPmessageAction MTP_messageActionGeoChatCheckin() { inline MTPdialog::MTPdialog() : mtpDataOwner(new MTPDdialog()) { } -inline uint32 MTPdialog::size() const { +inline uint32 MTPdialog::innerLength() const { const MTPDdialog &v(c_dialog()); - return v.vpeer.size() + v.vtop_message.size() + v.vunread_count.size() + v.vnotify_settings.size(); + return v.vpeer.innerLength() + v.vtop_message.innerLength() + v.vunread_count.innerLength() + v.vnotify_settings.innerLength(); } inline mtpTypeId MTPdialog::type() const { return mtpc_dialog; @@ -17191,15 +17749,15 @@ inline MTPdialog MTP_dialog(const MTPPeer &_peer, MTPint _top_message, MTPint _u return MTPdialog(new MTPDdialog(_peer, _top_message, _unread_count, _notify_settings)); } -inline uint32 MTPphoto::size() const { +inline uint32 MTPphoto::innerLength() const { switch (_type) { case mtpc_photoEmpty: { const MTPDphotoEmpty &v(c_photoEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_photo: { const MTPDphoto &v(c_photo()); - return v.vid.size() + v.vaccess_hash.size() + v.vuser_id.size() + v.vdate.size() + v.vcaption.size() + v.vgeo.size() + v.vsizes.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vcaption.innerLength() + v.vgeo.innerLength() + v.vsizes.innerLength(); } } return 0; @@ -17266,19 +17824,19 @@ inline MTPphoto MTP_photo(const MTPlong &_id, const MTPlong &_access_hash, MTPin return MTPphoto(new MTPDphoto(_id, _access_hash, _user_id, _date, _caption, _geo, _sizes)); } -inline uint32 MTPphotoSize::size() const { +inline uint32 MTPphotoSize::innerLength() const { switch (_type) { case mtpc_photoSizeEmpty: { const MTPDphotoSizeEmpty &v(c_photoSizeEmpty()); - return v.vtype.size(); + return v.vtype.innerLength(); } case mtpc_photoSize: { const MTPDphotoSize &v(c_photoSize()); - return v.vtype.size() + v.vlocation.size() + v.vw.size() + v.vh.size() + v.vsize.size(); + return v.vtype.innerLength() + v.vlocation.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vsize.innerLength(); } case mtpc_photoCachedSize: { const MTPDphotoCachedSize &v(c_photoCachedSize()); - return v.vtype.size() + v.vlocation.size() + v.vw.size() + v.vh.size() + v.vbytes.size(); + return v.vtype.innerLength() + v.vlocation.innerLength() + v.vw.innerLength() + v.vh.innerLength() + v.vbytes.innerLength(); } } return 0; @@ -17364,15 +17922,15 @@ inline MTPphotoSize MTP_photoCachedSize(const MTPstring &_type, const MTPFileLoc return MTPphotoSize(new MTPDphotoCachedSize(_type, _location, _w, _h, _bytes)); } -inline uint32 MTPvideo::size() const { +inline uint32 MTPvideo::innerLength() const { switch (_type) { case mtpc_videoEmpty: { const MTPDvideoEmpty &v(c_videoEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_video: { const MTPDvideo &v(c_video()); - return v.vid.size() + v.vaccess_hash.size() + v.vuser_id.size() + v.vdate.size() + v.vcaption.size() + v.vduration.size() + v.vmime_type.size() + v.vsize.size() + v.vthumb.size() + v.vdc_id.size() + v.vw.size() + v.vh.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vcaption.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength() + v.vw.innerLength() + v.vh.innerLength(); } } return 0; @@ -17449,11 +18007,11 @@ inline MTPvideo MTP_video(const MTPlong &_id, const MTPlong &_access_hash, MTPin return MTPvideo(new MTPDvideo(_id, _access_hash, _user_id, _date, _caption, _duration, _mime_type, _size, _thumb, _dc_id, _w, _h)); } -inline uint32 MTPgeoPoint::size() const { +inline uint32 MTPgeoPoint::innerLength() const { switch (_type) { case mtpc_geoPoint: { const MTPDgeoPoint &v(c_geoPoint()); - return v.vlong.size() + v.vlat.size(); + return v.vlong.innerLength() + v.vlat.innerLength(); } } return 0; @@ -17503,9 +18061,9 @@ inline MTPgeoPoint MTP_geoPoint(const MTPdouble &_long, const MTPdouble &_lat) { inline MTPauth_checkedPhone::MTPauth_checkedPhone() : mtpDataOwner(new MTPDauth_checkedPhone()) { } -inline uint32 MTPauth_checkedPhone::size() const { +inline uint32 MTPauth_checkedPhone::innerLength() const { const MTPDauth_checkedPhone &v(c_auth_checkedPhone()); - return v.vphone_registered.size() + v.vphone_invited.size(); + return v.vphone_registered.innerLength() + v.vphone_invited.innerLength(); } inline mtpTypeId MTPauth_checkedPhone::type() const { return mtpc_auth_checkedPhone; @@ -17529,15 +18087,15 @@ inline MTPauth_checkedPhone MTP_auth_checkedPhone(MTPBool _phone_registered, MTP return MTPauth_checkedPhone(new MTPDauth_checkedPhone(_phone_registered, _phone_invited)); } -inline uint32 MTPauth_sentCode::size() const { +inline uint32 MTPauth_sentCode::innerLength() const { switch (_type) { case mtpc_auth_sentCode: { const MTPDauth_sentCode &v(c_auth_sentCode()); - return v.vphone_registered.size() + v.vphone_code_hash.size() + v.vsend_call_timeout.size() + v.vis_password.size(); + return v.vphone_registered.innerLength() + v.vphone_code_hash.innerLength() + v.vsend_call_timeout.innerLength() + v.vis_password.innerLength(); } case mtpc_auth_sentAppCode: { const MTPDauth_sentAppCode &v(c_auth_sentAppCode()); - return v.vphone_registered.size() + v.vphone_code_hash.size() + v.vsend_call_timeout.size() + v.vis_password.size(); + return v.vphone_registered.innerLength() + v.vphone_code_hash.innerLength() + v.vsend_call_timeout.innerLength() + v.vis_password.innerLength(); } } return 0; @@ -17607,9 +18165,9 @@ inline MTPauth_sentCode MTP_auth_sentAppCode(MTPBool _phone_registered, const MT inline MTPauth_authorization::MTPauth_authorization() : mtpDataOwner(new MTPDauth_authorization()) { } -inline uint32 MTPauth_authorization::size() const { +inline uint32 MTPauth_authorization::innerLength() const { const MTPDauth_authorization &v(c_auth_authorization()); - return v.vexpires.size() + v.vuser.size(); + return v.vexpires.innerLength() + v.vuser.innerLength(); } inline mtpTypeId MTPauth_authorization::type() const { return mtpc_auth_authorization; @@ -17636,9 +18194,9 @@ inline MTPauth_authorization MTP_auth_authorization(MTPint _expires, const MTPUs inline MTPauth_exportedAuthorization::MTPauth_exportedAuthorization() : mtpDataOwner(new MTPDauth_exportedAuthorization()) { } -inline uint32 MTPauth_exportedAuthorization::size() const { +inline uint32 MTPauth_exportedAuthorization::innerLength() const { const MTPDauth_exportedAuthorization &v(c_auth_exportedAuthorization()); - return v.vid.size() + v.vbytes.size(); + return v.vid.innerLength() + v.vbytes.innerLength(); } inline mtpTypeId MTPauth_exportedAuthorization::type() const { return mtpc_auth_exportedAuthorization; @@ -17662,15 +18220,15 @@ inline MTPauth_exportedAuthorization MTP_auth_exportedAuthorization(MTPint _id, return MTPauth_exportedAuthorization(new MTPDauth_exportedAuthorization(_id, _bytes)); } -inline uint32 MTPinputNotifyPeer::size() const { +inline uint32 MTPinputNotifyPeer::innerLength() const { switch (_type) { case mtpc_inputNotifyPeer: { const MTPDinputNotifyPeer &v(c_inputNotifyPeer()); - return v.vpeer.size(); + return v.vpeer.innerLength(); } case mtpc_inputNotifyGeoChatPeer: { const MTPDinputNotifyGeoChatPeer &v(c_inputNotifyGeoChatPeer()); - return v.vpeer.size(); + return v.vpeer.innerLength(); } } return 0; @@ -17740,7 +18298,7 @@ inline MTPinputNotifyPeer MTP_inputNotifyGeoChatPeer(const MTPInputGeoChat &_pee return MTPinputNotifyPeer(new MTPDinputNotifyGeoChatPeer(_peer)); } -inline uint32 MTPinputPeerNotifyEvents::size() const { +inline uint32 MTPinputPeerNotifyEvents::innerLength() const { return 0; } inline mtpTypeId MTPinputPeerNotifyEvents::type() const { @@ -17775,9 +18333,9 @@ inline MTPinputPeerNotifyEvents MTP_inputPeerNotifyEventsAll() { inline MTPinputPeerNotifySettings::MTPinputPeerNotifySettings() : mtpDataOwner(new MTPDinputPeerNotifySettings()) { } -inline uint32 MTPinputPeerNotifySettings::size() const { +inline uint32 MTPinputPeerNotifySettings::innerLength() const { const MTPDinputPeerNotifySettings &v(c_inputPeerNotifySettings()); - return v.vmute_until.size() + v.vsound.size() + v.vshow_previews.size() + v.vevents_mask.size(); + return v.vmute_until.innerLength() + v.vsound.innerLength() + v.vshow_previews.innerLength() + v.vevents_mask.innerLength(); } inline mtpTypeId MTPinputPeerNotifySettings::type() const { return mtpc_inputPeerNotifySettings; @@ -17805,7 +18363,7 @@ inline MTPinputPeerNotifySettings MTP_inputPeerNotifySettings(MTPint _mute_until return MTPinputPeerNotifySettings(new MTPDinputPeerNotifySettings(_mute_until, _sound, _show_previews, _events_mask)); } -inline uint32 MTPpeerNotifyEvents::size() const { +inline uint32 MTPpeerNotifyEvents::innerLength() const { return 0; } inline mtpTypeId MTPpeerNotifyEvents::type() const { @@ -17837,11 +18395,11 @@ inline MTPpeerNotifyEvents MTP_peerNotifyEventsAll() { return MTPpeerNotifyEvents(mtpc_peerNotifyEventsAll); } -inline uint32 MTPpeerNotifySettings::size() const { +inline uint32 MTPpeerNotifySettings::innerLength() const { switch (_type) { case mtpc_peerNotifySettings: { const MTPDpeerNotifySettings &v(c_peerNotifySettings()); - return v.vmute_until.size() + v.vsound.size() + v.vshow_previews.size() + v.vevents_mask.size(); + return v.vmute_until.innerLength() + v.vsound.innerLength() + v.vshow_previews.innerLength() + v.vevents_mask.innerLength(); } } return 0; @@ -17892,15 +18450,15 @@ inline MTPpeerNotifySettings MTP_peerNotifySettings(MTPint _mute_until, const MT return MTPpeerNotifySettings(new MTPDpeerNotifySettings(_mute_until, _sound, _show_previews, _events_mask)); } -inline uint32 MTPwallPaper::size() const { +inline uint32 MTPwallPaper::innerLength() const { switch (_type) { case mtpc_wallPaper: { const MTPDwallPaper &v(c_wallPaper()); - return v.vid.size() + v.vtitle.size() + v.vsizes.size() + v.vcolor.size(); + return v.vid.innerLength() + v.vtitle.innerLength() + v.vsizes.innerLength() + v.vcolor.innerLength(); } case mtpc_wallPaperSolid: { const MTPDwallPaperSolid &v(c_wallPaperSolid()); - return v.vid.size() + v.vtitle.size() + v.vbg_color.size() + v.vcolor.size(); + return v.vid.innerLength() + v.vtitle.innerLength() + v.vbg_color.innerLength() + v.vcolor.innerLength(); } } return 0; @@ -17970,9 +18528,9 @@ inline MTPwallPaper MTP_wallPaperSolid(MTPint _id, const MTPstring &_title, MTPi inline MTPuserFull::MTPuserFull() : mtpDataOwner(new MTPDuserFull()) { } -inline uint32 MTPuserFull::size() const { +inline uint32 MTPuserFull::innerLength() const { const MTPDuserFull &v(c_userFull()); - return v.vuser.size() + v.vlink.size() + v.vprofile_photo.size() + v.vnotify_settings.size() + v.vblocked.size() + v.vreal_first_name.size() + v.vreal_last_name.size(); + return v.vuser.innerLength() + v.vlink.innerLength() + v.vprofile_photo.innerLength() + v.vnotify_settings.innerLength() + v.vblocked.innerLength() + v.vreal_first_name.innerLength() + v.vreal_last_name.innerLength(); } inline mtpTypeId MTPuserFull::type() const { return mtpc_userFull; @@ -18009,9 +18567,9 @@ inline MTPuserFull MTP_userFull(const MTPUser &_user, const MTPcontacts_Link &_l inline MTPcontact::MTPcontact() : mtpDataOwner(new MTPDcontact()) { } -inline uint32 MTPcontact::size() const { +inline uint32 MTPcontact::innerLength() const { const MTPDcontact &v(c_contact()); - return v.vuser_id.size() + v.vmutual.size(); + return v.vuser_id.innerLength() + v.vmutual.innerLength(); } inline mtpTypeId MTPcontact::type() const { return mtpc_contact; @@ -18038,9 +18596,9 @@ inline MTPcontact MTP_contact(MTPint _user_id, MTPBool _mutual) { inline MTPimportedContact::MTPimportedContact() : mtpDataOwner(new MTPDimportedContact()) { } -inline uint32 MTPimportedContact::size() const { +inline uint32 MTPimportedContact::innerLength() const { const MTPDimportedContact &v(c_importedContact()); - return v.vuser_id.size() + v.vclient_id.size(); + return v.vuser_id.innerLength() + v.vclient_id.innerLength(); } inline mtpTypeId MTPimportedContact::type() const { return mtpc_importedContact; @@ -18067,9 +18625,9 @@ inline MTPimportedContact MTP_importedContact(MTPint _user_id, const MTPlong &_c inline MTPcontactBlocked::MTPcontactBlocked() : mtpDataOwner(new MTPDcontactBlocked()) { } -inline uint32 MTPcontactBlocked::size() const { +inline uint32 MTPcontactBlocked::innerLength() const { const MTPDcontactBlocked &v(c_contactBlocked()); - return v.vuser_id.size() + v.vdate.size(); + return v.vuser_id.innerLength() + v.vdate.innerLength(); } inline mtpTypeId MTPcontactBlocked::type() const { return mtpc_contactBlocked; @@ -18096,9 +18654,9 @@ inline MTPcontactBlocked MTP_contactBlocked(MTPint _user_id, MTPint _date) { inline MTPcontactSuggested::MTPcontactSuggested() : mtpDataOwner(new MTPDcontactSuggested()) { } -inline uint32 MTPcontactSuggested::size() const { +inline uint32 MTPcontactSuggested::innerLength() const { const MTPDcontactSuggested &v(c_contactSuggested()); - return v.vuser_id.size() + v.vmutual_contacts.size(); + return v.vuser_id.innerLength() + v.vmutual_contacts.innerLength(); } inline mtpTypeId MTPcontactSuggested::type() const { return mtpc_contactSuggested; @@ -18125,9 +18683,9 @@ inline MTPcontactSuggested MTP_contactSuggested(MTPint _user_id, MTPint _mutual_ inline MTPcontactStatus::MTPcontactStatus() : mtpDataOwner(new MTPDcontactStatus()) { } -inline uint32 MTPcontactStatus::size() const { +inline uint32 MTPcontactStatus::innerLength() const { const MTPDcontactStatus &v(c_contactStatus()); - return v.vuser_id.size() + v.vexpires.size(); + return v.vuser_id.innerLength() + v.vstatus.innerLength(); } inline mtpTypeId MTPcontactStatus::type() const { return mtpc_contactStatus; @@ -18138,25 +18696,25 @@ inline void MTPcontactStatus::read(const mtpPrime *&from, const mtpPrime *end, m if (!data) setData(new MTPDcontactStatus()); MTPDcontactStatus &v(_contactStatus()); v.vuser_id.read(from, end); - v.vexpires.read(from, end); + v.vstatus.read(from, end); } inline void MTPcontactStatus::write(mtpBuffer &to) const { const MTPDcontactStatus &v(c_contactStatus()); v.vuser_id.write(to); - v.vexpires.write(to); + v.vstatus.write(to); } inline MTPcontactStatus::MTPcontactStatus(MTPDcontactStatus *_data) : mtpDataOwner(_data) { } -inline MTPcontactStatus MTP_contactStatus(MTPint _user_id, MTPint _expires) { - return MTPcontactStatus(new MTPDcontactStatus(_user_id, _expires)); +inline MTPcontactStatus MTP_contactStatus(MTPint _user_id, const MTPUserStatus &_status) { + return MTPcontactStatus(new MTPDcontactStatus(_user_id, _status)); } inline MTPchatLocated::MTPchatLocated() : mtpDataOwner(new MTPDchatLocated()) { } -inline uint32 MTPchatLocated::size() const { +inline uint32 MTPchatLocated::innerLength() const { const MTPDchatLocated &v(c_chatLocated()); - return v.vchat_id.size() + v.vdistance.size(); + return v.vchat_id.innerLength() + v.vdistance.innerLength(); } inline mtpTypeId MTPchatLocated::type() const { return mtpc_chatLocated; @@ -18180,11 +18738,11 @@ inline MTPchatLocated MTP_chatLocated(MTPint _chat_id, MTPint _distance) { return MTPchatLocated(new MTPDchatLocated(_chat_id, _distance)); } -inline uint32 MTPcontacts_foreignLink::size() const { +inline uint32 MTPcontacts_foreignLink::innerLength() const { switch (_type) { case mtpc_contacts_foreignLinkRequested: { const MTPDcontacts_foreignLinkRequested &v(c_contacts_foreignLinkRequested()); - return v.vhas_phone.size(); + return v.vhas_phone.innerLength(); } } return 0; @@ -18234,11 +18792,11 @@ inline MTPcontacts_foreignLink MTP_contacts_foreignLinkMutual() { return MTPcontacts_foreignLink(mtpc_contacts_foreignLinkMutual); } -inline uint32 MTPcontacts_myLink::size() const { +inline uint32 MTPcontacts_myLink::innerLength() const { switch (_type) { case mtpc_contacts_myLinkRequested: { const MTPDcontacts_myLinkRequested &v(c_contacts_myLinkRequested()); - return v.vcontact.size(); + return v.vcontact.innerLength(); } } return 0; @@ -18291,9 +18849,9 @@ inline MTPcontacts_myLink MTP_contacts_myLinkContact() { inline MTPcontacts_link::MTPcontacts_link() : mtpDataOwner(new MTPDcontacts_link()) { } -inline uint32 MTPcontacts_link::size() const { +inline uint32 MTPcontacts_link::innerLength() const { const MTPDcontacts_link &v(c_contacts_link()); - return v.vmy_link.size() + v.vforeign_link.size() + v.vuser.size(); + return v.vmy_link.innerLength() + v.vforeign_link.innerLength() + v.vuser.innerLength(); } inline mtpTypeId MTPcontacts_link::type() const { return mtpc_contacts_link; @@ -18319,11 +18877,11 @@ inline MTPcontacts_link MTP_contacts_link(const MTPcontacts_MyLink &_my_link, co return MTPcontacts_link(new MTPDcontacts_link(_my_link, _foreign_link, _user)); } -inline uint32 MTPcontacts_contacts::size() const { +inline uint32 MTPcontacts_contacts::innerLength() const { switch (_type) { case mtpc_contacts_contacts: { const MTPDcontacts_contacts &v(c_contacts_contacts()); - return v.vcontacts.size() + v.vusers.size(); + return v.vcontacts.innerLength() + v.vusers.innerLength(); } } return 0; @@ -18373,9 +18931,9 @@ inline MTPcontacts_contacts MTP_contacts_contactsNotModified() { inline MTPcontacts_importedContacts::MTPcontacts_importedContacts() : mtpDataOwner(new MTPDcontacts_importedContacts()) { } -inline uint32 MTPcontacts_importedContacts::size() const { +inline uint32 MTPcontacts_importedContacts::innerLength() const { const MTPDcontacts_importedContacts &v(c_contacts_importedContacts()); - return v.vimported.size() + v.vretry_contacts.size() + v.vusers.size(); + return v.vimported.innerLength() + v.vretry_contacts.innerLength() + v.vusers.innerLength(); } inline mtpTypeId MTPcontacts_importedContacts::type() const { return mtpc_contacts_importedContacts; @@ -18401,15 +18959,15 @@ inline MTPcontacts_importedContacts MTP_contacts_importedContacts(const MTPVecto return MTPcontacts_importedContacts(new MTPDcontacts_importedContacts(_imported, _retry_contacts, _users)); } -inline uint32 MTPcontacts_blocked::size() const { +inline uint32 MTPcontacts_blocked::innerLength() const { switch (_type) { case mtpc_contacts_blocked: { const MTPDcontacts_blocked &v(c_contacts_blocked()); - return v.vblocked.size() + v.vusers.size(); + return v.vblocked.innerLength() + v.vusers.innerLength(); } case mtpc_contacts_blockedSlice: { const MTPDcontacts_blockedSlice &v(c_contacts_blockedSlice()); - return v.vcount.size() + v.vblocked.size() + v.vusers.size(); + return v.vcount.innerLength() + v.vblocked.innerLength() + v.vusers.innerLength(); } } return 0; @@ -18473,9 +19031,9 @@ inline MTPcontacts_blocked MTP_contacts_blockedSlice(MTPint _count, const MTPVec inline MTPcontacts_suggested::MTPcontacts_suggested() : mtpDataOwner(new MTPDcontacts_suggested()) { } -inline uint32 MTPcontacts_suggested::size() const { +inline uint32 MTPcontacts_suggested::innerLength() const { const MTPDcontacts_suggested &v(c_contacts_suggested()); - return v.vresults.size() + v.vusers.size(); + return v.vresults.innerLength() + v.vusers.innerLength(); } inline mtpTypeId MTPcontacts_suggested::type() const { return mtpc_contacts_suggested; @@ -18499,15 +19057,15 @@ inline MTPcontacts_suggested MTP_contacts_suggested(const MTPVector &_chats, co inline MTPmessages_chatFull::MTPmessages_chatFull() : mtpDataOwner(new MTPDmessages_chatFull()) { } -inline uint32 MTPmessages_chatFull::size() const { +inline uint32 MTPmessages_chatFull::innerLength() const { const MTPDmessages_chatFull &v(c_messages_chatFull()); - return v.vfull_chat.size() + v.vchats.size() + v.vusers.size(); + return v.vfull_chat.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); } inline mtpTypeId MTPmessages_chatFull::type() const { return mtpc_messages_chatFull; @@ -19033,9 +19591,9 @@ inline MTPmessages_chatFull MTP_messages_chatFull(const MTPChatFull &_full_chat, inline MTPmessages_affectedHistory::MTPmessages_affectedHistory() : mtpDataOwner(new MTPDmessages_affectedHistory()) { } -inline uint32 MTPmessages_affectedHistory::size() const { +inline uint32 MTPmessages_affectedHistory::innerLength() const { const MTPDmessages_affectedHistory &v(c_messages_affectedHistory()); - return v.vpts.size() + v.vseq.size() + v.voffset.size(); + return v.vpts.innerLength() + v.vseq.innerLength() + v.voffset.innerLength(); } inline mtpTypeId MTPmessages_affectedHistory::type() const { return mtpc_messages_affectedHistory; @@ -19061,7 +19619,7 @@ inline MTPmessages_affectedHistory MTP_messages_affectedHistory(MTPint _pts, MTP return MTPmessages_affectedHistory(new MTPDmessages_affectedHistory(_pts, _seq, _offset)); } -inline uint32 MTPmessagesFilter::size() const { +inline uint32 MTPmessagesFilter::innerLength() const { return 0; } inline mtpTypeId MTPmessagesFilter::type() const { @@ -19113,111 +19671,115 @@ inline MTPmessagesFilter MTP_inputMessagesFilterAudio() { return MTPmessagesFilter(mtpc_inputMessagesFilterAudio); } -inline uint32 MTPupdate::size() const { +inline uint32 MTPupdate::innerLength() const { switch (_type) { case mtpc_updateNewMessage: { const MTPDupdateNewMessage &v(c_updateNewMessage()); - return v.vmessage.size() + v.vpts.size(); + return v.vmessage.innerLength() + v.vpts.innerLength(); } case mtpc_updateMessageID: { const MTPDupdateMessageID &v(c_updateMessageID()); - return v.vid.size() + v.vrandom_id.size(); + return v.vid.innerLength() + v.vrandom_id.innerLength(); } case mtpc_updateReadMessages: { const MTPDupdateReadMessages &v(c_updateReadMessages()); - return v.vmessages.size() + v.vpts.size(); + return v.vmessages.innerLength() + v.vpts.innerLength(); } case mtpc_updateDeleteMessages: { const MTPDupdateDeleteMessages &v(c_updateDeleteMessages()); - return v.vmessages.size() + v.vpts.size(); + return v.vmessages.innerLength() + v.vpts.innerLength(); } case mtpc_updateRestoreMessages: { const MTPDupdateRestoreMessages &v(c_updateRestoreMessages()); - return v.vmessages.size() + v.vpts.size(); + return v.vmessages.innerLength() + v.vpts.innerLength(); } case mtpc_updateUserTyping: { const MTPDupdateUserTyping &v(c_updateUserTyping()); - return v.vuser_id.size() + v.vaction.size(); + return v.vuser_id.innerLength() + v.vaction.innerLength(); } case mtpc_updateChatUserTyping: { const MTPDupdateChatUserTyping &v(c_updateChatUserTyping()); - return v.vchat_id.size() + v.vuser_id.size() + v.vaction.size(); + return v.vchat_id.innerLength() + v.vuser_id.innerLength() + v.vaction.innerLength(); } case mtpc_updateChatParticipants: { const MTPDupdateChatParticipants &v(c_updateChatParticipants()); - return v.vparticipants.size(); + return v.vparticipants.innerLength(); } case mtpc_updateUserStatus: { const MTPDupdateUserStatus &v(c_updateUserStatus()); - return v.vuser_id.size() + v.vstatus.size(); + return v.vuser_id.innerLength() + v.vstatus.innerLength(); } case mtpc_updateUserName: { const MTPDupdateUserName &v(c_updateUserName()); - return v.vuser_id.size() + v.vfirst_name.size() + v.vlast_name.size() + v.vusername.size(); + return v.vuser_id.innerLength() + v.vfirst_name.innerLength() + v.vlast_name.innerLength() + v.vusername.innerLength(); } case mtpc_updateUserPhoto: { const MTPDupdateUserPhoto &v(c_updateUserPhoto()); - return v.vuser_id.size() + v.vdate.size() + v.vphoto.size() + v.vprevious.size(); + return v.vuser_id.innerLength() + v.vdate.innerLength() + v.vphoto.innerLength() + v.vprevious.innerLength(); } case mtpc_updateContactRegistered: { const MTPDupdateContactRegistered &v(c_updateContactRegistered()); - return v.vuser_id.size() + v.vdate.size(); + return v.vuser_id.innerLength() + v.vdate.innerLength(); } case mtpc_updateContactLink: { const MTPDupdateContactLink &v(c_updateContactLink()); - return v.vuser_id.size() + v.vmy_link.size() + v.vforeign_link.size(); + return v.vuser_id.innerLength() + v.vmy_link.innerLength() + v.vforeign_link.innerLength(); } case mtpc_updateActivation: { const MTPDupdateActivation &v(c_updateActivation()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } case mtpc_updateNewAuthorization: { const MTPDupdateNewAuthorization &v(c_updateNewAuthorization()); - return v.vauth_key_id.size() + v.vdate.size() + v.vdevice.size() + v.vlocation.size(); + return v.vauth_key_id.innerLength() + v.vdate.innerLength() + v.vdevice.innerLength() + v.vlocation.innerLength(); } case mtpc_updateNewGeoChatMessage: { const MTPDupdateNewGeoChatMessage &v(c_updateNewGeoChatMessage()); - return v.vmessage.size(); + return v.vmessage.innerLength(); } case mtpc_updateNewEncryptedMessage: { const MTPDupdateNewEncryptedMessage &v(c_updateNewEncryptedMessage()); - return v.vmessage.size() + v.vqts.size(); + return v.vmessage.innerLength() + v.vqts.innerLength(); } case mtpc_updateEncryptedChatTyping: { const MTPDupdateEncryptedChatTyping &v(c_updateEncryptedChatTyping()); - return v.vchat_id.size(); + return v.vchat_id.innerLength(); } case mtpc_updateEncryption: { const MTPDupdateEncryption &v(c_updateEncryption()); - return v.vchat.size() + v.vdate.size(); + return v.vchat.innerLength() + v.vdate.innerLength(); } case mtpc_updateEncryptedMessagesRead: { const MTPDupdateEncryptedMessagesRead &v(c_updateEncryptedMessagesRead()); - return v.vchat_id.size() + v.vmax_date.size() + v.vdate.size(); + return v.vchat_id.innerLength() + v.vmax_date.innerLength() + v.vdate.innerLength(); } case mtpc_updateChatParticipantAdd: { const MTPDupdateChatParticipantAdd &v(c_updateChatParticipantAdd()); - return v.vchat_id.size() + v.vuser_id.size() + v.vinviter_id.size() + v.vversion.size(); + return v.vchat_id.innerLength() + v.vuser_id.innerLength() + v.vinviter_id.innerLength() + v.vversion.innerLength(); } case mtpc_updateChatParticipantDelete: { const MTPDupdateChatParticipantDelete &v(c_updateChatParticipantDelete()); - return v.vchat_id.size() + v.vuser_id.size() + v.vversion.size(); + return v.vchat_id.innerLength() + v.vuser_id.innerLength() + v.vversion.innerLength(); } case mtpc_updateDcOptions: { const MTPDupdateDcOptions &v(c_updateDcOptions()); - return v.vdc_options.size(); + return v.vdc_options.innerLength(); } case mtpc_updateUserBlocked: { const MTPDupdateUserBlocked &v(c_updateUserBlocked()); - return v.vuser_id.size() + v.vblocked.size(); + return v.vuser_id.innerLength() + v.vblocked.innerLength(); } case mtpc_updateNotifySettings: { const MTPDupdateNotifySettings &v(c_updateNotifySettings()); - return v.vpeer.size() + v.vnotify_settings.size(); + return v.vpeer.innerLength() + v.vnotify_settings.innerLength(); } case mtpc_updateServiceNotification: { const MTPDupdateServiceNotification &v(c_updateServiceNotification()); - return v.vtype.size() + v.vmessage.size() + v.vmedia.size() + v.vpopup.size(); + return v.vtype.innerLength() + v.vmessage.innerLength() + v.vmedia.innerLength() + v.vpopup.innerLength(); + } + case mtpc_updatePrivacy: { + const MTPDupdatePrivacy &v(c_updatePrivacy()); + return v.vkey.innerLength() + v.vrules.innerLength(); } } return 0; @@ -19394,6 +19956,12 @@ inline void MTPupdate::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeI v.vmedia.read(from, end); v.vpopup.read(from, end); } break; + case mtpc_updatePrivacy: _type = cons; { + if (!data) setData(new MTPDupdatePrivacy()); + MTPDupdatePrivacy &v(_updatePrivacy()); + v.vkey.read(from, end); + v.vrules.read(from, end); + } break; default: throw mtpErrorUnexpected(cons, "MTPupdate"); } } @@ -19538,6 +20106,11 @@ inline void MTPupdate::write(mtpBuffer &to) const { v.vmedia.write(to); v.vpopup.write(to); } break; + case mtpc_updatePrivacy: { + const MTPDupdatePrivacy &v(c_updatePrivacy()); + v.vkey.write(to); + v.vrules.write(to); + } break; } } inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) { @@ -19568,6 +20141,7 @@ inline MTPupdate::MTPupdate(mtpTypeId type) : mtpDataOwner(0), _type(type) { case mtpc_updateUserBlocked: setData(new MTPDupdateUserBlocked()); break; case mtpc_updateNotifySettings: setData(new MTPDupdateNotifySettings()); break; case mtpc_updateServiceNotification: setData(new MTPDupdateServiceNotification()); break; + case mtpc_updatePrivacy: setData(new MTPDupdatePrivacy()); break; default: throw mtpErrorBadTypeId(type, "MTPupdate"); } } @@ -19623,6 +20197,8 @@ inline MTPupdate::MTPupdate(MTPDupdateNotifySettings *_data) : mtpDataOwner(_dat } inline MTPupdate::MTPupdate(MTPDupdateServiceNotification *_data) : mtpDataOwner(_data), _type(mtpc_updateServiceNotification) { } +inline MTPupdate::MTPupdate(MTPDupdatePrivacy *_data) : mtpDataOwner(_data), _type(mtpc_updatePrivacy) { +} inline MTPupdate MTP_updateNewMessage(const MTPMessage &_message, MTPint _pts) { return MTPupdate(new MTPDupdateNewMessage(_message, _pts)); } @@ -19701,13 +20277,16 @@ inline MTPupdate MTP_updateNotifySettings(const MTPNotifyPeer &_peer, const MTPP inline MTPupdate MTP_updateServiceNotification(const MTPstring &_type, const MTPstring &_message, const MTPMessageMedia &_media, MTPBool _popup) { return MTPupdate(new MTPDupdateServiceNotification(_type, _message, _media, _popup)); } +inline MTPupdate MTP_updatePrivacy(const MTPPrivacyKey &_key, const MTPVector &_rules) { + return MTPupdate(new MTPDupdatePrivacy(_key, _rules)); +} inline MTPupdates_state::MTPupdates_state() : mtpDataOwner(new MTPDupdates_state()) { } -inline uint32 MTPupdates_state::size() const { +inline uint32 MTPupdates_state::innerLength() const { const MTPDupdates_state &v(c_updates_state()); - return v.vpts.size() + v.vqts.size() + v.vdate.size() + v.vseq.size() + v.vunread_count.size(); + return v.vpts.innerLength() + v.vqts.innerLength() + v.vdate.innerLength() + v.vseq.innerLength() + v.vunread_count.innerLength(); } inline mtpTypeId MTPupdates_state::type() const { return mtpc_updates_state; @@ -19737,19 +20316,19 @@ inline MTPupdates_state MTP_updates_state(MTPint _pts, MTPint _qts, MTPint _date return MTPupdates_state(new MTPDupdates_state(_pts, _qts, _date, _seq, _unread_count)); } -inline uint32 MTPupdates_difference::size() const { +inline uint32 MTPupdates_difference::innerLength() const { switch (_type) { case mtpc_updates_differenceEmpty: { const MTPDupdates_differenceEmpty &v(c_updates_differenceEmpty()); - return v.vdate.size() + v.vseq.size(); + return v.vdate.innerLength() + v.vseq.innerLength(); } case mtpc_updates_difference: { const MTPDupdates_difference &v(c_updates_difference()); - return v.vnew_messages.size() + v.vnew_encrypted_messages.size() + v.vother_updates.size() + v.vchats.size() + v.vusers.size() + v.vstate.size(); + return v.vnew_messages.innerLength() + v.vnew_encrypted_messages.innerLength() + v.vother_updates.innerLength() + v.vchats.innerLength() + v.vusers.innerLength() + v.vstate.innerLength(); } case mtpc_updates_differenceSlice: { const MTPDupdates_differenceSlice &v(c_updates_differenceSlice()); - return v.vnew_messages.size() + v.vnew_encrypted_messages.size() + v.vother_updates.size() + v.vchats.size() + v.vusers.size() + v.vintermediate_state.size(); + return v.vnew_messages.innerLength() + v.vnew_encrypted_messages.innerLength() + v.vother_updates.innerLength() + v.vchats.innerLength() + v.vusers.innerLength() + v.vintermediate_state.innerLength(); } } return 0; @@ -19841,27 +20420,27 @@ inline MTPupdates_difference MTP_updates_differenceSlice(const MTPVector &_updates, const MTPVec return MTPupdates(new MTPDupdates(_updates, _users, _chats, _date, _seq)); } -inline uint32 MTPphotos_photos::size() const { +inline uint32 MTPphotos_photos::innerLength() const { switch (_type) { case mtpc_photos_photos: { const MTPDphotos_photos &v(c_photos_photos()); - return v.vphotos.size() + v.vusers.size(); + return v.vphotos.innerLength() + v.vusers.innerLength(); } case mtpc_photos_photosSlice: { const MTPDphotos_photosSlice &v(c_photos_photosSlice()); - return v.vcount.size() + v.vphotos.size() + v.vusers.size(); + return v.vcount.innerLength() + v.vphotos.innerLength() + v.vusers.innerLength(); } } return 0; @@ -20080,9 +20659,9 @@ inline MTPphotos_photos MTP_photos_photosSlice(MTPint _count, const MTPVector return MTPgeochats_located(new MTPDgeochats_located(_results, _messages, _chats, _users)); } -inline uint32 MTPgeochats_messages::size() const { +inline uint32 MTPgeochats_messages::innerLength() const { switch (_type) { case mtpc_geochats_messages: { const MTPDgeochats_messages &v(c_geochats_messages()); - return v.vmessages.size() + v.vchats.size() + v.vusers.size(); + return v.vmessages.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); } case mtpc_geochats_messagesSlice: { const MTPDgeochats_messagesSlice &v(c_geochats_messagesSlice()); - return v.vcount.size() + v.vmessages.size() + v.vchats.size() + v.vusers.size(); + return v.vcount.innerLength() + v.vmessages.innerLength() + v.vchats.innerLength() + v.vusers.innerLength(); } } return 0; @@ -20590,27 +21169,27 @@ inline MTPgeochats_messages MTP_geochats_messagesSlice(MTPint _count, const MTPV return MTPgeochats_messages(new MTPDgeochats_messagesSlice(_count, _messages, _chats, _users)); } -inline uint32 MTPencryptedChat::size() const { +inline uint32 MTPencryptedChat::innerLength() const { switch (_type) { case mtpc_encryptedChatEmpty: { const MTPDencryptedChatEmpty &v(c_encryptedChatEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_encryptedChatWaiting: { const MTPDencryptedChatWaiting &v(c_encryptedChatWaiting()); - return v.vid.size() + v.vaccess_hash.size() + v.vdate.size() + v.vadmin_id.size() + v.vparticipant_id.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vadmin_id.innerLength() + v.vparticipant_id.innerLength(); } case mtpc_encryptedChatRequested: { const MTPDencryptedChatRequested &v(c_encryptedChatRequested()); - return v.vid.size() + v.vaccess_hash.size() + v.vdate.size() + v.vadmin_id.size() + v.vparticipant_id.size() + v.vg_a.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vadmin_id.innerLength() + v.vparticipant_id.innerLength() + v.vg_a.innerLength(); } case mtpc_encryptedChat: { const MTPDencryptedChat &v(c_encryptedChat()); - return v.vid.size() + v.vaccess_hash.size() + v.vdate.size() + v.vadmin_id.size() + v.vparticipant_id.size() + v.vg_a_or_b.size() + v.vkey_fingerprint.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vdate.innerLength() + v.vadmin_id.innerLength() + v.vparticipant_id.innerLength() + v.vg_a_or_b.innerLength() + v.vkey_fingerprint.innerLength(); } case mtpc_encryptedChatDiscarded: { const MTPDencryptedChatDiscarded &v(c_encryptedChatDiscarded()); - return v.vid.size(); + return v.vid.innerLength(); } } return 0; @@ -20743,9 +21322,9 @@ inline MTPencryptedChat MTP_encryptedChatDiscarded(MTPint _id) { inline MTPinputEncryptedChat::MTPinputEncryptedChat() : mtpDataOwner(new MTPDinputEncryptedChat()) { } -inline uint32 MTPinputEncryptedChat::size() const { +inline uint32 MTPinputEncryptedChat::innerLength() const { const MTPDinputEncryptedChat &v(c_inputEncryptedChat()); - return v.vchat_id.size() + v.vaccess_hash.size(); + return v.vchat_id.innerLength() + v.vaccess_hash.innerLength(); } inline mtpTypeId MTPinputEncryptedChat::type() const { return mtpc_inputEncryptedChat; @@ -20769,11 +21348,11 @@ inline MTPinputEncryptedChat MTP_inputEncryptedChat(MTPint _chat_id, const MTPlo return MTPinputEncryptedChat(new MTPDinputEncryptedChat(_chat_id, _access_hash)); } -inline uint32 MTPencryptedFile::size() const { +inline uint32 MTPencryptedFile::innerLength() const { switch (_type) { case mtpc_encryptedFile: { const MTPDencryptedFile &v(c_encryptedFile()); - return v.vid.size() + v.vaccess_hash.size() + v.vsize.size() + v.vdc_id.size() + v.vkey_fingerprint.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength() + v.vkey_fingerprint.innerLength(); } } return 0; @@ -20826,19 +21405,19 @@ inline MTPencryptedFile MTP_encryptedFile(const MTPlong &_id, const MTPlong &_ac return MTPencryptedFile(new MTPDencryptedFile(_id, _access_hash, _size, _dc_id, _key_fingerprint)); } -inline uint32 MTPinputEncryptedFile::size() const { +inline uint32 MTPinputEncryptedFile::innerLength() const { switch (_type) { case mtpc_inputEncryptedFileUploaded: { const MTPDinputEncryptedFileUploaded &v(c_inputEncryptedFileUploaded()); - return v.vid.size() + v.vparts.size() + v.vmd5_checksum.size() + v.vkey_fingerprint.size(); + return v.vid.innerLength() + v.vparts.innerLength() + v.vmd5_checksum.innerLength() + v.vkey_fingerprint.innerLength(); } case mtpc_inputEncryptedFile: { const MTPDinputEncryptedFile &v(c_inputEncryptedFile()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } case mtpc_inputEncryptedFileBigUploaded: { const MTPDinputEncryptedFileBigUploaded &v(c_inputEncryptedFileBigUploaded()); - return v.vid.size() + v.vparts.size() + v.vkey_fingerprint.size(); + return v.vid.innerLength() + v.vparts.innerLength() + v.vkey_fingerprint.innerLength(); } } return 0; @@ -20925,15 +21504,15 @@ inline MTPinputEncryptedFile MTP_inputEncryptedFileBigUploaded(const MTPlong &_i return MTPinputEncryptedFile(new MTPDinputEncryptedFileBigUploaded(_id, _parts, _key_fingerprint)); } -inline uint32 MTPencryptedMessage::size() const { +inline uint32 MTPencryptedMessage::innerLength() const { switch (_type) { case mtpc_encryptedMessage: { const MTPDencryptedMessage &v(c_encryptedMessage()); - return v.vrandom_id.size() + v.vchat_id.size() + v.vdate.size() + v.vbytes.size() + v.vfile.size(); + return v.vrandom_id.innerLength() + v.vchat_id.innerLength() + v.vdate.innerLength() + v.vbytes.innerLength() + v.vfile.innerLength(); } case mtpc_encryptedMessageService: { const MTPDencryptedMessageService &v(c_encryptedMessageService()); - return v.vrandom_id.size() + v.vchat_id.size() + v.vdate.size() + v.vbytes.size(); + return v.vrandom_id.innerLength() + v.vchat_id.innerLength() + v.vdate.innerLength() + v.vbytes.innerLength(); } } return 0; @@ -21002,15 +21581,15 @@ inline MTPencryptedMessage MTP_encryptedMessageService(const MTPlong &_random_id return MTPencryptedMessage(new MTPDencryptedMessageService(_random_id, _chat_id, _date, _bytes)); } -inline uint32 MTPmessages_dhConfig::size() const { +inline uint32 MTPmessages_dhConfig::innerLength() const { switch (_type) { case mtpc_messages_dhConfigNotModified: { const MTPDmessages_dhConfigNotModified &v(c_messages_dhConfigNotModified()); - return v.vrandom.size(); + return v.vrandom.innerLength(); } case mtpc_messages_dhConfig: { const MTPDmessages_dhConfig &v(c_messages_dhConfig()); - return v.vg.size() + v.vp.size() + v.vversion.size() + v.vrandom.size(); + return v.vg.innerLength() + v.vp.innerLength() + v.vversion.innerLength() + v.vrandom.innerLength(); } } return 0; @@ -21071,15 +21650,15 @@ inline MTPmessages_dhConfig MTP_messages_dhConfig(MTPint _g, const MTPbytes &_p, return MTPmessages_dhConfig(new MTPDmessages_dhConfig(_g, _p, _version, _random)); } -inline uint32 MTPmessages_sentEncryptedMessage::size() const { +inline uint32 MTPmessages_sentEncryptedMessage::innerLength() const { switch (_type) { case mtpc_messages_sentEncryptedMessage: { const MTPDmessages_sentEncryptedMessage &v(c_messages_sentEncryptedMessage()); - return v.vdate.size(); + return v.vdate.innerLength(); } case mtpc_messages_sentEncryptedFile: { const MTPDmessages_sentEncryptedFile &v(c_messages_sentEncryptedFile()); - return v.vdate.size() + v.vfile.size(); + return v.vdate.innerLength() + v.vfile.innerLength(); } } return 0; @@ -21136,11 +21715,11 @@ inline MTPmessages_sentEncryptedMessage MTP_messages_sentEncryptedFile(MTPint _d return MTPmessages_sentEncryptedMessage(new MTPDmessages_sentEncryptedFile(_date, _file)); } -inline uint32 MTPinputAudio::size() const { +inline uint32 MTPinputAudio::innerLength() const { switch (_type) { case mtpc_inputAudio: { const MTPDinputAudio &v(c_inputAudio()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -21187,11 +21766,11 @@ inline MTPinputAudio MTP_inputAudio(const MTPlong &_id, const MTPlong &_access_h return MTPinputAudio(new MTPDinputAudio(_id, _access_hash)); } -inline uint32 MTPinputDocument::size() const { +inline uint32 MTPinputDocument::innerLength() const { switch (_type) { case mtpc_inputDocument: { const MTPDinputDocument &v(c_inputDocument()); - return v.vid.size() + v.vaccess_hash.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength(); } } return 0; @@ -21238,15 +21817,15 @@ inline MTPinputDocument MTP_inputDocument(const MTPlong &_id, const MTPlong &_ac return MTPinputDocument(new MTPDinputDocument(_id, _access_hash)); } -inline uint32 MTPaudio::size() const { +inline uint32 MTPaudio::innerLength() const { switch (_type) { case mtpc_audioEmpty: { const MTPDaudioEmpty &v(c_audioEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_audio: { const MTPDaudio &v(c_audio()); - return v.vid.size() + v.vaccess_hash.size() + v.vuser_id.size() + v.vdate.size() + v.vduration.size() + v.vmime_type.size() + v.vsize.size() + v.vdc_id.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vduration.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vdc_id.innerLength(); } } return 0; @@ -21315,15 +21894,15 @@ inline MTPaudio MTP_audio(const MTPlong &_id, const MTPlong &_access_hash, MTPin return MTPaudio(new MTPDaudio(_id, _access_hash, _user_id, _date, _duration, _mime_type, _size, _dc_id)); } -inline uint32 MTPdocument::size() const { +inline uint32 MTPdocument::innerLength() const { switch (_type) { case mtpc_documentEmpty: { const MTPDdocumentEmpty &v(c_documentEmpty()); - return v.vid.size(); + return v.vid.innerLength(); } case mtpc_document: { const MTPDdocument &v(c_document()); - return v.vid.size() + v.vaccess_hash.size() + v.vuser_id.size() + v.vdate.size() + v.vfile_name.size() + v.vmime_type.size() + v.vsize.size() + v.vthumb.size() + v.vdc_id.size(); + return v.vid.innerLength() + v.vaccess_hash.innerLength() + v.vuser_id.innerLength() + v.vdate.innerLength() + v.vfile_name.innerLength() + v.vmime_type.innerLength() + v.vsize.innerLength() + v.vthumb.innerLength() + v.vdc_id.innerLength(); } } return 0; @@ -21397,9 +21976,9 @@ inline MTPdocument MTP_document(const MTPlong &_id, const MTPlong &_access_hash, inline MTPhelp_support::MTPhelp_support() : mtpDataOwner(new MTPDhelp_support()) { } -inline uint32 MTPhelp_support::size() const { +inline uint32 MTPhelp_support::innerLength() const { const MTPDhelp_support &v(c_help_support()); - return v.vphone_number.size() + v.vuser.size(); + return v.vphone_number.innerLength() + v.vuser.innerLength(); } inline mtpTypeId MTPhelp_support::type() const { return mtpc_help_support; @@ -21423,11 +22002,11 @@ inline MTPhelp_support MTP_help_support(const MTPstring &_phone_number, const MT return MTPhelp_support(new MTPDhelp_support(_phone_number, _user)); } -inline uint32 MTPnotifyPeer::size() const { +inline uint32 MTPnotifyPeer::innerLength() const { switch (_type) { case mtpc_notifyPeer: { const MTPDnotifyPeer &v(c_notifyPeer()); - return v.vpeer.size(); + return v.vpeer.innerLength(); } } return 0; @@ -21482,7 +22061,7 @@ inline MTPnotifyPeer MTP_notifyAll() { return MTPnotifyPeer(mtpc_notifyAll); } -inline uint32 MTPsendMessageAction::size() const { +inline uint32 MTPsendMessageAction::innerLength() const { return 0; } inline mtpTypeId MTPsendMessageAction::type() const { @@ -21557,9 +22136,9 @@ inline MTPsendMessageAction MTP_sendMessageChooseContactAction() { inline MTPcontactFound::MTPcontactFound() : mtpDataOwner(new MTPDcontactFound()) { } -inline uint32 MTPcontactFound::size() const { +inline uint32 MTPcontactFound::innerLength() const { const MTPDcontactFound &v(c_contactFound()); - return v.vuser_id.size(); + return v.vuser_id.innerLength(); } inline mtpTypeId MTPcontactFound::type() const { return mtpc_contactFound; @@ -21584,9 +22163,9 @@ inline MTPcontactFound MTP_contactFound(MTPint _user_id) { inline MTPcontacts_found::MTPcontacts_found() : mtpDataOwner(new MTPDcontacts_found()) { } -inline uint32 MTPcontacts_found::size() const { +inline uint32 MTPcontacts_found::innerLength() const { const MTPDcontacts_found &v(c_contacts_found()); - return v.vresults.size() + v.vusers.size(); + return v.vresults.innerLength() + v.vusers.innerLength(); } inline mtpTypeId MTPcontacts_found::type() const { return mtpc_contacts_found; @@ -21610,6 +22189,256 @@ inline MTPcontacts_found MTP_contacts_found(const MTPVector &_r return MTPcontacts_found(new MTPDcontacts_found(_results, _users)); } +inline uint32 MTPinputPrivacyKey::innerLength() const { + return 0; +} +inline mtpTypeId MTPinputPrivacyKey::type() const { + return mtpc_inputPrivacyKeyStatusTimestamp; +} +inline void MTPinputPrivacyKey::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { +} +inline void MTPinputPrivacyKey::write(mtpBuffer &to) const { +} +inline MTPinputPrivacyKey MTP_inputPrivacyKeyStatusTimestamp() { + return MTPinputPrivacyKey(); +} + +inline uint32 MTPprivacyKey::innerLength() const { + return 0; +} +inline mtpTypeId MTPprivacyKey::type() const { + return mtpc_privacyKeyStatusTimestamp; +} +inline void MTPprivacyKey::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { +} +inline void MTPprivacyKey::write(mtpBuffer &to) const { +} +inline MTPprivacyKey MTP_privacyKeyStatusTimestamp() { + return MTPprivacyKey(); +} + +inline uint32 MTPinputPrivacyRule::innerLength() const { + switch (_type) { + case mtpc_inputPrivacyValueAllowUsers: { + const MTPDinputPrivacyValueAllowUsers &v(c_inputPrivacyValueAllowUsers()); + return v.vusers.innerLength(); + } + case mtpc_inputPrivacyValueDisallowUsers: { + const MTPDinputPrivacyValueDisallowUsers &v(c_inputPrivacyValueDisallowUsers()); + return v.vusers.innerLength(); + } + } + return 0; +} +inline mtpTypeId MTPinputPrivacyRule::type() const { + if (!_type) throw mtpErrorUninitialized(); + return _type; +} +inline void MTPinputPrivacyRule::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != _type) setData(0); + switch (cons) { + case mtpc_inputPrivacyValueAllowContacts: _type = cons; break; + case mtpc_inputPrivacyValueAllowAll: _type = cons; break; + case mtpc_inputPrivacyValueAllowUsers: _type = cons; { + if (!data) setData(new MTPDinputPrivacyValueAllowUsers()); + MTPDinputPrivacyValueAllowUsers &v(_inputPrivacyValueAllowUsers()); + v.vusers.read(from, end); + } break; + case mtpc_inputPrivacyValueDisallowContacts: _type = cons; break; + case mtpc_inputPrivacyValueDisallowAll: _type = cons; break; + case mtpc_inputPrivacyValueDisallowUsers: _type = cons; { + if (!data) setData(new MTPDinputPrivacyValueDisallowUsers()); + MTPDinputPrivacyValueDisallowUsers &v(_inputPrivacyValueDisallowUsers()); + v.vusers.read(from, end); + } break; + default: throw mtpErrorUnexpected(cons, "MTPinputPrivacyRule"); + } +} +inline void MTPinputPrivacyRule::write(mtpBuffer &to) const { + switch (_type) { + case mtpc_inputPrivacyValueAllowUsers: { + const MTPDinputPrivacyValueAllowUsers &v(c_inputPrivacyValueAllowUsers()); + v.vusers.write(to); + } break; + case mtpc_inputPrivacyValueDisallowUsers: { + const MTPDinputPrivacyValueDisallowUsers &v(c_inputPrivacyValueDisallowUsers()); + v.vusers.write(to); + } break; + } +} +inline MTPinputPrivacyRule::MTPinputPrivacyRule(mtpTypeId type) : mtpDataOwner(0), _type(type) { + switch (type) { + case mtpc_inputPrivacyValueAllowContacts: break; + case mtpc_inputPrivacyValueAllowAll: break; + case mtpc_inputPrivacyValueAllowUsers: setData(new MTPDinputPrivacyValueAllowUsers()); break; + case mtpc_inputPrivacyValueDisallowContacts: break; + case mtpc_inputPrivacyValueDisallowAll: break; + case mtpc_inputPrivacyValueDisallowUsers: setData(new MTPDinputPrivacyValueDisallowUsers()); break; + default: throw mtpErrorBadTypeId(type, "MTPinputPrivacyRule"); + } +} +inline MTPinputPrivacyRule::MTPinputPrivacyRule(MTPDinputPrivacyValueAllowUsers *_data) : mtpDataOwner(_data), _type(mtpc_inputPrivacyValueAllowUsers) { +} +inline MTPinputPrivacyRule::MTPinputPrivacyRule(MTPDinputPrivacyValueDisallowUsers *_data) : mtpDataOwner(_data), _type(mtpc_inputPrivacyValueDisallowUsers) { +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueAllowContacts() { + return MTPinputPrivacyRule(mtpc_inputPrivacyValueAllowContacts); +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueAllowAll() { + return MTPinputPrivacyRule(mtpc_inputPrivacyValueAllowAll); +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueAllowUsers(const MTPVector &_users) { + return MTPinputPrivacyRule(new MTPDinputPrivacyValueAllowUsers(_users)); +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueDisallowContacts() { + return MTPinputPrivacyRule(mtpc_inputPrivacyValueDisallowContacts); +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueDisallowAll() { + return MTPinputPrivacyRule(mtpc_inputPrivacyValueDisallowAll); +} +inline MTPinputPrivacyRule MTP_inputPrivacyValueDisallowUsers(const MTPVector &_users) { + return MTPinputPrivacyRule(new MTPDinputPrivacyValueDisallowUsers(_users)); +} + +inline uint32 MTPprivacyRule::innerLength() const { + switch (_type) { + case mtpc_privacyValueAllowUsers: { + const MTPDprivacyValueAllowUsers &v(c_privacyValueAllowUsers()); + return v.vusers.innerLength(); + } + case mtpc_privacyValueDisallowUsers: { + const MTPDprivacyValueDisallowUsers &v(c_privacyValueDisallowUsers()); + return v.vusers.innerLength(); + } + } + return 0; +} +inline mtpTypeId MTPprivacyRule::type() const { + if (!_type) throw mtpErrorUninitialized(); + return _type; +} +inline void MTPprivacyRule::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != _type) setData(0); + switch (cons) { + case mtpc_privacyValueAllowContacts: _type = cons; break; + case mtpc_privacyValueAllowAll: _type = cons; break; + case mtpc_privacyValueAllowUsers: _type = cons; { + if (!data) setData(new MTPDprivacyValueAllowUsers()); + MTPDprivacyValueAllowUsers &v(_privacyValueAllowUsers()); + v.vusers.read(from, end); + } break; + case mtpc_privacyValueDisallowContacts: _type = cons; break; + case mtpc_privacyValueDisallowAll: _type = cons; break; + case mtpc_privacyValueDisallowUsers: _type = cons; { + if (!data) setData(new MTPDprivacyValueDisallowUsers()); + MTPDprivacyValueDisallowUsers &v(_privacyValueDisallowUsers()); + v.vusers.read(from, end); + } break; + default: throw mtpErrorUnexpected(cons, "MTPprivacyRule"); + } +} +inline void MTPprivacyRule::write(mtpBuffer &to) const { + switch (_type) { + case mtpc_privacyValueAllowUsers: { + const MTPDprivacyValueAllowUsers &v(c_privacyValueAllowUsers()); + v.vusers.write(to); + } break; + case mtpc_privacyValueDisallowUsers: { + const MTPDprivacyValueDisallowUsers &v(c_privacyValueDisallowUsers()); + v.vusers.write(to); + } break; + } +} +inline MTPprivacyRule::MTPprivacyRule(mtpTypeId type) : mtpDataOwner(0), _type(type) { + switch (type) { + case mtpc_privacyValueAllowContacts: break; + case mtpc_privacyValueAllowAll: break; + case mtpc_privacyValueAllowUsers: setData(new MTPDprivacyValueAllowUsers()); break; + case mtpc_privacyValueDisallowContacts: break; + case mtpc_privacyValueDisallowAll: break; + case mtpc_privacyValueDisallowUsers: setData(new MTPDprivacyValueDisallowUsers()); break; + default: throw mtpErrorBadTypeId(type, "MTPprivacyRule"); + } +} +inline MTPprivacyRule::MTPprivacyRule(MTPDprivacyValueAllowUsers *_data) : mtpDataOwner(_data), _type(mtpc_privacyValueAllowUsers) { +} +inline MTPprivacyRule::MTPprivacyRule(MTPDprivacyValueDisallowUsers *_data) : mtpDataOwner(_data), _type(mtpc_privacyValueDisallowUsers) { +} +inline MTPprivacyRule MTP_privacyValueAllowContacts() { + return MTPprivacyRule(mtpc_privacyValueAllowContacts); +} +inline MTPprivacyRule MTP_privacyValueAllowAll() { + return MTPprivacyRule(mtpc_privacyValueAllowAll); +} +inline MTPprivacyRule MTP_privacyValueAllowUsers(const MTPVector &_users) { + return MTPprivacyRule(new MTPDprivacyValueAllowUsers(_users)); +} +inline MTPprivacyRule MTP_privacyValueDisallowContacts() { + return MTPprivacyRule(mtpc_privacyValueDisallowContacts); +} +inline MTPprivacyRule MTP_privacyValueDisallowAll() { + return MTPprivacyRule(mtpc_privacyValueDisallowAll); +} +inline MTPprivacyRule MTP_privacyValueDisallowUsers(const MTPVector &_users) { + return MTPprivacyRule(new MTPDprivacyValueDisallowUsers(_users)); +} + +inline MTPaccount_privacyRules::MTPaccount_privacyRules() : mtpDataOwner(new MTPDaccount_privacyRules()) { +} + +inline uint32 MTPaccount_privacyRules::innerLength() const { + const MTPDaccount_privacyRules &v(c_account_privacyRules()); + return v.vrules.innerLength() + v.vusers.innerLength(); +} +inline mtpTypeId MTPaccount_privacyRules::type() const { + return mtpc_account_privacyRules; +} +inline void MTPaccount_privacyRules::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != mtpc_account_privacyRules) throw mtpErrorUnexpected(cons, "MTPaccount_privacyRules"); + + if (!data) setData(new MTPDaccount_privacyRules()); + MTPDaccount_privacyRules &v(_account_privacyRules()); + v.vrules.read(from, end); + v.vusers.read(from, end); +} +inline void MTPaccount_privacyRules::write(mtpBuffer &to) const { + const MTPDaccount_privacyRules &v(c_account_privacyRules()); + v.vrules.write(to); + v.vusers.write(to); +} +inline MTPaccount_privacyRules::MTPaccount_privacyRules(MTPDaccount_privacyRules *_data) : mtpDataOwner(_data) { +} +inline MTPaccount_privacyRules MTP_account_privacyRules(const MTPVector &_rules, const MTPVector &_users) { + return MTPaccount_privacyRules(new MTPDaccount_privacyRules(_rules, _users)); +} + +inline MTPaccountDaysTTL::MTPaccountDaysTTL() : mtpDataOwner(new MTPDaccountDaysTTL()) { +} + +inline uint32 MTPaccountDaysTTL::innerLength() const { + const MTPDaccountDaysTTL &v(c_accountDaysTTL()); + return v.vdays.innerLength(); +} +inline mtpTypeId MTPaccountDaysTTL::type() const { + return mtpc_accountDaysTTL; +} +inline void MTPaccountDaysTTL::read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons) { + if (cons != mtpc_accountDaysTTL) throw mtpErrorUnexpected(cons, "MTPaccountDaysTTL"); + + if (!data) setData(new MTPDaccountDaysTTL()); + MTPDaccountDaysTTL &v(_accountDaysTTL()); + v.vdays.read(from, end); +} +inline void MTPaccountDaysTTL::write(mtpBuffer &to) const { + const MTPDaccountDaysTTL &v(c_accountDaysTTL()); + v.vdays.write(to); +} +inline MTPaccountDaysTTL::MTPaccountDaysTTL(MTPDaccountDaysTTL *_data) : mtpDataOwner(_data) { +} +inline MTPaccountDaysTTL MTP_accountDaysTTL(MTPint _days) { + return MTPaccountDaysTTL(new MTPDaccountDaysTTL(_days)); +} + // Human-readable text serialization #if (defined _DEBUG || defined _WITH_DEBUG) diff --git a/Telegram/SourceFiles/mtproto/mtpSession.cpp b/Telegram/SourceFiles/mtproto/mtpSession.cpp index da80db0e9e..d4fac36f92 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.cpp +++ b/Telegram/SourceFiles/mtproto/mtpSession.cpp @@ -113,8 +113,11 @@ void MTProtoSession::start(int32 dcenter, uint32 connects) { ReadLockerAttempt lock(keyMutex()); data.setKey(lock ? dc->getKey() : mtpAuthKeyPtr(0)); - + if (lock && dc->connectionInited()) { + data.setLayerWasInited(true); + } connect(dc.data(), SIGNAL(authKeyCreated()), this, SLOT(authKeyCreatedForDC())); + connect(dc.data(), SIGNAL(layerWasInited(bool)), this, SLOT(layerWasInitedForDC(bool))); } } } @@ -376,21 +379,9 @@ void MTProtoSession::sendPrepared(const mtpRequest &request, uint64 msCanWait, b sendAnything(msCanWait); } -void MTProtoSession::sendPreparedWithInit(const mtpRequest &request, uint64 msCanWait) { // returns true, if emit of needToSend() is needed - if (request->size() > 8 && request->at(8) == mtpc_initConnection) { - sendPrepared(request, msCanWait, false); - return; - } - { - MTPInitConnection requestWrap(MTPinitConnection(MTP_int(ApiId), MTP_string(cApiDeviceModel()), MTP_string(cApiSystemVersion()), MTP_string(cApiAppVersion()), MTP_string(ApiLang), request)); - uint32 requestSize = requestWrap.size() >> 2; - mtpRequest reqSerialized(mtpRequestData::prepare(requestSize)); - requestWrap.write(*reqSerialized); - request->resize(reqSerialized->size()); - memcpy(request->data(), reqSerialized->constData(), reqSerialized->size()); - } - request->msDate = getms(true); // > 0 - can send without container - sendPrepared(request, msCanWait); +void MTProtoSession::sendPreparedWithInit(const mtpRequest &request, uint64 msCanWait) { + request->needsLayer = true; + sendPrepared(request, msCanWait, false); } QReadWriteLock *MTProtoSession::keyMutex() const { @@ -403,11 +394,22 @@ void MTProtoSession::authKeyCreatedForDC() { emit authKeyCreated(); } -void MTProtoSession::keyCreated(const mtpAuthKeyPtr &key) { +void MTProtoSession::notifyKeyCreated(const mtpAuthKeyPtr &key) { DEBUG_LOG(("AuthKey Info: MTProtoSession::keyCreated(), setting, dc %1").arg(dcId)); dc->setKey(key); } +void MTProtoSession::layerWasInitedForDC(bool wasInited) { + DEBUG_LOG(("MTP Info: MTProtoSession::layerWasInitedForDC slot, dc %1").arg(dcId)); + data.setLayerWasInited(wasInited); +} + +void MTProtoSession::notifyLayerInited(bool wasInited) { + DEBUG_LOG(("MTP Info: emitting MTProtoDC::layerWasInited(%1), dc %2").arg(logBool(wasInited)).arg(dcId)); + dc->setConnectionInited(wasInited); + emit dc->layerWasInited(wasInited); +} + void MTProtoSession::destroyKey() { if (!dc) return; diff --git a/Telegram/SourceFiles/mtproto/mtpSession.h b/Telegram/SourceFiles/mtproto/mtpSession.h index 47e856c929..7d970cd436 100644 --- a/Telegram/SourceFiles/mtproto/mtpSession.h +++ b/Telegram/SourceFiles/mtproto/mtpSession.h @@ -28,8 +28,8 @@ public: MTPSessionData(MTProtoSession *creator) : _session(0), _salt(0) - , _messagesSent(0), fakeRequestId(-2000000000) - , _owner(creator), keyChecked(false) { + , _messagesSent(0), _fakeRequestId(-2000000000) + , _owner(creator), _keyChecked(false), _layerInited(false) { } void setSession(uint64 session) { @@ -45,6 +45,14 @@ public: QReadLocker locker(&lock); return _session; } + bool layerWasInited() const { + QReadLocker locker(&lock); + return _layerInited; + } + void setLayerWasInited(bool was) { + QWriteLocker locker(&lock); + _layerInited = was; + } void setSalt(uint64 salt) { QWriteLocker locker(&lock); @@ -56,26 +64,31 @@ public: } const mtpAuthKeyPtr &getKey() const { - return authKey; + return _authKey; } void setKey(const mtpAuthKeyPtr &key) { - if (authKey != key) { + if (_authKey != key) { uint64 session; memsetrnd(session); - authKey = key; + _authKey = key; DEBUG_LOG(("MTP Info: new auth key set in SessionData, id %1, setting random server_session %2").arg(key ? key->keyId() : 0).arg(session)); - setSession(session); + QWriteLocker locker(&lock); + if (_session != session) { + _session = session; + _messagesSent = 0; + } + _layerInited = false; } } bool isCheckedKey() const { QReadLocker locker(&lock); - return keyChecked; + return _keyChecked; } void setCheckedKey(bool checked) { QWriteLocker locker(&lock); - keyChecked = checked; + _keyChecked = checked; } QReadWriteLock *keyMutex() const; @@ -147,11 +160,11 @@ public: mtpRequestId nextFakeRequestId() { // must be locked by haveReceivedMutex() if (haveReceived.isEmpty() || haveReceived.cbegin().key() > 0) { - fakeRequestId = -2000000000; + _fakeRequestId = -2000000000; } else { - ++fakeRequestId; + ++_fakeRequestId; } - return fakeRequestId; + return _fakeRequestId; } MTProtoSession *owner() { @@ -174,12 +187,12 @@ private: uint64 _session, _salt; uint32 _messagesSent; - mtpRequestId fakeRequestId; + mtpRequestId _fakeRequestId; MTProtoSession *_owner; - mtpAuthKeyPtr authKey; - bool keyChecked; + mtpAuthKeyPtr _authKey; + bool _keyChecked, _layerInited; mtpPreRequestMap toSend; // map of request_id -> request, that is waiting to be sent mtpRequestMap haveSent; // map of msg_id -> request, that was sent, msDate = 0 for msgs_state_req (no resend / state req), msDate = 0, seqNo = 0 for containers @@ -216,11 +229,12 @@ public: ~MTProtoSession(); QReadWriteLock *keyMutex() const; - void keyCreated(const mtpAuthKeyPtr &key); + void notifyKeyCreated(const mtpAuthKeyPtr &key); void destroyKey(); + void notifyLayerInited(bool wasInited); template - mtpRequestId send(const TRequest &request, RPCResponseHandler callbacks = RPCResponseHandler(), uint64 msCanWait = 0, uint32 layer = 0, bool toMainDC = false, mtpRequestId after = 0); // send mtp request + mtpRequestId send(const TRequest &request, RPCResponseHandler callbacks = RPCResponseHandler(), uint64 msCanWait = 0, bool needsLayer = false, bool toMainDC = false, mtpRequestId after = 0); // send mtp request void sendAnything(uint64 msCanWait); void cancel(mtpRequestId requestId, mtpMsgId msgId); @@ -247,6 +261,7 @@ signals: public slots: void authKeyCreatedForDC(); + void layerWasInitedForDC(bool wasInited); void tryToReceive(); void checkRequestsByTimer(); @@ -255,9 +270,6 @@ public slots: private: - template - mtpRequestId sendFirst(const MTPInitConnection &request, RPCResponseHandler callbacks = RPCResponseHandler(), uint64 msCanWait = 0, uint32 layer = 0, bool toMainDC = false, mtpRequestId after = 0); // send first mtp request - typedef QList MTProtoConnections; MTProtoConnections connections; diff --git a/Telegram/SourceFiles/mtproto/mtpSessionImpl.h b/Telegram/SourceFiles/mtproto/mtpSessionImpl.h index d2899b970c..6067802900 100644 --- a/Telegram/SourceFiles/mtproto/mtpSessionImpl.h +++ b/Telegram/SourceFiles/mtproto/mtpSessionImpl.h @@ -18,22 +18,17 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #pragma once template -mtpRequestId MTProtoSession::send(const TRequest &request, RPCResponseHandler callbacks, uint64 msCanWait, uint32 layer, bool toMainDC, mtpRequestId after) { +mtpRequestId MTProtoSession::send(const TRequest &request, RPCResponseHandler callbacks, uint64 msCanWait, bool needsLayer, bool toMainDC, mtpRequestId after) { mtpRequestId requestId = 0; - if (layer && dc->needConnectionInit()) { - MTPInitConnection requestWrap(MTPinitConnection(MTP_int(ApiId), MTP_string(cApiDeviceModel()), MTP_string(cApiSystemVersion()), MTP_string(cApiAppVersion()), MTP_string(ApiLang), request)); - return sendFirst(requestWrap, callbacks, msCanWait, layer, toMainDC, after); - } try { - uint32 requestSize = request.size() >> 2; - if (dc->connectionInited()) layer = 0; - mtpRequest reqSerialized(mtpRequestData::prepare(requestSize + (layer ? 1 : 0))); - if (layer) reqSerialized->push_back(mtpLayers[layer]); + uint32 requestSize = request.innerLength() >> 2; + mtpRequest reqSerialized(mtpRequestData::prepare(requestSize)); request.write(*reqSerialized); DEBUG_LOG(("MTP Info: adding request to toSendMap, msCanWait %1").arg(msCanWait)); reqSerialized->msDate = getms(true); // > 0 - can send without container + reqSerialized->needsLayer = needsLayer; if (after) reqSerialized->after = _mtp_internal::getRequest(after); requestId = _mtp_internal::storeRequest(reqSerialized, callbacks); @@ -45,44 +40,3 @@ mtpRequestId MTProtoSession::send(const TRequest &request, RPCResponseHandler ca if (requestId) _mtp_internal::registerRequest(requestId, toMainDC ? -getDC() : getDC()); return requestId; } - -class RPCWrappedDcDoneHandler : public RPCAbstractDoneHandler { -public: - RPCWrappedDcDoneHandler(const MTProtoDCPtr &dc, const RPCDoneHandlerPtr &ondone) : _dc(dc), _ondone(ondone) { - } - - void operator()(mtpRequestId requestId, const mtpPrime *from, const mtpPrime *end) const { - _dc->setConnectionInited(); - if (_ondone) (*_ondone)(requestId, from, end); - } - -private: - MTProtoDCPtr _dc; - RPCDoneHandlerPtr _ondone; -}; - -template -mtpRequestId MTProtoSession::sendFirst(const MTPInitConnection &request, RPCResponseHandler callbacks, uint64 msCanWait, uint32 layer, bool toMainDC, mtpRequestId after) { - mtpRequestId requestId = 0; - try { - uint32 requestSize = request.size() >> 2; - mtpRequest reqSerialized(mtpRequestData::prepare(requestSize + (layer ? 1 : 0))); - if (layer) reqSerialized->push_back(mtpLayers[layer]); - request.write(*reqSerialized); - - DEBUG_LOG(("MTP Info: adding wrapped to init connection request to toSendMap, msCanWait %1").arg(msCanWait)); - callbacks.onDone = RPCDoneHandlerPtr(new RPCWrappedDcDoneHandler(dc, callbacks.onDone)); - reqSerialized->msDate = getms(true); // > 0 - can send without container - if (after) reqSerialized->after = _mtp_internal::getRequest(after); - requestId = _mtp_internal::storeRequest(reqSerialized, callbacks); - - sendPrepared(reqSerialized, msCanWait); - } catch (Exception &e) { - requestId = 0; - _mtp_internal::rpcErrorOccured(requestId, callbacks, rpcClientError("NO_REQUEST_ID", QString("sendFirst() failed to queue request, exception: %1").arg(e.what()))); - } - if (requestId) { - _mtp_internal::registerRequest(requestId, toMainDC ? -getDC() : getDC()); - } - return requestId; -} diff --git a/Telegram/SourceFiles/mtproto/scheme.tl b/Telegram/SourceFiles/mtproto/scheme.tl index f4f9a7db56..ab207794b4 100644 --- a/Telegram/SourceFiles/mtproto/scheme.tl +++ b/Telegram/SourceFiles/mtproto/scheme.tl @@ -13,7 +13,6 @@ /////////////////// Layer cons /////////////////////////////// - //invokeAfterMsg#cb9f372d msg_id:long query:!X = X; //invokeAfterMsgs#3dc4b4f0 msg_ids:Vector query:!X = X; //invokeWithLayer1#53835315 query:!X = X; @@ -34,6 +33,7 @@ //invokeWithLayer16#cf5f0987 query:!X = X; //invokeWithLayer17#50858a19 query:!X = X; //invokeWithLayer18#1c900537 query:!X = X; +//invokeWithLayer#da9b0d0d layer:int query:!X = X; // after 18 layer /////////////////////////////// /// Authorization key creation @@ -287,7 +287,7 @@ contactBlocked#561bc879 user_id:int date:int = ContactBlocked; contactSuggested#3de191a1 user_id:int mutual_contacts:int = ContactSuggested; -contactStatus#aa77b873 user_id:int expires:int = ContactStatus; +contactStatus#d3680c61 user_id:int status:UserStatus = ContactStatus; chatLocated#3631cf4c chat_id:int distance:int = ChatLocated; @@ -510,6 +510,34 @@ contacts.found#566000e results:Vector users:Vector = contact updateServiceNotification#382dd3e4 type:string message:string media:MessageMedia popup:Bool = Update; +userStatusRecently#e26f42f1 = UserStatus; +userStatusLastWeek#7bf09fc = UserStatus; +userStatusLastMonth#77ebc742 = UserStatus; + +updatePrivacy#ee3b272a key:PrivacyKey rules:Vector = Update; + +inputPrivacyKeyStatusTimestamp#4f96cb18 = InputPrivacyKey; + +privacyKeyStatusTimestamp#bc2eab30 = PrivacyKey; + +inputPrivacyValueAllowContacts#d09e07b = InputPrivacyRule; +inputPrivacyValueAllowAll#184b35ce = InputPrivacyRule; +inputPrivacyValueAllowUsers#131cc67f users:Vector = InputPrivacyRule; +inputPrivacyValueDisallowContacts#ba52007 = InputPrivacyRule; +inputPrivacyValueDisallowAll#d66b66c9 = InputPrivacyRule; +inputPrivacyValueDisallowUsers#90110467 users:Vector = InputPrivacyRule; + +privacyValueAllowContacts#fffe1bac = PrivacyRule; +privacyValueAllowAll#65427b82 = PrivacyRule; +privacyValueAllowUsers#4d5bbe0c users:Vector = PrivacyRule; +privacyValueDisallowContacts#f888fa1a = PrivacyRule; +privacyValueDisallowAll#8b73e763 = PrivacyRule; +privacyValueDisallowUsers#c7f49b7 users:Vector = PrivacyRule; + +account.privacyRules#554abb6f rules:Vector users:Vector = account.PrivacyRules; + +accountDaysTTL#b8d0afdf days:int = AccountDaysTTL; + ---functions--- invokeAfterMsg#cb9f372d msg_id:long query:!X = X; @@ -631,3 +659,9 @@ account.checkUsername#2714d86c username:string = Bool; account.updateUsername#3e0bdd7c username:string = User; contacts.search#11f812d8 q:string limit:int = contacts.Found; + +account.getPrivacy#dadbc950 key:InputPrivacyKey = account.PrivacyRules; +account.setPrivacy#c9f81ce8 key:InputPrivacyKey rules:Vector = account.PrivacyRules; +account.deleteAccount#418d4e0b reason:string = Bool; +account.getAccountTTL#8fc711d = AccountDaysTTL; +account.setAccountTTL#2442485e ttl:AccountDaysTTL = Bool; diff --git a/Telegram/SourceFiles/overviewwidget.cpp b/Telegram/SourceFiles/overviewwidget.cpp index 76d1ab4703..2d50ec3a62 100644 --- a/Telegram/SourceFiles/overviewwidget.cpp +++ b/Telegram/SourceFiles/overviewwidget.cpp @@ -40,6 +40,7 @@ OverviewInner::OverviewInner(OverviewWidget *overview, ScrollArea *scroll, const , _hist(App::history(peer->id)) , _photosInRow(1) , _photosToAdd(0) + , _selMode(false) , _width(0) , _height(0) , _minHeight(0) @@ -425,7 +426,7 @@ void OverviewInner::dragActionFinish(const QPoint &screenPos, Qt::MouseButton bu dragActionUpdate(screenPos); if (textlnkOver()) { - if (textlnkDown() == textlnkOver() && _dragAction != Dragging) { + if (textlnkDown() == textlnkOver() && _dragAction != Dragging && !_selMode) { needClick = textlnkDown(); } } @@ -662,7 +663,10 @@ void OverviewInner::paintEvent(QPaintEvent *e) { } } if (sel == FullItemSel) { - p.fillRect(QRect(pos.x(), pos.y(), _vsize, _vsize), st::msgInSelectOverlay->b); + p.fillRect(QRect(pos.x(), pos.y(), _vsize, _vsize), st::overviewPhotoSelectOverlay->b); + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoChecked); + } else if (_selMode/* || (selfrom < count && selfrom <= selto && 0 <= selto)*/) { + p.drawPixmap(QPoint(pos.x() + _vsize - st::overviewPhotoChecked.pxWidth(), pos.y() + _vsize - st::overviewPhotoChecked.pxHeight()), App::sprite(), st::overviewPhotoCheck); } } break; } @@ -1136,6 +1140,10 @@ void OverviewInner::switchType(MediaOverviewType type) { if (App::wnd()) App::wnd()->update(); } +void OverviewInner::setSelectMode(bool enabled) { + _selMode = enabled; +} + void OverviewInner::openContextUrl() { HistoryItem *was = App::hoveredLinkItem(); App::hoveredLinkItem(App::contextItem()); @@ -1620,6 +1628,8 @@ MediaOverviewType OverviewWidget::type() const { } void OverviewWidget::switchType(MediaOverviewType type) { + _selCount = 0; + _inner.setSelectMode(false); _inner.switchType(type); switch (type) { case OverviewPhotos: _header = lang(lng_profile_photos_header); break; @@ -1628,7 +1638,6 @@ void OverviewWidget::switchType(MediaOverviewType type) { case OverviewAudios: _header = lang(lng_profile_audios_header); break; } noSelectingScroll(); - _selCount = 0; App::main()->topBar()->showSelected(0); updateTopBarSelection(); _scroll.scrollToY(_scroll.scrollTopMax()); @@ -1639,6 +1648,7 @@ void OverviewWidget::updateTopBarSelection() { int32 selectedForForward, selectedForDelete; _inner.getSelectionState(selectedForForward, selectedForDelete); _selCount = selectedForDelete ? selectedForDelete : selectedForForward; + _inner.setSelectMode(_selCount > 0); if (App::main()) { App::main()->topBar()->showSelected(_selCount > 0 ? _selCount : 0); App::main()->topBar()->update(); diff --git a/Telegram/SourceFiles/overviewwidget.h b/Telegram/SourceFiles/overviewwidget.h index 377de7bf54..17af20fe08 100644 --- a/Telegram/SourceFiles/overviewwidget.h +++ b/Telegram/SourceFiles/overviewwidget.h @@ -55,6 +55,8 @@ public: MediaOverviewType type() const; void switchType(MediaOverviewType type); + void setSelectMode(bool enabled); + void mediaOverviewUpdated(); void changingMsgId(HistoryItem *row, MsgId newId); void msgUpdated(const HistoryItem *msg); @@ -124,6 +126,7 @@ private: } CachedSize; typedef QMap CachedSizes; CachedSizes _cached; + bool _selMode; // other typedef struct _CachedItem { diff --git a/Telegram/Telegram.plist b/Telegram/Telegram.plist index 120a6473c8..4abefb6625 100644 --- a/Telegram/Telegram.plist +++ b/Telegram/Telegram.plist @@ -11,7 +11,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 0.6.8 + 0.6.9 CFBundleSignature ???? NOTE diff --git a/Telegram/Telegram.rc b/Telegram/Telegram.rc index 949f7da6e63d4969663c165e8d8dc3dd60f06c83..c4eaa8e992ca678d229e2b0cc04a2026f0bef91e 100644 GIT binary patch delta 42 vcmZ3cy-a(94mYFaWL<7UM$66d-2F^I>OHSDBT(!;uk_>yexc0~{C;cz4FwD< delta 42 vcmZ3cy-a(94mYF4WL<7UMvKky-2F^I>OHSDBT(!;uk_>yexc0~{C;cz45SPv diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index a47efbf716..b6ad5c9dea 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -1521,7 +1521,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.8; + CURRENT_PROJECT_VERSION = 0.6.9; DEBUG_INFORMATION_FORMAT = dwarf; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -1539,7 +1539,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COPY_PHASE_STRIP = YES; - CURRENT_PROJECT_VERSION = 0.6.8; + CURRENT_PROJECT_VERSION = 0.6.9; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_OPTIMIZATION_LEVEL = fast; GCC_PREFIX_HEADER = ./SourceFiles/stdafx.h; @@ -1565,10 +1565,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.8; + CURRENT_PROJECT_VERSION = 0.6.9; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.6; - DYLIB_CURRENT_VERSION = 0.6.8; + DYLIB_CURRENT_VERSION = 0.6.9; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -1708,10 +1708,10 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = ""; COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 0.6.8; + CURRENT_PROJECT_VERSION = 0.6.9; DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 0.6; - DYLIB_CURRENT_VERSION = 0.6.8; + DYLIB_CURRENT_VERSION = 0.6.9; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = ""; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; diff --git a/Telegram/_qt_5_3_1_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c b/Telegram/_qt_5_3_1_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c new file mode 100644 index 0000000000..6b36e4fab9 --- /dev/null +++ b/Telegram/_qt_5_3_1_patch/qtbase/src/3rdparty/pcre/pcre16_valid_utf16.c @@ -0,0 +1,137 @@ +/************************************************* +* Perl-Compatible Regular Expressions * +*************************************************/ + +/* PCRE is a library of functions to support regular expressions whose syntax +and semantics are as close as possible to those of the Perl 5 language. + + Written by Philip Hazel + Copyright (c) 1997-2013 University of Cambridge + +----------------------------------------------------------------------------- +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + * Neither the name of the University of Cambridge nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +----------------------------------------------------------------------------- +*/ + + +/* This module contains an internal function for validating UTF-16 character +strings. */ + + +#ifdef PCRE_HAVE_CONFIG_H +#include "config.h" +#endif + +/* Generate code with 16 bit character support. */ +#define COMPILE_PCRE16 + +#include "pcre_internal.h" + + +/************************************************* +* Validate a UTF-16 string * +*************************************************/ + +/* This function is called (optionally) at the start of compile or match, to +check that a supposed UTF-16 string is actually valid. The early check means +that subsequent code can assume it is dealing with a valid string. The check +can be turned off for maximum performance, but the consequences of supplying an +invalid string are then undefined. + +From release 8.21 more information about the details of the error are passed +back in the returned value: + +PCRE_UTF16_ERR0 No error +PCRE_UTF16_ERR1 Missing low surrogate at the end of the string +PCRE_UTF16_ERR2 Invalid low surrogate +PCRE_UTF16_ERR3 Isolated low surrogate +PCRE_UTF16_ERR4 Unused (was non-character) + +Arguments: + string points to the string + length length of string, or -1 if the string is zero-terminated + errp pointer to an error position offset variable + +Returns: = 0 if the string is a valid UTF-16 string + > 0 otherwise, setting the offset of the bad character +*/ + +int +PRIV(valid_utf)(PCRE_PUCHAR string, int length, int *erroroffset) +{ +#ifdef SUPPORT_UTF +register PCRE_PUCHAR p; +register pcre_uint32 c; + +if (length < 0) + { + for (p = string; *p != 0; p++); + length = p - string; + } + +for (p = string; length-- > 0; p++) + { + c = *p; + + if ((c & 0xf800) != 0xd800) + { + /* Normal UTF-16 code point. Neither high nor low surrogate. */ + } + else if ((c & 0xfc00) == 0xd800) + { + /* High surrogate. Must be a followed by a low surrogate. */ + if (length == 0) + { + *erroroffset = p - string; + return PCRE_UTF16_ERR1; + } + p++; + length--; + if ((*p & 0xfc00) != 0xdc00) + { + *erroroffset = p - string; + return PCRE_UTF16_ERR2; + } + } + else + { + /* Isolated low surrogate. Always an error. */ + *erroroffset = p - string; + return PCRE_UTF16_ERR3; + } + } + +#else /* SUPPORT_UTF */ +(void)(string); /* Keep picky compilers happy */ +(void)(length); +(void)(erroroffset); +#endif /* SUPPORT_UTF */ + +return PCRE_UTF16_ERR0; /* This indicates success */ +} + +/* End of pcre16_valid_utf16.c */