diff options
| author | Steven Fackler <[email protected]> | 2014-11-29 11:06:16 -0800 |
|---|---|---|
| committer | Steven Fackler <[email protected]> | 2014-11-29 11:06:16 -0800 |
| commit | c3603b0db00d044c8332d39dd9d49e3c76a2a978 (patch) | |
| tree | 2bf5f0f319d5034eab340670fef9e5d1cbcc2d8c /src/ssl/mod.rs | |
| parent | Release 0.2.1 (diff) | |
| download | rust-openssl-c3603b0db00d044c8332d39dd9d49e3c76a2a978.tar.xz rust-openssl-c3603b0db00d044c8332d39dd9d49e3c76a2a978.zip | |
Make SslStream Cloneable
Closes #6
Diffstat (limited to 'src/ssl/mod.rs')
| -rw-r--r-- | src/ssl/mod.rs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/ssl/mod.rs b/src/ssl/mod.rs index 778b50c7..d29d633e 100644 --- a/src/ssl/mod.rs +++ b/src/ssl/mod.rs @@ -2,7 +2,7 @@ use libc::{c_int, c_void, c_long}; use std::io::{IoResult, IoError, EndOfFile, Stream, Reader, Writer}; use std::mem; use std::ptr; -use std::sync::{Once, ONCE_INIT}; +use std::sync::{Once, ONCE_INIT, Arc}; use bio::{MemBio}; use ffi; @@ -397,9 +397,10 @@ enum LibSslError { } /// A stream wrapper which handles SSL encryption for an underlying stream. +#[deriving(Clone)] pub struct SslStream<S> { stream: S, - ssl: Ssl, + ssl: Arc<Ssl>, buf: Vec<u8> } @@ -407,7 +408,7 @@ impl<S: Stream> SslStream<S> { fn new_base(ssl:Ssl, stream: S) -> SslStream<S> { SslStream { stream: stream, - ssl: ssl, + ssl: Arc::new(ssl), // Maximum TLS record size is 16k buf: Vec::from_elem(16 * 1024, 0u8) } @@ -465,7 +466,7 @@ impl<S: Stream> SslStream<S> { fn in_retry_wrapper(&mut self, blk: |&Ssl| -> c_int) -> Result<c_int, SslError> { loop { - let ret = blk(&self.ssl); + let ret = blk(&*self.ssl); if ret > 0 { return Ok(ret); } |