diff --git a/Telegram/SourceFiles/mtproto/dc_options.cpp b/Telegram/SourceFiles/mtproto/dc_options.cpp index 809931f3dd..059fcfcb68 100644 --- a/Telegram/SourceFiles/mtproto/dc_options.cpp +++ b/Telegram/SourceFiles/mtproto/dc_options.cpp @@ -408,6 +408,8 @@ bool DcOptions::getDcRSAKey(DcId dcId, const QVector &fingerprints, int DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { auto lookupDesiredFlags = [type](int address, int protocol) -> std::vector { + auto throughProxy = (Global::ConnectionType() != dbictAuto); + switch (type) { case DcType::Regular: case DcType::Temporary: { @@ -416,11 +418,14 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // Regular TCP IPv4 + throughProxy ? (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? qFlags(MTPDdcOption::Flag::f_static) : MTPDdcOption::Flags(0), qFlags(MTPDdcOption::Flag::f_tcpo_only), MTPDdcOption::Flags(0) }; case Variants::Http: return { // Regular HTTP IPv4 + throughProxy ? qFlags(MTPDdcOption::Flag::f_static) : MTPDdcOption::Flags(0), MTPDdcOption::Flags(0), }; } @@ -429,11 +434,14 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // Regular TCP IPv6 + throughProxy ? (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), qFlags(MTPDdcOption::Flag::f_ipv6), }; case Variants::Http: return { // Regular HTTP IPv6 + throughProxy ? (MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_ipv6), qFlags(MTPDdcOption::Flag::f_ipv6), }; } @@ -446,14 +454,20 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // Media download TCP IPv4 - (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only), - qFlags(MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_tcpo_only), qFlags(MTPDdcOption::Flag::f_media_only), + throughProxy ? qFlags(MTPDdcOption::Flag::f_static) : MTPDdcOption::Flags(0), + (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? qFlags(MTPDdcOption::Flag::f_tcpo_only) : qFlags(MTPDdcOption::Flag::f_media_only), MTPDdcOption::Flags(0), }; case Variants::Http: return { // Media download HTTP IPv4 + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_media_only), qFlags(MTPDdcOption::Flag::f_media_only), + throughProxy ? qFlags(MTPDdcOption::Flag::f_static) : MTPDdcOption::Flags(0), MTPDdcOption::Flags(0), }; } @@ -462,14 +476,20 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // Media download TCP IPv6 - (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), - (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_ipv6), + (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6) : (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6), qFlags(MTPDdcOption::Flag::f_ipv6) }; case Variants::Http: return { // Media download HTTP IPv6 + throughProxy ? (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_media_only | MTPDdcOption::Flag::f_ipv6), + throughProxy ? (MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_ipv6), qFlags(MTPDdcOption::Flag::f_ipv6), }; } @@ -482,11 +502,14 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // CDN TCP IPv4 + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_cdn), (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_tcpo_only), qFlags(MTPDdcOption::Flag::f_cdn), }; case Variants::Http: return { // CDN HTTP IPv4 + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_static) : qFlags(MTPDdcOption::Flag::f_cdn), qFlags(MTPDdcOption::Flag::f_cdn), }; } @@ -495,11 +518,14 @@ DcOptions::Variants DcOptions::lookup(DcId dcId, DcType type) const { switch (protocol) { case Variants::Tcp: return { // CDN TCP IPv6 + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_tcpo_only), + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_tcpo_only | MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6), }; case Variants::Http: return { // CDN HTTP IPv6 + throughProxy ? (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6 | MTPDdcOption::Flag::f_static) : (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6), (MTPDdcOption::Flag::f_cdn | MTPDdcOption::Flag::f_ipv6), }; }