parent
ad109a25be
commit
c3603b0db0
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
use serialize::hex::FromHex;
|
||||
use std::io::{Writer};
|
||||
use std::io::net::tcp::TcpStream;
|
||||
use std::str;
|
||||
|
||||
use crypto::hash::HashType::{SHA256};
|
||||
use ssl::SslMethod::Sslv23;
|
||||
|
|
@ -191,6 +190,17 @@ fn test_read() {
|
|||
let mut stream = SslStream::new(&SslContext::new(Sslv23).unwrap(), stream).unwrap();
|
||||
stream.write("GET /\r\n\r\n".as_bytes()).unwrap();
|
||||
stream.flush().unwrap();
|
||||
let buf = stream.read_to_end().ok().expect("read error");
|
||||
print!("{}", str::from_utf8(buf.as_slice()));
|
||||
stream.read_to_end().ok().expect("read error");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_clone() {
|
||||
let stream = TcpStream::connect("127.0.0.1:15418").unwrap();
|
||||
let mut stream = SslStream::new(&SslContext::new(Sslv23).unwrap(), stream).unwrap();
|
||||
let mut stream2 = stream.clone();
|
||||
spawn(proc() {
|
||||
stream2.write("GET /\r\n\r\n".as_bytes()).unwrap();
|
||||
stream2.flush().unwrap();
|
||||
});
|
||||
stream.read_to_end().ok().expect("read error");
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue