Class BTMessageDecoder
- java.lang.Object
-
- com.biglybt.core.peermanager.messaging.bittorrent.BTMessageDecoder
-
- All Implemented Interfaces:
MessageStreamDecoder
- Direct Known Subclasses:
LTMessageDecoder
public class BTMessageDecoder extends java.lang.Object implements MessageStreamDecoder
-
-
Field Summary
Fields Modifier and Type Field Description private int
data_bytes_last_read
private java.nio.ByteBuffer[]
decode_array
private boolean
destroyed
private static int
HANDSHAKE_FAKE_LENGTH
private boolean
is_paused
private boolean
last_received_was_keepalive
private DirectByteBuffer
length_buffer
private static int
MAX_MESSAGE_LENGTH
private int
message_length
private java.util.ArrayList
messages_last_read
private static int
MIN_MESSAGE_LENGTH
private DirectByteBuffer
payload_buffer
private int
percent_complete
private int
pre_read_start_buffer
private int
pre_read_start_position
private int
protocol_bytes_last_read
private boolean
reading_handshake_message
private boolean
reading_length_mode
private static byte
SS
-
Constructor Summary
Constructors Constructor Description BTMessageDecoder()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected Message
createMessage(DirectByteBuffer ref_buff)
java.nio.ByteBuffer
destroy()
Destroy this decoder, i.e.int
getDataBytesDecoded()
Get the number of (piece) data bytes decoded from the transport, from the last decode op.int
getPercentDoneOfCurrentMessage()
Get the percentage of the current message that has already been received (read from the transport).int
getProtocolBytesDecoded()
Get the number of protocol (overhead) bytes decoded from the transport, from the last decode op.void
pauseDecoding()
Pause message decoding.int
performStreamDecode(Transport transport, int max_bytes)
Decode message stream from the given transport.private int
postReadProcess()
private int
preReadProcess(int allowed)
Message[]
removeDecodedMessages()
Get the messages decoded from the transport, if any, from the last decode op.void
resumeDecoding()
Resume message decoding.
-
-
-
Field Detail
-
MIN_MESSAGE_LENGTH
private static final int MIN_MESSAGE_LENGTH
- See Also:
- Constant Field Values
-
MAX_MESSAGE_LENGTH
private static final int MAX_MESSAGE_LENGTH
- See Also:
- Constant Field Values
-
HANDSHAKE_FAKE_LENGTH
private static final int HANDSHAKE_FAKE_LENGTH
- See Also:
- Constant Field Values
-
SS
private static final byte SS
- See Also:
- Constant Field Values
-
payload_buffer
private DirectByteBuffer payload_buffer
-
length_buffer
private final DirectByteBuffer length_buffer
-
decode_array
private final java.nio.ByteBuffer[] decode_array
-
reading_length_mode
private boolean reading_length_mode
-
reading_handshake_message
private boolean reading_handshake_message
-
message_length
private int message_length
-
pre_read_start_buffer
private int pre_read_start_buffer
-
pre_read_start_position
private int pre_read_start_position
-
last_received_was_keepalive
private boolean last_received_was_keepalive
-
destroyed
private volatile boolean destroyed
-
is_paused
private volatile boolean is_paused
-
messages_last_read
private final java.util.ArrayList messages_last_read
-
protocol_bytes_last_read
private int protocol_bytes_last_read
-
data_bytes_last_read
private int data_bytes_last_read
-
percent_complete
private int percent_complete
-
-
Method Detail
-
performStreamDecode
public int performStreamDecode(Transport transport, int max_bytes) throws java.io.IOException
Description copied from interface:MessageStreamDecoder
Decode message stream from the given transport.- Specified by:
performStreamDecode
in interfaceMessageStreamDecoder
- Parameters:
transport
- to decode frommax_bytes
- to decode/read from the stream- Returns:
- number of bytes decoded
- Throws:
java.io.IOException
- on decoding error
-
getPercentDoneOfCurrentMessage
public int getPercentDoneOfCurrentMessage()
Description copied from interface:MessageStreamDecoder
Get the percentage of the current message that has already been received (read from the transport).- Specified by:
getPercentDoneOfCurrentMessage
in interfaceMessageStreamDecoder
- Returns:
- percentage complete (0-99), or -1 if no message is currently being received
-
removeDecodedMessages
public Message[] removeDecodedMessages()
Description copied from interface:MessageStreamDecoder
Get the messages decoded from the transport, if any, from the last decode op.- Specified by:
removeDecodedMessages
in interfaceMessageStreamDecoder
- Returns:
- decoded messages, or null if no new complete messages were decoded
-
getProtocolBytesDecoded
public int getProtocolBytesDecoded()
Description copied from interface:MessageStreamDecoder
Get the number of protocol (overhead) bytes decoded from the transport, from the last decode op.- Specified by:
getProtocolBytesDecoded
in interfaceMessageStreamDecoder
- Returns:
- number of protocol bytes recevied
-
getDataBytesDecoded
public int getDataBytesDecoded()
Description copied from interface:MessageStreamDecoder
Get the number of (piece) data bytes decoded from the transport, from the last decode op.- Specified by:
getDataBytesDecoded
in interfaceMessageStreamDecoder
- Returns:
- number of data bytes received
-
destroy
public java.nio.ByteBuffer destroy()
Description copied from interface:MessageStreamDecoder
Destroy this decoder, i.e. perform cleanup.- Specified by:
destroy
in interfaceMessageStreamDecoder
- Returns:
- any bytes already-read and still remaining within the decoder
-
preReadProcess
private int preReadProcess(int allowed)
-
postReadProcess
private int postReadProcess() throws java.io.IOException
- Throws:
java.io.IOException
-
pauseDecoding
public void pauseDecoding()
Description copied from interface:MessageStreamDecoder
Pause message decoding.- Specified by:
pauseDecoding
in interfaceMessageStreamDecoder
-
resumeDecoding
public void resumeDecoding()
Description copied from interface:MessageStreamDecoder
Resume message decoding.- Specified by:
resumeDecoding
in interfaceMessageStreamDecoder
-
createMessage
protected Message createMessage(DirectByteBuffer ref_buff) throws MessageException
- Throws:
MessageException
-
-