Example #1
0
 private function createCompressedStream(Sector $sector)
 {
     $stream = $this->stream;
     if ($this->block->isCompressed() && $this->block->getSize() > $this->block->getCompressedSize()) {
         $parser = new BinaryStreamParser($this->stream);
         $compressionType = $parser->readByte();
         switch ($compressionType) {
             case 0x0:
                 return $stream;
             case 0x2:
                 $len = $parser->readUInt16();
                 $blockData = $stream->readBytes($len);
                 return new MemoryStream(gzinflate($blockData));
                 //				case 0x02: return new CompressedStream($stream, new DeflateCompression());
             //				case 0x02: return new CompressedStream($stream, new DeflateCompression());
             case 0x10:
                 return new CompressedStream($stream, new BZIPCompression());
             default:
                 throw new CompressionException(sprintf('Invalid compression format: %s', $compressionType));
         }
     }
     return $stream;
 }
Example #2
0
 private function parseBlockTable()
 {
     $hashing = new FileKeyHashing();
     $encryptedStream = new EncryptedStream($this->stream, new DefaultEncryption($hashing->hash('(block table)')));
     $parser = new BinaryStreamParser($encryptedStream);
     $parser->seek($this->getUserDataOffset() + $this->getHeader()->getBlockTablePos());
     $blocks = array();
     //		$offsetFix = 0;
     for ($i = 0; $i < $this->getHeader()->getBlockTableSize(); $i++) {
         $block = $blocks[$i] = Block::parse($parser);
         //			if($block->getSize() == 0) {
         //				$offsetFix++;
         //			}
     }
     return new BlockTable($blocks);
 }
Example #3
0
 public function testExistsFlag()
 {
     $parser = $this->createMemoryParser(hex2bin(self::TEST_EXISTS_BLOCK_DATA));
     $block = Block::parse($parser);
     $this->assertEquals(true, $block->isExisting());
 }