Fix CDN DCs

This commit is contained in:
Daniil Gentili 2020-07-23 18:08:14 +02:00
parent cd1716645d
commit 553e4c4da0
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
4 changed files with 15 additions and 10 deletions

@ -1 +1 @@
Subproject commit ef59cc0cb6723ebd600643faa50205065e8ee578
Subproject commit 03fe872f15fb8ccdcf074e885217aac1862aea12

View File

@ -436,9 +436,9 @@ class DataCenter
/* @var $context \Amp\ConnectContext */
$context = $context ?? (new ConnectContext())->withMaxAttempts(1)->withConnectTimeout(1000 * $this->settings[$dc_config_number]['timeout']);
foreach ($combos as $combo) {
$ipv6 = [$this->settings[$dc_config_number]['ipv6'] ? 'ipv6' : 'ipv4', $this->settings[$dc_config_number]['ipv6'] ? 'ipv4' : 'ipv6'];
foreach ($ipv6 as $ipv6) {
foreach ([true, false] as $useDoH) {
foreach ([true, false] as $useDoH) {
$ipv6Combos = [$this->settings[$dc_config_number]['ipv6'] ? 'ipv6' : 'ipv4', $this->settings[$dc_config_number]['ipv6'] ? 'ipv4' : 'ipv6'];
foreach ($ipv6Combos as $ipv6) {
// This is only for non-MTProto connections
if (!$dc_number) {
/* @var $ctx \danog\MadelineProto\Stream\ConnectionContext */
@ -467,6 +467,9 @@ class DataCenter
foreach (\array_unique([$port, 443, 80, 88, 5222]) as $port) {
$stream = \end($combo)[0];
if ($stream === HttpsStream::getName()) {
if (\strpos($dc_number, '_cdn') !== false) {
continue;
}
$subdomain = $this->dclist['ssl_subdomains'][\preg_replace('/\\D+/', '', $dc_number)];
if (\strpos($dc_number, '_media') !== false) {
$subdomain .= '-1';
@ -513,9 +516,6 @@ class DataCenter
}
}
}
if (isset($this->dclist[$test][$ipv6][$dc_number.'_bk']['ip_address'])) {
$ctxs = \array_merge($ctxs, $this->generateContexts($dc_number.'_bk'));
}
if (empty($ctxs)) {
unset($this->sockets[$dc_number]);
$this->API->logger->logger("No info for DC {$dc_number}", Logger::ERROR);

View File

@ -1007,8 +1007,9 @@ class MTProto extends AsyncConstruct implements TLCallback
$this->startLoops();
if (yield from $this->fullGetSelf()) {
$this->authorized = self::LOGGED_IN;
yield from $this->getCdnConfig($this->datacenter->curdc);
$this->setupLogger();
yield from $this->getCdnConfig($this->datacenter->curdc);
yield from $this->initAuthorization();
}
$this->startUpdateSystem(true);
if ($this->authorized === self::LOGGED_IN && !$this->authorization['user']['bot'] && $this->settings['peer']['cache_all_peers_on_startup']) {
@ -1164,7 +1165,7 @@ class MTProto extends AsyncConstruct implements TLCallback
$lang_pack = 'android';
}
// Detect app version
$app_version = self::RELEASE.' ('.self::V.', '.Magic::$revision.')';
$app_version = self::RELEASE.' ('.self::V.', '.str_replace(' (AN UPDATE IS REQUIRED)', '', Magic::$revision).')';
if (($settings['app_info']['api_id'] ?? 0) === 6) {
// TG DEV NOTICE: these app info spoofing measures were implemented for NON-MALICIOUS purposes.
// All accounts registered with a custom API ID require manual verification through recover@telegram.org, to avoid instant permabans.
@ -1490,7 +1491,7 @@ class MTProto extends AsyncConstruct implements TLCallback
return false;
}
foreach ($this->datacenter->getDataCenterConnections() as $dc) {
if (!$dc->isAuthorized() || !$dc->hasTempAuthKey()) {
if ((!$dc->isAuthorized() || !$dc->hasTempAuthKey()) && !$dc->isCDN()) {
return false;
}
}

View File

@ -102,6 +102,10 @@ trait AuthKeyHandler
}
}
if (!isset($key)) {
if ($cdn) {
$this->logger->logger("Could not find required CDN public key, postponing CDN handshake...");
return;
}
throw new \danog\MadelineProto\SecurityException("Couldn't find any of our keys in the server_public_key_fingerprints vector.");
}
$pq_bytes = $ResPQ['pq'];