123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- <?php
- namespace Aws\Api\Parser;
- use Aws\Api\StructureShape;
- use Aws\CommandInterface;
- use Aws\Exception\AwsException;
- use Psr\Http\Message\ResponseInterface;
- use Psr\Http\Message\StreamInterface;
- use GuzzleHttp\Psr7;
- /**
- * @internal Decorates a parser and validates the x-amz-crc32 header.
- */
- class Crc32ValidatingParser extends AbstractParser
- {
- /**
- * @param callable $parser Parser to wrap.
- */
- public function __construct(callable $parser)
- {
- $this->parser = $parser;
- }
- public function __invoke(
- CommandInterface $command,
- ResponseInterface $response
- ) {
- if ($expected = $response->getHeaderLine('x-amz-crc32')) {
- $hash = hexdec(Psr7\Utils::hash($response->getBody(), 'crc32b'));
- if ($expected != $hash) {
- throw new AwsException(
- "crc32 mismatch. Expected {$expected}, found {$hash}.",
- $command,
- [
- 'code' => 'ClientChecksumMismatch',
- 'connection_error' => true,
- 'response' => $response
- ]
- );
- }
- }
- $fn = $this->parser;
- return $fn($command, $response);
- }
- public function parseMemberFromStream(
- StreamInterface $stream,
- StructureShape $member,
- $response
- ) {
- return $this->parser->parseMemberFromStream($stream, $member, $response);
- }
- }
|