Package net.schmizz.sshj.transport
Class Decoder
java.lang.Object
net.schmizz.sshj.transport.Converter
net.schmizz.sshj.transport.Decoder
Decodes packets from the SSH binary protocol per the current algorithms.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final SSHPacket
Buffer where as-yet undecoded data livesprivate final org.slf4j.Logger
private byte[]
MAC result is stored hereprivate static final int
private int
How many bytes do we need, before a call to decode() can succeed at decoding at least packet length, OR the whole packet?private final SSHPacketHandler
What we pass decoded packets toprivate int
-1 if packet length not yet been decoded, else the packet lengthprivate final SSHPacket
Used in case compression is active to store the uncompressed dataFields inherited from class net.schmizz.sshj.transport.Converter
authed, authMode, cipher, cipherSize, compression, etm, mac, seq
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
checkMAC
(byte[] data) private void
checkPacketLength
(int len) private int
decode()
Returns advised number of bytes that should be made available in decoderBuffer before the method should be called again.private SSHPacket
private void
decryptBuffer
(int offset, int length) private int
private int
(package private) Compression.Mode
(package private) int
(package private) int
received
(byte[] b, int len) Addslen
bytes fromb
to the decoder buffer.(package private) void
setAlgorithms
(Cipher cipher, MAC mac, Compression compression) Methods inherited from class net.schmizz.sshj.transport.Converter
getSequenceNumber, isSequenceNumberAtMax, resetSequenceNumber, setAuthenticated, usingCompression
-
Field Details
-
MAX_PACKET_LEN
private static final int MAX_PACKET_LEN- See Also:
-
log
private final org.slf4j.Logger log -
packetHandler
What we pass decoded packets to -
inputBuffer
Buffer where as-yet undecoded data lives -
uncompressBuffer
Used in case compression is active to store the uncompressed data -
macResult
private byte[] macResultMAC result is stored here -
packetLength
private int packetLength-1 if packet length not yet been decoded, else the packet length -
needed
private int neededHow many bytes do we need, before a call to decode() can succeed at decoding at least packet length, OR the whole packet?
-
-
Constructor Details
-
Decoder
Decoder(Transport packetHandler)
-
-
Method Details
-
decode
Returns advised number of bytes that should be made available in decoderBuffer before the method should be called again.- Returns:
- number of bytes needed before further decoding possible
- Throws:
SSHException
-
checkMAC
- Throws:
TransportException
-
decompressed
- Throws:
TransportException
-
decryptLengthAAD
- Throws:
TransportException
-
decryptLength
- Throws:
TransportException
-
decryptBuffer
private void decryptBuffer(int offset, int length) -
checkPacketLength
- Throws:
TransportException
-
received
Addslen
bytes fromb
to the decoder buffer. When a packet has been successfully decoded, hooks in toSSHPacketHandler.handle(net.schmizz.sshj.common.Message, net.schmizz.sshj.common.SSHPacket)
of theSSHPacketHandler
this decoder was initialized with. Returns the number of bytes expected in the next call in order to decode the packet length, and if the packet length has already been decoded; to decode the payload. This number is accurate and should be taken to heart.- Throws:
SSHException
-
setAlgorithms
- Overrides:
setAlgorithms
in classConverter
-
getCompressionType
Compression.Mode getCompressionType()- Specified by:
getCompressionType
in classConverter
-
getMaxPacketLength
int getMaxPacketLength()
-