mirror of https://github.com/ctz/rustls
Revert "rustls-mio: bump mio to 0.7"
This reverts commita99d3f0a2c
. This reverts commitd5ecfb4b75
. This reverts commit83c6495770
.
This commit is contained in:
parent
d5ecfb4b75
commit
7e670c2620
|
@ -23,7 +23,7 @@ webpki = "0.21.0"
|
||||||
ct-logs = "0.6"
|
ct-logs = "0.6"
|
||||||
docopt = "~1.1"
|
docopt = "~1.1"
|
||||||
env_logger = "0.7.1"
|
env_logger = "0.7.1"
|
||||||
mio = { version = "0.7", features = ["os-poll", "tcp"] }
|
mio = "0.6.14"
|
||||||
regex = "1.0"
|
regex = "1.0"
|
||||||
serde = "1.0"
|
serde = "1.0"
|
||||||
serde_derive = "1.0"
|
serde_derive = "1.0"
|
||||||
|
|
|
@ -2,7 +2,7 @@ use std::sync::{Arc, Mutex};
|
||||||
use std::process;
|
use std::process;
|
||||||
|
|
||||||
use mio;
|
use mio;
|
||||||
use mio::net::TcpStream;
|
use mio::tcp::TcpStream;
|
||||||
|
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
@ -40,14 +40,16 @@ struct TlsClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TlsClient {
|
impl TlsClient {
|
||||||
fn ready(&mut self, ev: &mio::event::Event) {
|
fn ready(&mut self,
|
||||||
|
poll: &mut mio::Poll,
|
||||||
|
ev: &mio::Event) {
|
||||||
assert_eq!(ev.token(), CLIENT);
|
assert_eq!(ev.token(), CLIENT);
|
||||||
|
|
||||||
if ev.is_readable() {
|
if ev.readiness().is_readable() {
|
||||||
self.do_read();
|
self.do_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ev.is_writable() {
|
if ev.readiness().is_writable() {
|
||||||
self.do_write();
|
self.do_write();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,6 +57,8 @@ impl TlsClient {
|
||||||
println!("Connection closed");
|
println!("Connection closed");
|
||||||
process::exit(if self.clean_closure { 0 } else { 1 });
|
process::exit(if self.clean_closure { 0 } else { 1 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.reregister(poll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,24 +161,34 @@ impl TlsClient {
|
||||||
self.tls_session.writev_tls(&mut WriteVAdapter::new(&mut self.socket)).unwrap();
|
self.tls_session.writev_tls(&mut WriteVAdapter::new(&mut self.socket)).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register(&mut self, poll: &mut mio::Poll) {
|
fn register(&self, poll: &mut mio::Poll) {
|
||||||
let registry = poll.registry();
|
poll.register(&self.socket,
|
||||||
let interest = self.ready_interest();
|
CLIENT,
|
||||||
registry.register(&mut self.socket, CLIENT, interest).unwrap();
|
self.ready_interest(),
|
||||||
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn reregister(&self, poll: &mut mio::Poll) {
|
||||||
|
poll.reregister(&self.socket,
|
||||||
|
CLIENT,
|
||||||
|
self.ready_interest(),
|
||||||
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use wants_read/wants_write to register for different mio-level
|
// Use wants_read/wants_write to register for different mio-level
|
||||||
// IO readiness events.
|
// IO readiness events.
|
||||||
fn ready_interest(&self) -> mio::Interest {
|
fn ready_interest(&self) -> mio::Ready {
|
||||||
let rd = self.tls_session.wants_read();
|
let rd = self.tls_session.wants_read();
|
||||||
let wr = self.tls_session.wants_write();
|
let wr = self.tls_session.wants_write();
|
||||||
|
|
||||||
if rd && wr {
|
if rd && wr {
|
||||||
mio::Interest::READABLE | mio::Interest::WRITABLE
|
mio::Ready::readable() | mio::Ready::writable()
|
||||||
} else if wr {
|
} else if wr {
|
||||||
mio::Interest::WRITABLE
|
mio::Ready::writable()
|
||||||
} else {
|
} else {
|
||||||
mio::Interest::READABLE
|
mio::Ready::readable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -525,7 +539,7 @@ fn main() {
|
||||||
|
|
||||||
let config = make_config(&args);
|
let config = make_config(&args);
|
||||||
|
|
||||||
let sock = TcpStream::connect(addr).unwrap();
|
let sock = TcpStream::connect(&addr).unwrap();
|
||||||
let dns_name = webpki::DNSNameRef::try_from_ascii_str(&args.arg_hostname).unwrap();
|
let dns_name = webpki::DNSNameRef::try_from_ascii_str(&args.arg_hostname).unwrap();
|
||||||
let mut tlsclient = TlsClient::new(sock, dns_name, config);
|
let mut tlsclient = TlsClient::new(sock, dns_name, config);
|
||||||
|
|
||||||
|
@ -549,7 +563,7 @@ fn main() {
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
for ev in events.iter() {
|
for ev in events.iter() {
|
||||||
tlsclient.ready(&ev);
|
tlsclient.ready(&mut poll, &ev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use mio;
|
use mio;
|
||||||
use mio::net::{TcpListener, TcpStream};
|
use mio::tcp::{TcpListener, TcpStream, Shutdown};
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate log;
|
extern crate log;
|
||||||
|
@ -75,9 +75,8 @@ impl TlsServer {
|
||||||
let token = mio::Token(self.next_id);
|
let token = mio::Token(self.next_id);
|
||||||
self.next_id += 1;
|
self.next_id += 1;
|
||||||
|
|
||||||
let mut connection = Connection::new(socket, token, mode, tls_session);
|
self.connections.insert(token, Connection::new(socket, token, mode, tls_session));
|
||||||
connection.register(poll);
|
self.connections[&token].register(poll);
|
||||||
self.connections.insert(token, connection);
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
@ -87,7 +86,7 @@ impl TlsServer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn conn_event(&mut self, poll: &mut mio::Poll, event: &mio::event::Event) {
|
fn conn_event(&mut self, poll: &mut mio::Poll, event: &mio::Event) {
|
||||||
let token = event.token();
|
let token = event.token();
|
||||||
|
|
||||||
if self.connections.contains_key(&token) {
|
if self.connections.contains_key(&token) {
|
||||||
|
@ -124,7 +123,7 @@ fn open_back(mode: &ServerMode) -> Option<TcpStream> {
|
||||||
match *mode {
|
match *mode {
|
||||||
ServerMode::Forward(ref port) => {
|
ServerMode::Forward(ref port) => {
|
||||||
let addr = net::SocketAddrV4::new(net::Ipv4Addr::new(127, 0, 0, 1), *port);
|
let addr = net::SocketAddrV4::new(net::Ipv4Addr::new(127, 0, 0, 1), *port);
|
||||||
let conn = TcpStream::connect(net::SocketAddr::V4(addr)).unwrap();
|
let conn = TcpStream::connect(&net::SocketAddr::V4(addr)).unwrap();
|
||||||
Some(conn)
|
Some(conn)
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
|
@ -166,25 +165,26 @@ impl Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// We're a connection, and we have something to do.
|
/// We're a connection, and we have something to do.
|
||||||
fn ready(&mut self, poll: &mut mio::Poll, ev: &mio::event::Event) {
|
fn ready(&mut self, poll: &mut mio::Poll, ev: &mio::Event) {
|
||||||
// If we're readable: read some TLS. Then
|
// If we're readable: read some TLS. Then
|
||||||
// see if that yielded new plaintext. Then
|
// see if that yielded new plaintext. Then
|
||||||
// see if the backend is readable too.
|
// see if the backend is readable too.
|
||||||
if ev.is_readable() {
|
if ev.readiness().is_readable() {
|
||||||
self.do_tls_read();
|
self.do_tls_read();
|
||||||
self.try_plain_read();
|
self.try_plain_read();
|
||||||
self.try_back_read();
|
self.try_back_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ev.is_writable() {
|
if ev.readiness().is_writable() {
|
||||||
self.do_tls_write_and_handle_error();
|
self.do_tls_write_and_handle_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.closing {
|
if self.closing {
|
||||||
let _ = self.socket.shutdown(net::Shutdown::Both);
|
let _ = self.socket.shutdown(Shutdown::Both);
|
||||||
self.close_back();
|
self.close_back();
|
||||||
self.closed = true;
|
self.closed = true;
|
||||||
self.deregister(poll);
|
} else {
|
||||||
|
self.reregister(poll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ impl Connection {
|
||||||
fn close_back(&mut self) {
|
fn close_back(&mut self) {
|
||||||
if self.back.is_some() {
|
if self.back.is_some() {
|
||||||
let back = self.back.as_mut().unwrap();
|
let back = self.back.as_mut().unwrap();
|
||||||
back.shutdown(net::Shutdown::Both).unwrap();
|
back.shutdown(Shutdown::Both).unwrap();
|
||||||
}
|
}
|
||||||
self.back = None;
|
self.back = None;
|
||||||
}
|
}
|
||||||
|
@ -326,45 +326,50 @@ impl Connection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register(&mut self, poll: &mut mio::Poll) {
|
fn register(&self, poll: &mut mio::Poll) {
|
||||||
let registry = poll.registry();
|
poll.register(&self.socket,
|
||||||
let event_set = self.event_set();
|
self.token,
|
||||||
registry.register(&mut self.socket,
|
self.event_set(),
|
||||||
self.token,
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
event_set)
|
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
if self.back.is_some() {
|
if self.back.is_some() {
|
||||||
registry.register(self.back.as_mut().unwrap(),
|
poll.register(self.back.as_ref().unwrap(),
|
||||||
self.token,
|
self.token,
|
||||||
mio::Interest::READABLE)
|
mio::Ready::readable(),
|
||||||
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deregister(&mut self, poll: &mut mio::Poll) {
|
fn reregister(&self, poll: &mut mio::Poll) {
|
||||||
let registry = poll.registry();
|
poll.reregister(&self.socket,
|
||||||
registry.deregister(&mut self.socket)
|
self.token,
|
||||||
|
self.event_set(),
|
||||||
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
if self.back.is_some() {
|
if self.back.is_some() {
|
||||||
registry.deregister(self.back.as_mut().unwrap())
|
poll.reregister(self.back.as_ref().unwrap(),
|
||||||
|
self.token,
|
||||||
|
mio::Ready::readable(),
|
||||||
|
mio::PollOpt::level() | mio::PollOpt::oneshot())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// What IO events we're currently waiting for,
|
/// What IO events we're currently waiting for,
|
||||||
/// based on wants_read/wants_write.
|
/// based on wants_read/wants_write.
|
||||||
fn event_set(&self) -> mio::Interest {
|
fn event_set(&self) -> mio::Ready {
|
||||||
let rd = self.tls_session.wants_read();
|
let rd = self.tls_session.wants_read();
|
||||||
let wr = self.tls_session.wants_write();
|
let wr = self.tls_session.wants_write();
|
||||||
|
|
||||||
if rd && wr {
|
if rd && wr {
|
||||||
mio::Interest::READABLE | mio::Interest::WRITABLE
|
mio::Ready::readable() | mio::Ready::writable()
|
||||||
} else if wr {
|
} else if wr {
|
||||||
mio::Interest::WRITABLE
|
mio::Ready::writable()
|
||||||
} else {
|
} else {
|
||||||
mio::Interest::READABLE
|
mio::Ready::readable()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -601,12 +606,13 @@ fn main() {
|
||||||
|
|
||||||
let config = make_config(&args);
|
let config = make_config(&args);
|
||||||
|
|
||||||
let mut listener = TcpListener::bind(addr).expect("cannot listen on port");
|
let listener = TcpListener::bind(&addr).expect("cannot listen on port");
|
||||||
let mut poll = mio::Poll::new()
|
let mut poll = mio::Poll::new()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
poll.registry().register(&mut listener,
|
poll.register(&listener,
|
||||||
LISTENER,
|
LISTENER,
|
||||||
mio::Interest::READABLE)
|
mio::Ready::readable(),
|
||||||
|
mio::PollOpt::level())
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let mode = if args.cmd_echo {
|
let mode = if args.cmd_echo {
|
||||||
|
|
Loading…
Reference in New Issue