PocketMine-MP 5.23.3 git-f7687af337d001ddbcc47b8e773f014a33faa662
Loading...
Searching...
No Matches
ConsoleReaderChildProcessUtils.php
1<?php
2
3/*
4 *
5 * ____ _ _ __ __ _ __ __ ____
6 * | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
7 * | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
8 * | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
9 * |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
10 *
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * @author PocketMine Team
17 * @link http://www.pocketmine.net/
18 *
19 *
20 */
21
22declare(strict_types=1);
23
24namespace pocketmine\console;
25
26use function hash;
27use function strlen;
28use function strrpos;
29use function substr;
30
32 public const TOKEN_DELIMITER = ":";
33 public const TOKEN_HASH_ALGO = "xxh3";
34
35 private function __construct(){
36
37 }
38
46 public static function createMessage(string $line, int &$counter) : string{
47 $token = hash(self::TOKEN_HASH_ALGO, $line, options: ['seed' => $counter]);
48 $counter++;
49 return $line . self::TOKEN_DELIMITER . $token;
50 }
51
56 public static function parseMessage(string $message, int &$counter) : ?string{
57 $delimiterPos = strrpos($message, self::TOKEN_DELIMITER);
58 if($delimiterPos !== false){
59 $left = substr($message, 0, $delimiterPos);
60 $right = substr($message, $delimiterPos + strlen(self::TOKEN_DELIMITER));
61 $expectedToken = hash(self::TOKEN_HASH_ALGO, $left, options: ['seed' => $counter]);
62
63 if($expectedToken === $right){
64 $counter++;
65 return $left;
66 }
67 }
68
69 return null;
70 }
71}