Aws\Glacier\GlacierClient::getChecksumsMiddleware PHP Method

getChecksumsMiddleware() private method

Creates a middleware that updates a command with the content and tree hash headers for upload operations.
    private function getChecksumsMiddleware()
    {
        return function (callable $handler) {
            return function (CommandInterface $command, RequestInterface $request = null) use($handler) {
                // Accept "ContentSHA256" with a lowercase "c" to match other Glacier params.
                if (!$command['ContentSHA256'] && $command['contentSHA256']) {
                    $command['ContentSHA256'] = $command['contentSHA256'];
                    unset($command['contentSHA256']);
                }
                // If uploading, then make sure checksums are added.
                $name = $command->getName();
                if (($name === 'UploadArchive' || $name === 'UploadMultipartPart') && (!$command['checksum'] || !$command['ContentSHA256'])) {
                    $body = $request->getBody();
                    if (!$body->isSeekable()) {
                        throw new CouldNotCreateChecksumException('sha256');
                    }
                    // Add a tree hash if not provided.
                    if (!$command['checksum']) {
                        $body = new HashingStream($body, new TreeHash(), function ($result) use($command, &$request) {
                            $request = $request->withHeader('x-amz-sha256-tree-hash', bin2hex($result));
                        });
                    }
                    // Add a linear content hash if not provided.
                    if (!$command['ContentSHA256']) {
                        $body = new HashingStream($body, new PhpHash('sha256'), function ($result) use($command) {
                            $command['ContentSHA256'] = bin2hex($result);
                        });
                    }
                    // Read the stream in order to calculate the hashes.
                    while (!$body->eof()) {
                        $body->read(1048576);
                    }
                    $body->seek(0);
                }
                // Set the content hash header if a value is in the command.
                if ($command['ContentSHA256']) {
                    $request = $request->withHeader('x-amz-content-sha256', $command['ContentSHA256']);
                }
                return $handler($command, $request);
            };
        };
    }