pub struct SessionRecording { /* private fields */ }Expand description
A live session recording (Go’s recording plus its loggingWriter).
Implementations§
Source§impl SessionRecording
impl SessionRecording
Sourcepub async fn start<D: RecorderDialer>(
recorders: &[SocketAddr],
on_failure: Option<&SshRecorderFailureAction>,
header: &CastHeader,
dialer: &D,
) -> Result<Option<Self>, RecordingRejected>
pub async fn start<D: RecorderDialer>( recorders: &[SocketAddr], on_failure: Option<&SshRecorderFailureAction>, header: &CastHeader, dialer: &D, ) -> Result<Option<Self>, RecordingRejected>
Start recording this session, or decide the session may proceed without a recording.
Port of Go sshSession.startNewRecording. The three outcomes are Go’s three:
Ok(Some(rec))— a recorder accepted the recording and the header is written.Ok(None)— recording could not start and the policy fails open; run the session unrecorded (Go’sreturn nil, nil).Err(_)— the session must be refused (Go’suserVisibleError, or a header that could not be written — Go exits the session in both cases).
Sourcepub fn recorder(&self) -> SocketAddr
pub fn recorder(&self) -> SocketAddr
The recorder this session is streamed to.
Sourcepub fn take_terminate(&mut self) -> Option<Receiver<String>>
pub fn take_terminate(&mut self) -> Option<Receiver<String>>
Take the channel that fires with the message to show the client when the upload failed and
the policy says terminate. Yields None after the first call.
Sourcepub async fn record_output(&mut self, data: &[u8]) -> Result<(), String>
pub async fn record_output(&mut self, data: &[u8]) -> Result<(), String>
Record one chunk of session output, then let the caller forward it to the client.
Port of Go loggingWriter.Write: the cast line is written first, and a failure to write it
only stops the session when the policy is fail-closed. Only output is recorded — Go
deliberately does not record input, which may contain passwords.
Err means the session must be terminated (the policy is fail-closed on a broken
recording); the error is the message to show the client.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for SessionRecording
impl !UnwindSafe for SessionRecording
impl Freeze for SessionRecording
impl Send for SessionRecording
impl Sync for SessionRecording
impl Unpin for SessionRecording
impl UnsafeUnpin for SessionRecording
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<A, T> DynMessage<A> for T
impl<A, T> DynMessage<A> for T
Source§fn handle_dyn<'a>(
self: Box<T>,
state: &'a mut A,
actor_ref: ActorRef<A>,
tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>,
stop: &'a mut bool,
) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
fn handle_dyn<'a>( self: Box<T>, state: &'a mut A, actor_ref: ActorRef<A>, tx: Option<Sender<Result<Box<dyn Any + Send>, SendError<Box<dyn Any + Send>, Box<dyn Any + Send>>>>>, stop: &'a mut bool, ) -> Pin<Box<dyn Future<Output = Result<(), Box<dyn ReplyError>>> + Send + 'a>>
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more