Trait ReadHalf

Source
pub trait ReadHalf:
    Debug
    + Send
    + Sync
    + 'static {
    // Provided methods
    fn receive_message<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 mut self,
        seq: u64,
        already_received_bytes: &'life1 mut Vec<u8>,
        already_received_fds: &'life2 mut Vec<OwnedFd>,
    ) -> Pin<Box<dyn Future<Output = Result<Message>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
    fn recvmsg<'life0, 'life1, 'async_trait>(
        &'life0 mut self,
        _buf: &'life1 mut [u8],
    ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn can_pass_unix_fd(&self) -> bool { ... }
    fn peer_credentials<'life0, 'async_trait>(
        &'life0 mut self,
    ) -> Pin<Box<dyn Future<Output = Result<ConnectionCredentials>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait { ... }
    fn auth_mechanism(&self) -> AuthMechanism { ... }
}
Expand description

The read half of a socket.

See Socket for more details.

Provided Methods§

Source

fn receive_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, seq: u64, already_received_bytes: &'life1 mut Vec<u8>, already_received_fds: &'life2 mut Vec<OwnedFd>, ) -> Pin<Box<dyn Future<Output = Result<Message>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Receive a message on the socket.

This is the higher-level method to receive a full D-Bus message.

The default implementation uses recvmsg to receive the message. Implementers should override either this or recvmsg. Note that if you override this method, zbus will not be able perform an authentication handshake and hence will skip the handshake. Therefore your implementation will only be useful for pre-authenticated connections or connections that do not require authentication.

§Parameters
  • seq: The sequence number of the message. The returned message should have this sequence.
  • already_received_bytes: Sometimes, zbus already received some bytes from the socket belonging to the first message(s) (as part of the connection handshake process). This is the buffer containing those bytes (if any). If you’re implementing this method, most likely you can safely ignore this parameter.
  • already_received_fds: Same goes for file descriptors belonging to first messages.
Source

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, _buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Attempt to receive bytes from the socket.

On success, returns the number of bytes read as well as a Vec containing any associated file descriptors.

The default implementation simply panics. Implementers must override either read_message or this method.

Source

fn can_pass_unix_fd(&self) -> bool

Return whether passing file descriptors is supported.

Default implementation returns false.

Source

fn peer_credentials<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ConnectionCredentials>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

The peer credentials.

Source

fn auth_mechanism(&self) -> AuthMechanism

The authentication mechanism to use for this socket on the target OS.

Default is AuthMechanism::External.

Trait Implementations§

Source§

impl ReadHalf for Box<dyn ReadHalf>

Source§

fn can_pass_unix_fd(&self) -> bool

Return whether passing file descriptors is supported. Read more
Source§

fn receive_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, seq: u64, already_received_bytes: &'life1 mut Vec<u8>, already_received_fds: &'life2 mut Vec<OwnedFd>, ) -> Pin<Box<dyn Future<Output = Result<Message>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Receive a message on the socket. Read more
Source§

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Attempt to receive bytes from the socket. Read more
Source§

fn peer_credentials<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ConnectionCredentials>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

The peer credentials.
Source§

fn auth_mechanism(&self) -> AuthMechanism

The authentication mechanism to use for this socket on the target OS. Read more

Implementations on Foreign Types§

Source§

impl ReadHalf for OwnedReadHalf

Source§

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn auth_mechanism(&self) -> AuthMechanism

Source§

impl ReadHalf for OwnedReadHalf

Source§

fn can_pass_unix_fd(&self) -> bool

Supports passing file descriptors.

Source§

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn peer_credentials<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ConnectionCredentials>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source§

impl ReadHalf for ChildStdout

Source§

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

impl ReadHalf for Box<dyn ReadHalf>

Source§

fn can_pass_unix_fd(&self) -> bool

Source§

fn receive_message<'life0, 'life1, 'life2, 'async_trait>( &'life0 mut self, seq: u64, already_received_bytes: &'life1 mut Vec<u8>, already_received_fds: &'life2 mut Vec<OwnedFd>, ) -> Pin<Box<dyn Future<Output = Result<Message>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn recvmsg<'life0, 'life1, 'async_trait>( &'life0 mut self, buf: &'life1 mut [u8], ) -> Pin<Box<dyn Future<Output = Result<(usize, Vec<OwnedFd>)>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn peer_credentials<'life0, 'async_trait>( &'life0 mut self, ) -> Pin<Box<dyn Future<Output = Result<ConnectionCredentials>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source§

fn auth_mechanism(&self) -> AuthMechanism

Implementors§