Файл: includes/library/aws/Aws/Api/Parser/Crc32ValidatingParser.php
Строк: 44
<?php
namespace AwsApiParser;
use AwsCommandInterface;
use AwsExceptionAwsException;
use PsrHttpMessageResponseInterface;
use GuzzleHttpPsr7;
/**
* @internal Decorates a parser and validates the x-amz-crc32 header.
*/
class Crc32ValidatingParser extends AbstractParser
{
/** @var callable */
private $parser;
/**
* @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(Psr7hash($response->getBody(), 'crc32b'));
if ((int) $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);
}
}