Seditio Source
Root |
./othercms/dle15_0/upload/engine/classes/composer/vendor/aws/aws-sdk-php/src/StreamRequestPayloadMiddleware.php
<?php
namespace Aws;

use
Aws\Api\Service;
use
Aws\Exception\IncalculablePayloadException;
use
Psr\Http\Message\RequestInterface;

/**
 * @internal
 */
class StreamRequestPayloadMiddleware
{
    private
$nextHandler;
    private
$service;

   
/**
     * Create a middleware wrapper function
     *
     * @param Service $service
     * @return \Closure
     */
   
public static function wrap(Service $service)
    {
        return function (callable
$handler) use ($service) {
            return new
self($handler, $service);
        };
    }

    public function
__construct(callable $nextHandler, Service $service)
    {
       
$this->nextHandler = $nextHandler;
       
$this->service = $service;
    }

    public function
__invoke(CommandInterface $command, RequestInterface $request)
    {
       
$nextHandler = $this->nextHandler;

       
$operation = $this->service->getOperation($command->getName());
       
$contentLength = $request->getHeader('content-length');
       
$hasStreaming = false;
       
$requiresLength = false;

       
// Check if any present input member is a stream and requires the
        // content length
       
foreach ($operation->getInput()->getMembers() as $name => $member) {
            if (!empty(
$member['streaming']) && isset($command[$name])) {
               
$hasStreaming = true;
                if (!empty(
$member['requiresLength'])) {
                   
$requiresLength = true;
                }
            }
        }

        if (
$hasStreaming) {

           
// Add 'transfer-encoding' header if payload size not required to
            // to be calculated and not already known
           
if (empty($requiresLength)
                && empty(
$contentLength)
                && isset(
$operation['authtype'])
                &&
$operation['authtype'] == 'v4-unsigned-body'
           
) {
               
$request = $request->withHeader('transfer-encoding', 'chunked');

           
// Otherwise, make sure 'content-length' header is added
           
} else {
                if (empty(
$contentLength)) {
                   
$size = $request->getBody()->getSize();
                    if (
is_null($size)) {
                        throw new
IncalculablePayloadException('Payload'
                           
. ' content length is required and can not be'
                           
. ' calculated.');
                    }
                   
$request = $request->withHeader(
                       
'content-length',
                       
$size
                   
);
                }
            }
        }

        return
$nextHandler($command, $request);
    }
}