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);
        }
Example #3
0
        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));
        }
Example #5
0
        /// <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);