📄 pepeertransportdebugger.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: PEPeerTransportDebugger.java
package org.gudy.azureus2.core3.peer.impl.transport;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;
import org.gudy.azureus2.core3.peer.impl.PEPeerControl;
// Referenced classes of package org.gudy.azureus2.core3.peer.impl.transport:
// PEPeerTransportProtocol
public class PEPeerTransportDebugger
{
protected int piece_length;
protected static final int BT_READING_LENGTH_AND_TYPE = 0x12d687;
protected int state;
protected byte data_read[];
protected int data_read_pos;
protected PEPeerTransportDebugger(PEPeerTransportProtocol transport)
{
state = -1;
data_read = new byte[68];
piece_length = transport.getControl().getPieceLength(0);
}
public int write(SocketChannel chan, ByteBuffer buffer)
throws IOException
{
int pos = buffer.position();
int len = chan.write(buffer);
if (len > 0)
{
buffer.position(pos);
analyse(buffer, len);
}
return len;
}
public long write(SocketChannel chan, ByteBuffer buffers[], int array_offset, int array_length)
throws IOException
{
int pos[] = new int[buffers.length];
for (int i = array_offset; i < array_offset + array_length; i++)
pos[i] = buffers[i].position();
long len = chan.write(buffers, array_offset, array_length);
for (int i = array_offset; i < array_offset + array_length; i++)
{
ByteBuffer buffer = buffers[i];
int written = buffer.position() - pos[i];
if (written > 0)
{
buffer.position(pos[i]);
analyse(buffer, written);
}
}
return len;
}
protected void analyse(ByteBuffer buffer, int length)
{
byte data[] = new byte[length];
buffer.get(data);
for (int i = 0; i < data.length; i++)
{
if (data_read_pos == data_read.length)
{
if (state == 0x12d687)
{
ByteBuffer bb = ByteBuffer.wrap(data_read);
int len = bb.getInt();
state = bb.get();
if (len == 1)
{
state = 0x12d687;
data_read = new byte[5];
} else
{
data_read = new byte[len - 1];
}
} else
{
if (state == 7)
{
ByteBuffer bb = ByteBuffer.wrap(data_read);
int piece_number = bb.getInt();
int piece_offset = bb.getInt();
long overall_offset = (long)piece_number * (long)piece_length + (long)piece_offset;
do
{
if (!bb.hasRemaining())
break;
byte v = bb.get();
if ((byte)(int)overall_offset != v)
{
System.out.println((new StringBuilder()).append("piece: write is bad at ").append(overall_offset).append(": expected = ").append((byte)(int)overall_offset).append(", actual = ").append(v).toString());
break;
}
overall_offset++;
} while (true);
}
state = 0x12d687;
data_read = new byte[5];
}
data_read_pos = 0;
}
data_read[data_read_pos++] = data[i];
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -