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