| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | <?php/** * Copyright 2019 Huawei Technologies Co.,Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License.  You may obtain a copy of the * License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied.  See the License for the * specific language governing permissions and limitations under the License. * */namespace Obs\Internal\Common;use Psr\Http\Message\StreamInterface;use GuzzleHttp\Psr7\StreamDecoratorTrait;use Obs\ObsException;class CheckoutStream implements StreamInterface {    use StreamDecoratorTrait;        private $expectedLength;    private $readedCount = 0;    public function __construct(StreamInterface $stream, $expectedLength) {        $this->stream = $stream;        $this->expectedLength = $expectedLength;    }    public function getContents() {        $contents = $this->stream->getContents();        $length = strlen($contents);        if ($this->expectedLength !== null && floatval($length) !== $this->expectedLength) {            $this -> throwObsException($this->expectedLength, $length);        }        return $contents;    }    public function read($length) {        $string = $this->stream->read($length);        if ($this->expectedLength !== null) {            $this->readedCount += strlen($string);            if ($this->stream->eof()) {                if (floatval($this->readedCount) !== $this->expectedLength) {                    $this -> throwObsException($this->expectedLength, $this->readedCount);                }            }        }            return $string;    }    public function throwObsException($expectedLength, $reaLength) {        $obsException = new ObsException('premature end of Content-Length delimiter message body (expected:' . $expectedLength . '; received:' . $reaLength . ')');        $obsException->setExceptionType('server');        throw $obsException;    }}
 |