Upgrade madelineProto and amp websocket

This commit is contained in:
Alexander Pankratov 2023-09-28 12:57:34 +02:00
parent 4ecff738cc
commit 1e96b4ede3
5 changed files with 88 additions and 80 deletions

View File

@ -21,11 +21,11 @@
"php": "^8.1",
"ext-json": "*",
"ext-mbstring": "*",
"amphp/http-server": "^v3.x-dev",
"amphp/http-server": "^v3",
"amphp/http": "^v2",
"amphp/http-server-router": "^2",
"amphp/http-server-form-parser": "^v2",
"amphp/websocket-server": "3.x-dev",
"amphp/websocket-server": "^v3",
"amphp/websocket-client": "^v2",
"vlucas/phpdotenv": "^4",
"danog/madelineproto": "dev-v8_fix_cleanup"

132
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "ef688c3f6b03504945ac5f31f0f69775",
"content-hash": "7999d0b15d74aafe194545856812c5d7",
"packages": [
{
"name": "amphp/amp",
@ -712,16 +712,16 @@
},
{
"name": "amphp/http-server",
"version": "3.x-dev",
"version": "v3.2.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/http-server.git",
"reference": "e984728667de7394629618e4f603a962981a4f91"
"reference": "0f658ebb8dcc0d352b26f8021288ff101e3888b5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/http-server/zipball/e984728667de7394629618e4f603a962981a4f91",
"reference": "e984728667de7394629618e4f603a962981a4f91",
"url": "https://api.github.com/repos/amphp/http-server/zipball/0f658ebb8dcc0d352b26f8021288ff101e3888b5",
"reference": "0f658ebb8dcc0d352b26f8021288ff101e3888b5",
"shasum": ""
},
"require": {
@ -753,7 +753,6 @@
"suggest": {
"ext-zlib": "Allows GZip compression of response bodies"
},
"default-branch": true,
"type": "library",
"autoload": {
"files": [
@ -798,7 +797,7 @@
],
"support": {
"issues": "https://github.com/amphp/http-server/issues",
"source": "https://github.com/amphp/http-server/tree/3.x"
"source": "https://github.com/amphp/http-server/tree/v3.2.0"
},
"funding": [
{
@ -806,7 +805,7 @@
"type": "github"
}
],
"time": "2023-09-04T04:43:25+00:00"
"time": "2023-08-24T23:40:38+00:00"
},
{
"name": "amphp/http-server-form-parser",
@ -1876,16 +1875,16 @@
},
{
"name": "amphp/websocket",
"version": "v2.0.0",
"version": "v2.0.1",
"source": {
"type": "git",
"url": "https://github.com/amphp/websocket.git",
"reference": "227e285606a2d7edfd5f5573623810ea1b568ba7"
"reference": "f40de822dde0dfe4273e7d6ee4306dbc4d363d44"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/websocket/zipball/227e285606a2d7edfd5f5573623810ea1b568ba7",
"reference": "227e285606a2d7edfd5f5573623810ea1b568ba7",
"url": "https://api.github.com/repos/amphp/websocket/zipball/f40de822dde0dfe4273e7d6ee4306dbc4d363d44",
"reference": "f40de822dde0dfe4273e7d6ee4306dbc4d363d44",
"shasum": ""
},
"require": {
@ -1945,7 +1944,7 @@
],
"support": {
"issues": "https://github.com/amphp/websocket/issues",
"source": "https://github.com/amphp/websocket/tree/v2.0.0"
"source": "https://github.com/amphp/websocket/tree/v2.0.1"
},
"funding": [
{
@ -1953,7 +1952,7 @@
"type": "github"
}
],
"time": "2023-09-03T23:00:48+00:00"
"time": "2023-09-14T04:17:20+00:00"
},
{
"name": "amphp/websocket-client",
@ -1961,12 +1960,12 @@
"source": {
"type": "git",
"url": "https://github.com/amphp/websocket-client.git",
"reference": "434254c42cb9b667594e703b54f0d025fc4b3ac9"
"reference": "846373b90f056c64792b9a2ec2d094d1e5f00ab8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/websocket-client/zipball/434254c42cb9b667594e703b54f0d025fc4b3ac9",
"reference": "434254c42cb9b667594e703b54f0d025fc4b3ac9",
"url": "https://api.github.com/repos/amphp/websocket-client/zipball/846373b90f056c64792b9a2ec2d094d1e5f00ab8",
"reference": "846373b90f056c64792b9a2ec2d094d1e5f00ab8",
"shasum": ""
},
"require": {
@ -2038,20 +2037,20 @@
"type": "github"
}
],
"time": "2023-09-06T03:40:42+00:00"
"time": "2023-09-09T16:09:04+00:00"
},
{
"name": "amphp/websocket-server",
"version": "3.x-dev",
"version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/websocket-server.git",
"reference": "9dc24cc3ca8c8db14f0be04f51f9b4d40b384096"
"reference": "8a57456e4afc5594514923ebd1ace2e6b46b9e78"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/amphp/websocket-server/zipball/9dc24cc3ca8c8db14f0be04f51f9b4d40b384096",
"reference": "9dc24cc3ca8c8db14f0be04f51f9b4d40b384096",
"url": "https://api.github.com/repos/amphp/websocket-server/zipball/8a57456e4afc5594514923ebd1ace2e6b46b9e78",
"reference": "8a57456e4afc5594514923ebd1ace2e6b46b9e78",
"shasum": ""
},
"require": {
@ -2063,7 +2062,7 @@
"amphp/websocket": "^2",
"php": ">=8.1",
"psr/log": "^1|^2|^3",
"revolt/event-loop": "^1 || ^0.2.4"
"revolt/event-loop": "^1"
},
"require-dev": {
"amphp/http-client": "^5-dev",
@ -2081,7 +2080,6 @@
"suggest": {
"ext-zlib": "Required for compression"
},
"default-branch": true,
"type": "library",
"autoload": {
"psr-4": {
@ -2118,7 +2116,7 @@
],
"support": {
"issues": "https://github.com/amphp/websocket-server/issues",
"source": "https://github.com/amphp/websocket-server/tree/3.x"
"source": "https://github.com/amphp/websocket-server/tree/v3.0.0"
},
"funding": [
{
@ -2126,7 +2124,7 @@
"type": "github"
}
],
"time": "2023-09-07T04:04:35+00:00"
"time": "2023-09-09T15:46:35+00:00"
},
{
"name": "amphp/windows-registry",
@ -2454,16 +2452,16 @@
},
{
"name": "danog/loop",
"version": "1.0.4",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/danog/loop.git",
"reference": "73f1574f37b7b6dbd84b2f22010e6f85be95d6ea"
"reference": "83c42b26c1d8d070c56bc9c03e2e8a147b45c60f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/danog/loop/zipball/73f1574f37b7b6dbd84b2f22010e6f85be95d6ea",
"reference": "73f1574f37b7b6dbd84b2f22010e6f85be95d6ea",
"url": "https://api.github.com/repos/danog/loop/zipball/83c42b26c1d8d070c56bc9c03e2e8a147b45c60f",
"reference": "83c42b26c1d8d070c56bc9c03e2e8a147b45c60f",
"shasum": ""
},
"require": {
@ -2503,7 +2501,7 @@
],
"support": {
"issues": "https://github.com/danog/loop/issues",
"source": "https://github.com/danog/loop/tree/1.0.4"
"source": "https://github.com/danog/loop/tree/1.1.1"
},
"funding": [
{
@ -2511,7 +2509,7 @@
"type": "github"
}
],
"time": "2023-09-03T14:31:18+00:00"
"time": "2023-09-30T12:45:07+00:00"
},
{
"name": "danog/madelineproto",
@ -2519,12 +2517,12 @@
"source": {
"type": "git",
"url": "https://github.com/danog/MadelineProto.git",
"reference": "bad83000a874c401a099895288f96624fe69a8c0"
"reference": "349cd4f6552da3aec0acdadd29ee04c515038be1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/danog/MadelineProto/zipball/bad83000a874c401a099895288f96624fe69a8c0",
"reference": "bad83000a874c401a099895288f96624fe69a8c0",
"url": "https://api.github.com/repos/danog/MadelineProto/zipball/349cd4f6552da3aec0acdadd29ee04c515038be1",
"reference": "349cd4f6552da3aec0acdadd29ee04c515038be1",
"shasum": ""
},
"require": {
@ -2543,7 +2541,7 @@
"bacon/bacon-qr-code": "^2.0",
"danog/dns-over-https": "^1",
"danog/ipc": "^1",
"danog/loop": "^1",
"danog/loop": "^1.1.0",
"danog/primemodule": "^1",
"danog/tg-file-decoder": "^0.1",
"ext-dom": "*",
@ -2557,7 +2555,7 @@
"league/uri": "^7",
"nikic/php-parser": "^4.16",
"php-64bit": ">=8.1",
"phpseclib/phpseclib": "^3",
"phpseclib/phpseclib": "^3.0.22",
"psr/http-factory": "^1.0",
"psr/log": "^3",
"revolt/event-loop": "^1.0.3",
@ -2582,6 +2580,7 @@
"symfony/yaml": "^6.0"
},
"suggest": {
"ext-bcmath": "Install the bcmath extension to speed up authorization",
"ext-ffi": "Install the primemodule and FFI extensions to speed up MadelineProto (https://prime.madelineproto.xyz)",
"ext-gmp": "Install the gmp extension to speed up authorization",
"ext-openssl": "Install the openssl extension for faster crypto",
@ -2639,7 +2638,7 @@
"type": "github"
}
],
"time": "2023-09-07T20:31:14+00:00"
"time": "2023-10-02T16:52:02+00:00"
},
{
"name": "danog/primemodule",
@ -2909,20 +2908,20 @@
},
{
"name": "league/uri",
"version": "7.2.1",
"version": "7.3.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri.git",
"reference": "8b644f8ff80352530bbc0ea467d5b5a89b60d832"
"reference": "36743c3961bb82bf93da91917b6bced0358a8d45"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/8b644f8ff80352530bbc0ea467d5b5a89b60d832",
"reference": "8b644f8ff80352530bbc0ea467d5b5a89b60d832",
"url": "https://api.github.com/repos/thephpleague/uri/zipball/36743c3961bb82bf93da91917b6bced0358a8d45",
"reference": "36743c3961bb82bf93da91917b6bced0358a8d45",
"shasum": ""
},
"require": {
"league/uri-interfaces": "^7.2",
"league/uri-interfaces": "^7.3",
"php": "^8.1"
},
"conflict": {
@ -2987,7 +2986,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri/tree/7.2.1"
"source": "https://github.com/thephpleague/uri/tree/7.3.0"
},
"funding": [
{
@ -2995,24 +2994,24 @@
"type": "github"
}
],
"time": "2023-08-30T21:06:57+00:00"
"time": "2023-09-09T17:21:43+00:00"
},
{
"name": "league/uri-components",
"version": "7.2.1",
"version": "7.3.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-components.git",
"reference": "cd187940b9ea1626c2b6e6ab9a5aba5b7c59fc7b"
"reference": "a9d155fad59d1d8dedf84d028bc166a1d76568bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri-components/zipball/cd187940b9ea1626c2b6e6ab9a5aba5b7c59fc7b",
"reference": "cd187940b9ea1626c2b6e6ab9a5aba5b7c59fc7b",
"url": "https://api.github.com/repos/thephpleague/uri-components/zipball/a9d155fad59d1d8dedf84d028bc166a1d76568bc",
"reference": "a9d155fad59d1d8dedf84d028bc166a1d76568bc",
"shasum": ""
},
"require": {
"league/uri": "^7.2",
"league/uri": "^7.3",
"php": "^8.1"
},
"suggest": {
@ -3020,6 +3019,7 @@
"ext-fileinfo": "to create Data URI from file contennts",
"ext-gmp": "to improve IPV4 host parsing",
"ext-intl": "to handle IDN host with the best performance",
"ext-mbstring": "to use the sorting algorithm of URLSearchParams",
"jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain",
"php-64bit": "to improve IPV4 host parsing",
"symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present"
@ -3068,7 +3068,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri-components/tree/7.2.1"
"source": "https://github.com/thephpleague/uri-components/tree/7.3.0"
},
"funding": [
{
@ -3076,20 +3076,20 @@
"type": "github"
}
],
"time": "2023-08-30T21:06:57+00:00"
"time": "2023-09-09T17:21:43+00:00"
},
{
"name": "league/uri-interfaces",
"version": "7.2.0",
"version": "7.3.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/uri-interfaces.git",
"reference": "43fa071050fcba89aefb5d4789a4a5a73874c44b"
"reference": "c409b60ed2245ff94c965a8c798a60166db53361"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/43fa071050fcba89aefb5d4789a4a5a73874c44b",
"reference": "43fa071050fcba89aefb5d4789a4a5a73874c44b",
"url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/c409b60ed2245ff94c965a8c798a60166db53361",
"reference": "c409b60ed2245ff94c965a8c798a60166db53361",
"shasum": ""
},
"require": {
@ -3152,7 +3152,7 @@
"docs": "https://uri.thephpleague.com",
"forum": "https://thephpleague.slack.com",
"issues": "https://github.com/thephpleague/uri-src/issues",
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.2.0"
"source": "https://github.com/thephpleague/uri-interfaces/tree/7.3.0"
},
"funding": [
{
@ -3160,7 +3160,7 @@
"type": "github"
}
],
"time": "2023-08-30T19:43:38+00:00"
"time": "2023-09-09T17:21:43+00:00"
},
{
"name": "monolog/monolog",
@ -3563,16 +3563,16 @@
},
{
"name": "phpseclib/phpseclib",
"version": "3.0.21",
"version": "3.0.23",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
"reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1"
"reference": "866cc78fbd82462ffd880e3f65692afe928bed50"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
"reference": "4580645d3fc05c189024eb3b834c6c1e4f0f30a1",
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/866cc78fbd82462ffd880e3f65692afe928bed50",
"reference": "866cc78fbd82462ffd880e3f65692afe928bed50",
"shasum": ""
},
"require": {
@ -3653,7 +3653,7 @@
],
"support": {
"issues": "https://github.com/phpseclib/phpseclib/issues",
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.21"
"source": "https://github.com/phpseclib/phpseclib/tree/3.0.23"
},
"funding": [
{
@ -3669,7 +3669,7 @@
"type": "tidelift"
}
],
"time": "2023-07-09T15:24:48+00:00"
"time": "2023-09-18T17:22:01+00:00"
},
{
"name": "psr/http-factory",
@ -4211,8 +4211,6 @@
"aliases": [],
"minimum-stability": "dev",
"stability-flags": {
"amphp/http-server": 20,
"amphp/websocket-server": 20,
"danog/madelineproto": 20
},
"prefer-stable": true,
@ -4223,5 +4221,5 @@
"ext-mbstring": "*"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"
"plugin-api-version": "2.6.0"
}

View File

@ -34,7 +34,7 @@ async(function () use ($options) {
$connection->onClose(static function () use ($connection) {
if ($connection->isClosed()) {
printf("Connection closed. Reason: %s\n", $connection->getCloseReason());
printf("Connection closed. Reason: %s\n", $connection->getCloseInfo()->getReason());
}
});

View File

@ -7,10 +7,11 @@ use Amp\Http\Server\Response;
use Amp\Http\Server\Router;
use Amp\Http\HttpStatus;
use Amp\Http\Server\SocketHttpServer;
use Amp\Websocket\Server\Rfc6455Acceptor;
use Amp\Websocket\Server\Websocket as WebsocketServer;
use Amp\Websocket\Server\WebsocketAcceptor;
use Amp\Websocket\Server\WebsocketClientGateway;
use Amp\Websocket\Server\WebsocketClientHandler;
use Amp\Websocket\Server\WebsocketHandshakeHandler;
use Amp\Websocket\WebsocketClient;
use Revolt\EventLoop;
use RuntimeException;
@ -19,29 +20,31 @@ use TelegramApiServer\EventObservers\EventObserver;
use TelegramApiServer\Logger;
use Throwable;
class EventsController implements WebsocketClientHandler, WebsocketHandshakeHandler
class EventsController implements WebsocketClientHandler, WebsocketAcceptor
{
private const PING_INTERVAL_MS = 10_000;
private WebsocketClientGateway $gateway;
private Rfc6455Acceptor $handshake;
public function __construct()
{
$this->gateway = new WebsocketClientGateway();
$this->handshake = new Rfc6455Acceptor();
}
public static function getRouterCallback(SocketHttpServer $server): WebsocketServer
{
$class = new static();
return new WebsocketServer(
httpServer: $server,
logger: Logger::getInstance(),
handshakeHandler: $class,
acceptor: $class,
clientHandler: $class,
);
}
public function handleHandshake(Request $request, Response $response): Response
public function handleHandshake(Request $request): Response
{
try {
$session = $request->getAttribute(Router::class)['session'] ?? null;
@ -50,7 +53,9 @@ class EventsController implements WebsocketClientHandler, WebsocketHandshakeHand
} elseif (empty(Client::getInstance()->instances)) {
throw new RuntimeException('No sessions available');
}
$response = $this->handshake->handleHandshake($request);
} catch (Throwable $e) {
$response = new Response();
$response->setStatus(HttpStatus::NOT_FOUND);
$response->setBody($e->getMessage());
}

View File

@ -6,24 +6,27 @@ use Amp\Http\Server\Request;
use Amp\Http\Server\Response;
use Amp\Http\Server\Router;
use Amp\Http\Server\SocketHttpServer;
use Amp\Websocket\Server\Rfc6455Acceptor;
use Amp\Websocket\Server\Websocket;
use Amp\Websocket\Server\WebsocketAcceptor;
use Amp\Websocket\Server\WebsocketClientGateway;
use Amp\Websocket\Server\WebsocketClientHandler;
use Amp\Websocket\Server\WebsocketHandshakeHandler;
use Amp\Websocket\WebsocketClient;
use Psr\Log\LogLevel;
use Revolt\EventLoop;
use TelegramApiServer\EventObservers\LogObserver;
use TelegramApiServer\Logger;
class LogController implements WebsocketClientHandler, WebsocketHandshakeHandler
class LogController implements WebsocketClientHandler, WebsocketAcceptor
{
private const PING_INTERVAL_MS = 10_000;
private WebsocketClientGateway $gateway;
private Rfc6455Acceptor $handshake;
public function __construct()
{
$this->gateway = new WebsocketClientGateway();
$this->handshake = new Rfc6455Acceptor();
}
public static function getRouterCallback(SocketHttpServer $server): Websocket
@ -32,16 +35,18 @@ class LogController implements WebsocketClientHandler, WebsocketHandshakeHandler
return new Websocket(
httpServer: $server,
logger: Logger::getInstance(),
handshakeHandler: $class,
acceptor: $class,
clientHandler: $class,
);
}
public function handleHandshake(Request $request, Response $response): Response
public function handleHandshake(Request $request): Response
{
$level = $request->getAttribute(Router::class)['level'] ?? LogLevel::DEBUG;
if (!isset(Logger::$levels[$level])) {
$response->setStatus(400);
$response = new Response(400);
} else {
$response = $this->handshake->handleHandshake($request);
}
return $response;
}