| 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);
 
-     }
 
- }
 
 
  |