summaryrefslogtreecommitdiff
path: root/src/listener.rs
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2015-01-18 16:14:08 -0800
committerAlex Crichton <alex@alexcrichton.com>2015-01-18 16:14:08 -0800
commite2f2c5046f6079d80ed21ae21afc55249dff478a (patch)
tree79b61a47b057d3c8c555417d46402f752e1c26c0 /src/listener.rs
parentfd5b63c00e83d498a4badcc8cf2a7559ba0f4aa6 (diff)
downloadssh2-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.rs36
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);
+ }
}
}