private void ManipulateIoBuffer(IoSession session, IoBuffer buffer) { if ((buffer.Remaining > 0) && (_removeByteProbability > _rng.Next(1000))) { Debug.WriteLine(buffer.GetHexDump()); // where to remove bytes ? int pos = _rng.Next(buffer.Remaining); // how many byte to remove ? int count = _rng.Next(buffer.Remaining - pos) + 1; if (count == buffer.Remaining) count = buffer.Remaining - 1; IoBuffer newBuff = IoBuffer.Allocate(buffer.Remaining - count); for (int i = 0; i < pos; i++) newBuff.Put(buffer.Get()); buffer.Skip(count); // hole while (newBuff.Remaining > 0) newBuff.Put(buffer.Get()); newBuff.Flip(); // copy the new buffer in the old one buffer.Rewind(); buffer.Put(newBuff); buffer.Flip(); Debug.WriteLine("Removed " + count + " bytes at position " + pos + "."); Debug.WriteLine(buffer.GetHexDump()); } if ((buffer.Remaining > 0) && (_changeByteProbability > _rng.Next(1000))) { Debug.WriteLine(buffer.GetHexDump()); // how many byte to change ? int count = _rng.Next(buffer.Remaining - 1) + 1; byte[] values = new byte[count]; _rng.NextBytes(values); for (int i = 0; i < values.Length; i++) { int pos = _rng.Next(buffer.Remaining); buffer.Put(pos, values[i]); } Debug.WriteLine("Modified " + count + " bytes."); Debug.WriteLine(buffer.GetHexDump()); } }
private void InternalFlush(INextFilter nextFilter, IoSession session, IoBuffer buf) { IoBuffer tmp = null; lock (buf) { buf.Flip(); tmp = buf.Duplicate(); buf.Clear(); } Debug.WriteLine("Flushing buffer: " + tmp); nextFilter.FilterWrite(session, new DefaultWriteRequest(tmp)); }
public void WriteBytes(IoBuffer buf) { if (null == buf) WriteNull(); else { buf.Flip(); var length = buf.Remaining; buf.PutInt32(length); buf.Put(buf); } }