Update for latest php-libtgvoip

This commit is contained in:
Daniil Gentili 2020-03-01 16:31:56 +01:00
parent bc2426bcb4
commit 55d4de2df9
Signed by: danog
GPG Key ID: 8C1BE3B34B230CA7
3 changed files with 45 additions and 37 deletions

View File

@ -26,7 +26,7 @@ class Absolute
{ {
public static function absolute($file) 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; $file = Magic::getcwd() . '/' . $file;
} }
return $file; return $file;

View File

@ -245,7 +245,7 @@ class Magic
throw new \danog\MadelineProto\Exception(\hex2bin(\danog\MadelineProto\Lang::$current_lang['v_error']), 0, null, 'MadelineProto', 1); throw new \danog\MadelineProto\Exception(\hex2bin(\danog\MadelineProto\Lang::$current_lang['v_error']), 0, null, 'MadelineProto', 1);
} }
if (\class_exists('\\danog\\MadelineProto\\VoIP')) { 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); throw new \danog\MadelineProto\Exception(\hex2bin(\danog\MadelineProto\Lang::$current_lang['v_tgerror']), 0, null, 'MadelineProto', 1);
} }
} }

View File

@ -19,6 +19,8 @@
namespace danog\MadelineProto\VoIP; namespace danog\MadelineProto\VoIP;
use danog\MadelineProto\Tools;
/** /**
* Manages the creation of the authorization key. * Manages the creation of the authorization key.
* *
@ -29,44 +31,50 @@ trait AuthKeyHandler
{ {
private $calls = []; 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 mixed
*
* @return \danog\MadelineProto\VoIPController
*/ */
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 mixed
*
* @return bool
*/ */
public function acceptCall(array $user): bool public function discardCallFrom($instance, $call, $reason, $rating = [], $need_debug = true)
{ {
return \danog\MadelineProto\Tools::wait($this->acceptCallAsync($user)); $promise = Tools::call(function () use ($instance, $call, $reason, $rating, $need_debug) {
} if (!$res = yield from $this->discardCall($call, $reason, $rating, $need_debug)) {
/** return false;
* Discard call (synchronous). }
* return $instance;
* @param array $call Call });
* @param string $reason Discard reason if ($this->wrapper && $this->wrapper->isAsync()) {
* @param array $rating Rating return $promise;
* @param boolean $need_debug Need debug? }
* return Tools::wait($promise);
* @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));
} }
/** /**
* Request VoIP call. * Request VoIP call.
@ -75,7 +83,7 @@ trait AuthKeyHandler
* *
* @return void * @return void
*/ */
public function requestCallAsync($user): \Generator public function requestCall($user): \Generator
{ {
if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) {
throw \danog\MadelineProto\Exception::extension('libtgvoip'); throw \danog\MadelineProto\Exception::extension('libtgvoip');
@ -107,7 +115,7 @@ trait AuthKeyHandler
* *
* @return \Generator * @return \Generator
*/ */
public function acceptCallAsync(array $call): \Generator public function acceptCall(array $call): \Generator
{ {
if (!\class_exists('\\danog\\MadelineProto\\VoIP')) { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) {
throw new \danog\MadelineProto\Exception(); throw new \danog\MadelineProto\Exception();
@ -131,7 +139,7 @@ trait AuthKeyHandler
} }
if ($e->rpc === 'CALL_ALREADY_DECLINED') { if ($e->rpc === 'CALL_ALREADY_DECLINED') {
$this->logger->logger(\danog\MadelineProto\Lang::$current_lang['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; return false;
} }
throw $e; throw $e;
@ -170,14 +178,14 @@ trait AuthKeyHandler
} }
if ($e->rpc === 'CALL_ALREADY_DECLINED') { if ($e->rpc === 'CALL_ALREADY_DECLINED') {
$this->logger->logger(\danog\MadelineProto\Lang::$current_lang['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; return false;
} }
throw $e; throw $e;
} }
$visualization = []; $visualization = [];
$length = new \tgseclib\Math\BigInteger(\count(\danog\MadelineProto\Magic::$emojis)); $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); $number[0] = \chr(\ord($number[0]) & 0x7f);
$visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()]; $visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()];
} }
@ -217,7 +225,7 @@ trait AuthKeyHandler
} }
$visualization = []; $visualization = [];
$length = new \tgseclib\Math\BigInteger(\count(\danog\MadelineProto\Magic::$emojis)); $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); $number[0] = \chr(\ord($number[0]) & 0x7f);
$visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()]; $visualization[] = \danog\MadelineProto\Magic::$emojis[(int) (new \tgseclib\Math\BigInteger($number, 256))->divide($length)[1]->toString()];
} }
@ -268,7 +276,7 @@ trait AuthKeyHandler
* *
* @return \Generator * @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')) { if (!\class_exists('\\danog\\MadelineProto\\VoIP')) {
throw \danog\MadelineProto\Exception::extension('libtgvoip'); throw \danog\MadelineProto\Exception::extension('libtgvoip');