private IoBuffer InsertBytesToNewIoBuffer(IoSession session, IoBuffer buffer) { if (_insertByteProbability > _rng.Next(1000)) { if (log.IsInfoEnabled) log.Info(buffer.GetHexDump()); // where to insert bytes ? int pos = _rng.Next(buffer.Remaining) - 1; // how many byte to insert ? int count = _rng.Next(_maxInsertByte - 1) + 1; IoBuffer newBuff = IoBuffer.Allocate(buffer.Remaining + count); for (int i = 0; i < pos; i++) newBuff.Put(buffer.Get()); for (int i = 0; i < count; i++) { newBuff.Put((byte)(_rng.Next(256))); } while (buffer.Remaining > 0) { newBuff.Put(buffer.Get()); } newBuff.Flip(); if (log.IsInfoEnabled) { log.Info("Inserted " + count + " bytes."); log.Info(newBuff.GetHexDump()); } return newBuff; } return null; }
private void ManipulateIoBuffer(IoSession session, IoBuffer buffer) { if ((buffer.Remaining > 0) && (_removeByteProbability > _rng.Next(1000))) { if (log.IsInfoEnabled) log.Info(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(); if (log.IsInfoEnabled) { log.Info("Removed " + count + " bytes at position " + pos + "."); log.Info(buffer.GetHexDump()); } } if ((buffer.Remaining > 0) && (_changeByteProbability > _rng.Next(1000))) { if (log.IsInfoEnabled) log.Info(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]); } if (log.IsInfoEnabled) { log.Info("Modified " + count + " bytes."); log.Info(buffer.GetHexDump()); } } }
/// <inheritdoc/> public override String GetHexDump() { return(_buf.GetHexDump()); }