protected override FileChunk ReadChunk() { var buffer = new byte[Math.Min(BufferSize, LeftBytes)]; var position = InStream.Position; InStream.Read(buffer, 0, buffer.Length); return(new FileChunk(position, buffer)); }
protected override int GetChunksCount() { var buffer = new byte[Int32Size]; InStream.Read(buffer, 0, buffer.Length); var partitionsCount = BitConverter.ToInt32(buffer, 0); return(partitionsCount); }
public void testCorruptStream() { OutputCollector collect = new OutputCollector(); CompressionCodec codec = new ZlibCodec(); OutStream @out = new OutStream("test", 500, codec, collect); PositionCollector[] positions = new PositionCollector[1024]; for (int i = 0; i < 1024; ++i) { positions[i] = new PositionCollector(); @out.getPosition(positions[i]); @out.WriteByte((byte)i); } @out.Flush(); // now try to read the stream with a buffer that is too small ByteBuffer inBuf = ByteBuffer.allocate(collect.buffer.size()); collect.buffer.setByteBuffer(inBuf, 0, collect.buffer.size()); inBuf.flip(); InStream @in = InStream.create(null, "test", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), codec, 100); byte[] contents = new byte[1024]; try { @in.Read(contents, 0, contents.Length); fail(); } catch (IllegalArgumentException iae) { // EXPECTED } // make a corrupted header inBuf.clear(); inBuf.put((byte)32); inBuf.put((byte)0); inBuf.flip(); @in = InStream.create(null, "test2", new ByteBuffer[] { inBuf }, new long[] { 0 }, inBuf.remaining(), codec, 300); try { @in.ReadByte(); fail(); } catch (InvalidOperationException ise) { // EXPECTED } }
protected override ChunkForDecompressModel ReadChunk() { var positionBuffer = new byte[Int64Size]; var lengthBuffer = new byte[Int32Size]; InStream.Read(positionBuffer, 0, positionBuffer.Length); InStream.Read(lengthBuffer, 0, lengthBuffer.Length); var length = BitConverter.ToInt32(lengthBuffer, 0); var buffer = new byte[length]; InStream.Read(buffer, 0, buffer.Length); return(new ChunkForDecompressModel(positionBuffer, buffer)); }
/// <summary> /// Reads a packet from a stream with the given size in bytes or returns null if the packet cannot be parsed. /// </summary> public static Packet Read(InStream Stream, int Size) { Packet packet = new Packet(); // Read flags and header if ((Size -= StreamSize.Byte + StreamSize.Int) < 0) return null; PacketFlags flags = (PacketFlags)Stream.ReadByte(); packet.SequenceNumber = Stream.ReadInt(); packet.PingRequest = (flags & PacketFlags.PingRequest) == PacketFlags.PingRequest; packet.PingResponse = (flags & PacketFlags.PingResponse) == PacketFlags.PingResponse; // Read additional information if ((flags & PacketFlags.Acknowledgement) == PacketFlags.Acknowledgement) { if ((Size -= StreamSize.Int) < 0) return null; packet.AcknowledgementNumber = Stream.ReadInt(); } if ((flags & PacketFlags.RoundTripTime) == PacketFlags.RoundTripTime) { if ((Size -= StreamSize.Double) < 0) return null; packet.RoundTripTime = Stream.ReadDouble(); } // Read chunk if any if ((flags & PacketFlags.Chunk) == PacketFlags.Chunk) { packet.ChunkInitial = (flags & PacketFlags.ChunkInitial) == PacketFlags.ChunkInitial; packet.ChunkFinal = (flags & PacketFlags.ChunkFinal) == PacketFlags.ChunkFinal; byte[] data = new byte[Size]; Stream.Read(data, 0, data.Length); packet.ChunkData = data; return packet; } else { // A packet can only be a disconnect if it does not have a chunk packet.Disconnect = (flags & PacketFlags.Disconnect) == PacketFlags.Disconnect; // Make sure this is the end of the packet if (Size == 0) return packet; else return null; } }
public override int Read(byte[] buffer, int offset, int count) => InStream.Read(buffer, offset, count);