From 55d4de2df9de667bd3502d35ad3953a8764e0090 Mon Sep 17 00:00:00 2001 From: Daniil Gentili Date: Sun, 1 Mar 2020 16:31:56 +0100 Subject: [PATCH] Update for latest php-libtgvoip --- src/danog/MadelineProto/Absolute.php | 2 +- src/danog/MadelineProto/Magic.php | 2 +- .../MadelineProto/VoIP/AuthKeyHandler.php | 78 ++++++++++--------- 3 files changed, 45 insertions(+), 37 deletions(-) diff --git a/src/danog/MadelineProto/Absolute.php b/src/danog/MadelineProto/Absolute.php index 52d9baf2..50b84d1b 100644 --- a/src/danog/MadelineProto/Absolute.php +++ b/src/danog/MadelineProto/Absolute.php @@ -26,7 +26,7 @@ class Absolute { public static function absolute($file) { - if ($file[0] !== '/' && $file[1] !== ':' && !\in_array(\substr($file, 0, 4), ['phar', 'http'])) { + if (($file[0] ?? '') !== '/' && ($file[1] ?? '') !== ':' && !\in_array(\substr($file, 0, 4), ['phar', 'http'])) { $file = Magic::getcwd() . '/' . $file; } return $file; diff --git a/src/danog/MadelineProto/Magic.php b/src/danog/MadelineProto/Magic.php index a009a6a5..48759d21 100644 --- a/src/danog/MadelineProto/Magic.php +++ b/src/danog/MadelineProto/Magic.php @@ -245,7 +245,7 @@ class Magic throw new \danog\MadelineProto\Exception(\hex2bin(\danog\MadelineProto\Lang::$current_lang['v_error']), 0, null, 'MadelineProto', 1); } if (\class_exists('\\danog\\MadelineProto\\VoIP')) { - if (!\defined('\\danog\\MadelineProto\\VoIP::PHP_LIBTGVOIP_VERSION') || !\in_array(\danog\MadelineProto\VoIP::PHP_LIBTGVOIP_VERSION, ['1.4.0'])) { + if (!\defined('\\danog\\MadelineProto\\VoIP::PHP_LIBTGVOIP_VERSION') || !\in_array(\danog\MadelineProto\VoIP::PHP_LIBTGVOIP_VERSION, ['1.5.0'])) { throw new \danog\MadelineProto\Exception(\hex2bin(\danog\MadelineProto\Lang::$current_lang['v_tgerror']), 0, null, 'MadelineProto', 1); } } diff --git a/src/danog/MadelineProto/VoIP/AuthKeyHandler.php b/src/danog/MadelineProto/VoIP/AuthKeyHandler.php index 5b7222bc..e3ae907b 100644 --- a/src/danog/MadelineProto/VoIP/AuthKeyHandler.php +++ b/src/danog/MadelineProto/VoIP/AuthKeyHandler.php @@ -19,6 +19,8 @@ namespace danog\MadelineProto\VoIP; +use danog\MadelineProto\Tools; + /** * Manages the creation of the authorization key. * @@ -29,44 +31,50 @@ trait AuthKeyHandler { private $calls = []; /** - * Request call (synchronous). + * Accept call from VoIP instance. * - * @param mixed $user User info + * @param \danog\MadelineProto\VoIP $instance Call instance + * @param array $user User * - * @internal - * - * @return \danog\MadelineProto\VoIPController + * @return mixed */ - public function requestCall($user) + public function acceptCallFrom($instance, $user) { - return \danog\MadelineProto\Tools::wait($this->requestCallAsync($user)); + $promise = Tools::call((function () use ($instance, $user) { + if (!$res = yield from $this->acceptCall($user)) { + $instance->discard(); + return false; + } + return $instance; + })()); + if ($this->wrapper && $this->wrapper->isAsync()) { + return $promise; + } + return Tools::wait($promise); } /** - * Accept call (synchronous). + * Undocumented function. * - * @param array $user Accept call + * @param \danog\MadelineProto\VoIP $instance Call instance + * @param array $call Call info + * @param array $reason Discard reason + * @param array $rating Rating + * @param boolean $need_debug Needs debug? * - * @internal - * - * @return bool + * @return mixed */ - public function acceptCall(array $user): bool + public function discardCallFrom($instance, $call, $reason, $rating = [], $need_debug = true) { - return \danog\MadelineProto\Tools::wait($this->acceptCallAsync($user)); - } - /** - * Discard call (synchronous). - * - * @param array $call Call - * @param string $reason Discard reason - * @param array $rating Rating - * @param boolean $need_debug Need debug? - * - * @return array - */ - public function discardCall(array $call, array $reason, array $rating = [], bool $need_debug = true): void - { - \danog\MadelineProto\Tools::wait($this->discardCallAsync($call, $reason, $rating, $need_debug)); + $promise = Tools::call(function () use ($instance, $call, $reason, $rating, $need_debug) { + if (!$res = yield from $this->discardCall($call, $reason, $rating, $need_debug)) { + return false; + } + return $instance; + }); + if ($this->wrapper && $this->wrapper->isAsync()) { + return $promise; + } + return Tools::wait($promise); } /** * Request VoIP call. @@ -75,7 +83,7 @@ trait AuthKeyHandler * * @return void */ - public function requestCallAsync($user): \Generator + public function requestCall($user): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip'); @@ -107,7 +115,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function acceptCallAsync(array $call): \Generator + public function acceptCall(array $call): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw new \danog\MadelineProto\Exception(); @@ -131,7 +139,7 @@ trait AuthKeyHandler } if ($e->rpc === 'CALL_ALREADY_DECLINED') { $this->logger->logger(\danog\MadelineProto\Lang::$current_lang['call_already_declined']); - yield from $this->discardCallAsync($call['id'], ['_' => 'phoneCallDiscardReasonHangup']); + yield from $this->discardCall($call['id'], ['_' => 'phoneCallDiscardReasonHangup']); return false; } throw $e; @@ -170,14 +178,14 @@ trait AuthKeyHandler } if ($e->rpc === 'CALL_ALREADY_DECLINED') { $this->logger->logger(\danog\MadelineProto\Lang::$current_lang['call_already_declined']); - yield from $this->discardCallAsync($call['id'], ['_' => 'phoneCallDiscardReasonHangup']); + yield from $this->discardCall($call['id'], ['_' => 'phoneCallDiscardReasonHangup']); return false; } throw $e; } $visualization = []; $length = new \tgseclib\Math\BigInteger(\count(\danog\MadelineProto\Magic::$emojis)); - foreach (\str_split(\hash('sha256', $key . \str_pad($this->calls[$params['id']]->storage['g_a'], 256, \chr(0), \STR_PAD_LEFT), true), 8) as $number) { + foreach (\str_split(\hash('sha256', $key.\str_pad($this->calls[$params['id']]->storage['g_a'], 256, \chr(0), \STR_PAD_LEFT), true), 8) as $number) { $number[0] = \chr(\ord($number[0]) & 0x7f); $visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()]; } @@ -217,7 +225,7 @@ trait AuthKeyHandler } $visualization = []; $length = new \tgseclib\Math\BigInteger(\count(\danog\MadelineProto\Magic::$emojis)); - foreach (\str_split(\hash('sha256', $key . \str_pad($params['g_a_or_b']->toBytes(), 256, \chr(0), \STR_PAD_LEFT), true), 8) as $number) { + foreach (\str_split(\hash('sha256', $key.\str_pad($params['g_a_or_b']->toBytes(), 256, \chr(0), \STR_PAD_LEFT), true), 8) as $number) { $number[0] = \chr(\ord($number[0]) & 0x7f); $visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()]; } @@ -268,7 +276,7 @@ trait AuthKeyHandler * * @return \Generator */ - public function discardCallAsync(array $call, array $reason, array $rating = [], bool $need_debug = true): \Generator + public function discardCall(array $call, array $reason, array $rating = [], bool $need_debug = true): \Generator { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { throw \danog\MadelineProto\Exception::extension('libtgvoip');