PlasmaPHP /
driver-mysql
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * Plasma Driver MySQL component |
||
| 4 | * Copyright 2018 PlasmaPHP, All Rights Reserved |
||
| 5 | * |
||
| 6 | * Website: https://github.com/PlasmaPHP |
||
| 7 | * License: https://github.com/PlasmaPHP/driver-mysql/blob/master/LICENSE |
||
| 8 | */ |
||
| 9 | |||
| 10 | namespace Plasma\Drivers\MySQL\Messages; |
||
| 11 | |||
| 12 | /** |
||
| 13 | * Represents a Local In File Data Message. |
||
| 14 | * @internal |
||
| 15 | */ |
||
| 16 | class LocalInFileRequestMessage implements \Plasma\Drivers\MySQL\Messages\MessageInterface { |
||
| 17 | /** |
||
| 18 | * @var \Plasma\Drivers\MySQL\ProtocolParser |
||
| 19 | */ |
||
| 20 | protected $parser; |
||
| 21 | |||
| 22 | /** |
||
| 23 | * Constructor. |
||
| 24 | * @param \Plasma\Drivers\MySQL\ProtocolParser $parser |
||
| 25 | */ |
||
| 26 | function __construct(\Plasma\Drivers\MySQL\ProtocolParser $parser) { |
||
| 27 | $this->parser = $parser; |
||
| 28 | } |
||
| 29 | |||
| 30 | /** |
||
| 31 | * Get the identifier for the packet. |
||
| 32 | * @return string |
||
| 33 | */ |
||
| 34 | static function getID(): string { |
||
| 35 | return "\xFB"; |
||
| 36 | } |
||
| 37 | |||
| 38 | /** |
||
| 39 | * Parses the message, once the complete string has been received. |
||
| 40 | * Returns false if not enough data has been received, or the remaining buffer. |
||
| 41 | * @param \Plasma\BinaryBuffer $buffer |
||
| 42 | * @return bool |
||
| 43 | * @throws \Plasma\Drivers\MySQL\Messages\ParseException |
||
| 44 | */ |
||
| 45 | function parseMessage(\Plasma\BinaryBuffer $buffer): bool { |
||
| 46 | $filesystem = \Plasma\Drivers\MySQL\DriverFactory::getFilesystem(); |
||
| 47 | |||
| 48 | if($filesystem !== null) { |
||
| 49 | $filesystem->file($buffer->getContents())->getContents()->otherwise(function () { |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 50 | return ''; |
||
| 51 | })->then(function (string $content) { |
||
| 52 | $this->sendFile($content); |
||
| 53 | }); |
||
| 54 | } else { |
||
| 55 | if(\file_exists($buffer->getContents())) { |
||
| 56 | $this->sendFile(\file_get_contents($buffer->getContents())); |
||
| 57 | } else { |
||
| 58 | $this->sendFile(''); |
||
| 59 | } |
||
| 60 | } |
||
| 61 | |||
| 62 | return true; |
||
| 63 | } |
||
| 64 | |||
| 65 | /** |
||
| 66 | * Get the parser which created this message. |
||
| 67 | * @return \Plasma\Drivers\MySQL\ProtocolParser |
||
| 68 | */ |
||
| 69 | function getParser(): \Plasma\Drivers\MySQL\ProtocolParser { |
||
| 70 | return $this->parser; |
||
| 71 | } |
||
| 72 | |||
| 73 | /** |
||
| 74 | * Sets the parser state, if necessary. If not, return `-1`. |
||
| 75 | * @return int |
||
| 76 | */ |
||
| 77 | function setParserState(): int { |
||
| 78 | return -1; |
||
| 79 | } |
||
| 80 | |||
| 81 | /** |
||
| 82 | * Sends the contents to the server. |
||
| 83 | * @param string $contents |
||
| 84 | */ |
||
| 85 | protected function sendFile(string $content) { |
||
| 86 | $maxSize = \Plasma\Drivers\MySQL\ProtocolParser::CLIENT_MAX_PACKET_SIZE; |
||
| 87 | |||
| 88 | for($size = \strlen($content); $size > 0; $size -= $maxSize) { |
||
| 89 | $partial = \substr($content, 0, $maxSize); |
||
| 90 | $content = \substr($content, $maxSize); |
||
| 91 | |||
| 92 | $this->parser->sendPacket($partial); |
||
| 93 | $partial = ''; |
||
| 94 | } |
||
| 95 | |||
| 96 | $this->parser->sendPacket(''); |
||
| 97 | } |
||
| 98 | } |
||
| 99 |