diff options
author | Alex Crichton <alex@alexcrichton.com> | 2015-01-18 16:14:08 -0800 |
---|---|---|
committer | Alex Crichton <alex@alexcrichton.com> | 2015-01-18 16:14:08 -0800 |
commit | e2f2c5046f6079d80ed21ae21afc55249dff478a (patch) | |
tree | 79b61a47b057d3c8c555417d46402f752e1c26c0 /src/listener.rs | |
parent | fd5b63c00e83d498a4badcc8cf2a7559ba0f4aa6 (diff) | |
download | ssh2-rs-e2f2c5046f6079d80ed21ae21afc55249dff478a.zip |
Tweak impls/apis
Lots of changes, but largely cosmetic, reorganization, or internal refactorings.
Diffstat (limited to 'src/listener.rs')
-rw-r--r-- | src/listener.rs | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/listener.rs b/src/listener.rs index 6ea3ad8..a4c6f5e 100644 --- a/src/listener.rs +++ b/src/listener.rs @@ -1,4 +1,5 @@ use {raw, Session, Error, Channel}; +use util::SessionBinding; /// A listener represents a forwarding port from the remote server. /// @@ -10,35 +11,34 @@ pub struct Listener<'sess> { } impl<'sess> Listener<'sess> { - /// Wraps a raw pointer in a new Listener structure tied to the lifetime of the - /// given session. - /// - /// This consumes ownership of `raw`. - pub unsafe fn from_raw(sess: &Session, - raw: *mut raw::LIBSSH2_LISTENER) -> Listener { - Listener { - raw: raw, - sess: sess, - } - } - /// Accept a queued connection from this listener. pub fn accept(&mut self) -> Result<Channel<'sess>, Error> { unsafe { let ret = raw::libssh2_channel_forward_accept(self.raw); - if ret.is_null() { - Err(Error::last_error(self.sess).unwrap()) - } else { - Ok(Channel::from_raw(self.sess, ret)) - } + SessionBinding::from_raw_opt(self.sess, ret) + } + } +} + +impl<'sess> SessionBinding<'sess> for Listener<'sess> { + type Raw = raw::LIBSSH2_LISTENER; + + unsafe fn from_raw(sess: &'sess Session, + raw: *mut raw::LIBSSH2_LISTENER) -> Listener<'sess> { + Listener { + raw: raw, + sess: sess, } } + fn raw(&self) -> *mut raw::LIBSSH2_LISTENER { self.raw } } #[unsafe_destructor] impl<'sess> Drop for Listener<'sess> { fn drop(&mut self) { - unsafe { assert_eq!(raw::libssh2_channel_forward_cancel(self.raw), 0) } + unsafe { + let _ = raw::libssh2_channel_forward_cancel(self.raw); + } } } |