pub trait Reader: Sized {
    fn read<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]>;
    fn remaining_len(&self) -> usize;

    fn is_finished(&self) -> bool { ... }
    fn read_prefixed<'r, T, E, F>(&'r mut self, f: F) -> Result<T, E>
    where
        E: From<Error>,
        F: FnOnce(&mut NestedReader<'r, Self>) -> Result<T, E>
, { ... } fn read_byten<'o>(&mut self, out: &'o mut [u8]) -> Result<&'o [u8]> { ... } fn read_string<'o>(&mut self, buf: &'o mut [u8]) -> Result<&'o str> { ... } fn drain(&mut self, n_bytes: usize) -> Result<()> { ... } fn drain_prefixed(&mut self) -> Result<usize> { ... } fn finish<T>(self, value: T) -> Result<T> { ... } }
Expand description

Reader trait which decodes the binary SSH protocol serialization from various inputs.

Required Methods

Read as much data as is needed to exactly fill out.

This is the base decoding method on which the rest of the trait is implemented in terms of.

Returns
  • Ok(bytes) if the expected amount of data was read
  • Err(Error::Length) if the exact amount of data couldn’t be read

Get the length of the remaining data after Base64 decoding.

Provided Methods

Is decoding finished?

Decode length-prefixed data.

Decodes a uint32 which identifies the length of some encapsulated data, then calls the given reader function with the length of the remaining data.

Decodes [u8] from byte[n] as described in RFC4251 § 5:

A byte represents an arbitrary 8-bit value (octet). Fixed length data is sometimes represented as an array of bytes, written byte[n], where n is the number of bytes in the array.

Storage for the byte array must be provided as mutable byte slice in order to accommodate no_std use cases.

The Decode impl on Vec<u8> can be used to allocate a buffer for the result.

Decode a string as described in RFC4251 § 5:

Arbitrary length binary string. Strings are allowed to contain arbitrary binary data, including null characters and 8-bit characters. They are stored as a uint32 containing its length (number of bytes that follow) and zero (= empty string) or more bytes that are the value of the string. Terminating null characters are not used.

Strings are also used to store text. In that case, US-ASCII is used for internal names, and ISO-10646 UTF-8 for text that might be displayed to the user. The terminating null character SHOULD NOT normally be stored in the string. For example: the US-ASCII string “testing” is represented as 00 00 00 07 t e s t i n g. The UTF-8 mapping does not alter the encoding of US-ASCII characters.

Storage for the string data must be provided as mutable byte slice in order to accommodate no_std use cases.

The Decode impl on String can be used to allocate a buffer for the result.

Drain the given number of bytes from the reader, discarding them.

Decode a u32 length prefix, and then drain the length of the body.

Upon success, returns the number of bytes drained sans the length of the u32 length prefix (4-bytes).

Finish decoding, returning the given value if there is no remaining data, or an error otherwise.

Implementations on Foreign Types

Implementors