RustTlsDuplexStream

Struct RustTlsDuplexStream 

Source
pub struct RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send,
{ /* private fields */ }

Implementations§

Source§

impl<C, S> RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send, S: SideData,

Source

pub fn new_unpooled<R, W>(con: C, read: R, write: W) -> Result<Self>
where R: Read + Send + 'static, W: Write + Send + 'static,

Creates a new ‘unpooled’ Tls stream wrapper. This is a good choice for an application such as a client that does not create connections and doesn’t have a thread pool.

This fn will spawn 2 new threads using thread::Builder::new().spawn(...). The threads will terminate when the returned stream is dropped and the read/write errors out.

§Resource Leaks

Be aware that a Read which “blocks” forever will cause the thread that’s reading to stay alive forever. Either set a reasonable connection read timeout so that your Read will eventually return or call your connections shutdown fn like TcpStream::shutdown if such a method exists to ensure that all threads are stopped and no resources are leaked.

§Errors

if thread::Builder::new().spawn fails to spawn 2 threads.

Source

pub fn new<R, W, T>(con: C, read: R, write: W, spawner: T) -> Result<Self>
where R: Read + Send + 'static, W: Write + Send + 'static, T: FnMut(Box<dyn FnOnce() + Send>) -> Result<()>,

Creates a new Tls stream wrapper.

This fn will spawn 2 new threads using the provided thread spawner function. The thread spawner function is called exactly twice. If the first call yields an error then it’s not called again. The functions (“threads”) will end when the returned stream wrapper is dropped.

§Resource Leaks

Be aware that a Read which “blocks” forever will cause the thread that’s reading to stay alive forever. Either set a reasonable connection read timeout so that your Read will eventually return or call your connections shutdown fn like TcpStream::shutdown if such a method exists to ensure that all threads are stopped and no resources are leaked.

§Errors

propagated from the spawner fn.

Source

pub fn write(&self, buffer: &[u8]) -> Result<usize>

see Write::write

§Errors

propagated from Write::write once subsequent writes/flushes turn into BrokenPipe

Source

pub fn flush(&self) -> Result<()>

see Write::flush

§Errors

propagated from Write::flush once subsequent writes/flushes turn into BrokenPipe

Source

pub fn read(&self, buffer: &mut [u8]) -> Result<usize>

see Read::read

§Errors

propagated from Read::read once subsequent reads turn into BrokenPipe

Source

pub fn set_read_timeout(&self, timeout: Option<Duration>) -> Result<()>

sets the timeout for the writing operation. This has no effect on the underlying connection and purely deals with internal writing semantics. Calls to fns that writs data will return TimedOut if no plain text data could be written. Cause of this is likely to be that the underlying connection does not read data fast enough. This is never caused by writing too much data.

§Errors

In case of poisoned mutex

Source

pub fn read_timeout(&self) -> Result<Option<Duration>>

Returns the current read timeout if any

§Errors

In case of poisoned mutex

Source

pub fn set_read_non_block(&self, on: bool) -> Result<()>

sets non-blocking mode for read. This has no effect on the underlying connection and purely deals with internal reading semantics. Calls to fns that read data will return WouldBlock immediately if no plain text data is available to be read.

§Errors

In case of poisoned mutex

Source

pub fn set_write_timeout(&self, timeout: Option<Duration>) -> Result<()>

sets the timeout for the writing operation. This has no effect on the underlying connection and purely deals with internal writing semantics. Calls to fns that writs data will return TimedOut if no plain text data could be written. Cause of this is likely to be that the underlying connection does not send data fast enough. This is never caused by reading too much data.

§Errors

In case of poisoned mutex

Source

pub fn write_timeout(&self) -> Result<Option<Duration>>

Returns the current write timeout if any

§Errors

In case of poisoned mutex

Source

pub fn read_to_end(&self, buf: &mut Vec<u8>) -> Result<usize>

See Read::read_to_end

§Errors

propagated

Source

pub fn read_to_string(&self, buf: &mut String) -> Result<usize>

See Read::read_to_string

§Errors

propagated

Source

pub fn read_exact(&self, buf: &mut [u8]) -> Result<()>

See Read::read_exact

§Errors

propagated

Source

pub fn write_all(&self, buf: &[u8]) -> Result<()>

See Write::write_all

§Errors

propagated

Source

pub fn write_fmt(&self, fmt: Arguments<'_>) -> Result<()>

See Write::write_fmt

§Errors

propagated

Trait Implementations§

Source§

impl<C, S: Debug> Debug for RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send + Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<C, S> Read for &RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send, S: SideData,

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

impl<C, S> Read for RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send, S: SideData,

Source§

fn read(&mut self, buf: &mut [u8]) -> Result<usize>

Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
1.36.0 · Source§

fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>

Like read, except that it reads into a slice of buffers. Read more
Source§

fn is_read_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Reader has an efficient read_vectored implementation. Read more
1.0.0 · Source§

fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>

Reads all bytes until EOF in this source, placing them into buf. Read more
1.0.0 · Source§

fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>

Reads all bytes until EOF in this source, appending them to buf. Read more
1.6.0 · Source§

fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>

Reads the exact number of bytes required to fill buf. Read more
Source§

fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Pull some bytes from this source into the specified buffer. Read more
Source§

fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>

🔬This is a nightly-only experimental API. (read_buf)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Read. Read more
1.0.0 · Source§

fn bytes(self) -> Bytes<Self>
where Self: Sized,

Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0 · Source§

fn chain<R>(self, next: R) -> Chain<Self, R>
where R: Read, Self: Sized,

Creates an adapter which will chain this stream with another. Read more
1.0.0 · Source§

fn take(self, limit: u64) -> Take<Self>
where Self: Sized,

Creates an adapter which will read at most limit bytes from it. Read more
Source§

impl<C, S> Write for &RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send, S: SideData,

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn flush(&mut self) -> Result<()>

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more
Source§

impl<C, S> Write for RustTlsDuplexStream<C, S>
where C: DerefMut + Deref<Target = ConnectionCommon<S>> + Send, S: SideData,

Source§

fn write(&mut self, buf: &[u8]) -> Result<usize>

Writes a buffer into this writer, returning how many bytes were written. Read more
Source§

fn flush(&mut self) -> Result<()>

Flushes this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
1.36.0 · Source§

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>

Like write, except that it writes from a slice of buffers. Read more
Source§

fn is_write_vectored(&self) -> bool

🔬This is a nightly-only experimental API. (can_vector)
Determines if this Writer has an efficient write_vectored implementation. Read more
1.0.0 · Source§

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>

Attempts to write an entire buffer into this writer. Read more
Source§

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>

🔬This is a nightly-only experimental API. (write_all_vectored)
Attempts to write multiple buffers into this writer. Read more
1.0.0 · Source§

fn write_fmt(&mut self, args: Arguments<'_>) -> Result<(), Error>

Writes a formatted string into this writer, returning any error encountered. Read more
1.0.0 · Source§

fn by_ref(&mut self) -> &mut Self
where Self: Sized,

Creates a “by reference” adapter for this instance of Write. Read more

Auto Trait Implementations§

§

impl<C, S> !Freeze for RustTlsDuplexStream<C, S>

§

impl<C, S> RefUnwindSafe for RustTlsDuplexStream<C, S>

§

impl<C, S> Send for RustTlsDuplexStream<C, S>

§

impl<C, S> Sync for RustTlsDuplexStream<C, S>

§

impl<C, S> Unpin for RustTlsDuplexStream<C, S>
where C: Unpin,

§

impl<C, S> UnwindSafe for RustTlsDuplexStream<C, S>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.