PacketDump
class PacketDump
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
namespace Renci.SshNet.Common
{
internal class PacketDump
{
public static string Create(List<byte> data, int indentLevel)
{
return Create(data.ToArray(), indentLevel);
}
public static string Create(byte[] data, int indentLevel)
{
if (data == null)
throw new ArgumentNullException("data");
if (indentLevel < 0)
throw new ArgumentOutOfRangeException("indentLevel", "Cannot be less than zero.");
StringBuilder stringBuilder = new StringBuilder();
byte[] array = new byte[16];
string value = new string(' ', indentLevel);
int num = 0;
while (num < data.Length) {
int num2 = 0;
if (stringBuilder.Length > 0)
stringBuilder.Append(Environment.NewLine);
stringBuilder.Append(value);
stringBuilder.Append(num.ToString("X8"));
stringBuilder.Append(" ");
do {
array[num2++] = data[num++];
} while (num2 != 16 && num != data.Length);
stringBuilder.Append(AsHex(array, num2));
stringBuilder.Append(" ");
stringBuilder.Append(AsAscii(array, num2));
}
return stringBuilder.ToString();
}
private static string AsHex(byte[] data, int length)
{
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < length; i++) {
if (i > 0)
stringBuilder.Append(' ');
stringBuilder.Append(data[i].ToString("X2", CultureInfo.InvariantCulture));
}
if (length < data.Length)
stringBuilder.Append(new string(' ', (data.Length - length) * 3));
return stringBuilder.ToString();
}
private static string AsAscii(byte[] data, int length)
{
Encoding aSCII = Encoding.ASCII;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < length; i++) {
byte b = data[i];
if (b < 32 || b >= 127)
stringBuilder.Append('.');
else
stringBuilder.Append(aSCII.GetString(data, i, 1));
}
return stringBuilder.ToString();
}
}
}