pub struct ReadEnd<R, Buffer, Q, Auxiliary = ()> { /* private fields */ }
Expand description
The ReadEnd for the lowlevel API.
Implementations§
Source§impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
Sourcepub fn new(
reader: R,
reader_buffer_len: NonZeroUsize,
shared_data: SharedData<Buffer, Q, Auxiliary>,
) -> Self
pub fn new( reader: R, reader_buffer_len: NonZeroUsize, shared_data: SharedData<Buffer, Q, Auxiliary>, ) -> Self
Must call ReadEnd::receive_server_hello_pinned
or ReadEnd::receive_server_hello
after this
function call.
Sourcepub async fn receive_server_hello_pinned(
self: Pin<&mut Self>,
) -> Result<Extensions, Error>
pub async fn receive_server_hello_pinned( self: Pin<&mut Self>, ) -> Result<Extensions, Error>
Must be called once right after ReadEnd::new
to receive the hello message from the server.
Sourcepub async fn read_in_one_packet_pinned(
self: Pin<&mut Self>,
) -> Result<(), Error>
pub async fn read_in_one_packet_pinned( self: Pin<&mut Self>, ) -> Result<(), Error>
§Restart on Error
Only when the returned error is Error::InvalidResponseId
or
Error::AwaitableError
, can the function be restarted.
Upon other errors Error::IOError
, Error::FormatError
and
Error::RecursiveErrors
, the sftp session has to be discarded.
§Example
let readend = ...;
loop {
let new_requests_submit = readend.wait_for_new_request().await;
if new_requests_submit == 0 {
break;
}
// If attempt to read in more than new_requests_submit, then
// `read_in_one_packet` might block forever.
for _ in 0..new_requests_submit {
readend.read_in_one_packet().await.unwrap();
}
}
§Cancel Safety
This function is not cancel safe.
Dropping the future might cause the response packet to be partially read, and the next read would treat the partial response as a new response.
Sourcepub async fn ready_for_read_pinned(self: Pin<&mut Self>) -> Result<(), Error>
pub async fn ready_for_read_pinned(self: Pin<&mut Self>) -> Result<(), Error>
Wait for next packet to be readable.
Return Ok(())
if next packet is ready and readable, Error::IOError(io_error)
where io_error.kind() == ErrorKind::UnexpectedEof
if EOF
is met.
§Cancel Safety
This function is cancel safe.
Source§impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
Sourcepub async fn receive_server_hello(&mut self) -> Result<Extensions, Error>
pub async fn receive_server_hello(&mut self) -> Result<Extensions, Error>
Must be called once right after super::connect
to receive the hello message from the server.
Sourcepub async fn read_in_one_packet(&mut self) -> Result<(), Error>
pub async fn read_in_one_packet(&mut self) -> Result<(), Error>
§Restart on Error
Only when the returned error is Error::InvalidResponseId
or
Error::AwaitableError
, can the function be restarted.
Upon other errors Error::IOError
, Error::FormatError
and
Error::RecursiveErrors
, the sftp session has to be discarded.
§Cancel Safety
This function is not cancel safe.
Dropping the future might cause the response packet to be partially read, and the next read would treat the partial response as a new response.
Source§impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
impl<R, Buffer, Q, Auxiliary> ReadEnd<R, Buffer, Q, Auxiliary>
Return the SharedData
held by ReadEnd
.