From cdd403fe98889d32e5acdfdbc6b7dd8c8bb66cf7 Mon Sep 17 00:00:00 2001 From: Joseph Birr-Pixton Date: Sat, 9 May 2020 20:13:55 +0100 Subject: [PATCH] =?UTF-8?q?Revert=20"Revert=20"rustls-mio:=20bump=20mio=20?= =?UTF-8?q?to=C2=A00.7""?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 7e670c2620f7750ebff2fa22d46502c53bbda9b6. --- rustls-mio/Cargo.toml | 2 +- rustls-mio/examples/tlsclient.rs | 42 +++++++------------ rustls-mio/examples/tlsserver.rs | 70 +++++++++++++++----------------- 3 files changed, 47 insertions(+), 67 deletions(-) diff --git a/rustls-mio/Cargo.toml b/rustls-mio/Cargo.toml index 24d4bc53..02859b7a 100644 --- a/rustls-mio/Cargo.toml +++ b/rustls-mio/Cargo.toml @@ -23,7 +23,7 @@ webpki = "0.21.0" ct-logs = "0.6" docopt = "~1.1" env_logger = "0.7.1" -mio = "0.6.14" +mio = { version = "0.7", features = ["os-poll", "tcp"] } regex = "1.0" serde = "1.0" serde_derive = "1.0" diff --git a/rustls-mio/examples/tlsclient.rs b/rustls-mio/examples/tlsclient.rs index fba10aba..580a4644 100644 --- a/rustls-mio/examples/tlsclient.rs +++ b/rustls-mio/examples/tlsclient.rs @@ -2,7 +2,7 @@ use std::sync::{Arc, Mutex}; use std::process; use mio; -use mio::tcp::TcpStream; +use mio::net::TcpStream; use std::net::SocketAddr; use std::str; @@ -40,16 +40,14 @@ struct TlsClient { } impl TlsClient { - fn ready(&mut self, - poll: &mut mio::Poll, - ev: &mio::Event) { + fn ready(&mut self, ev: &mio::event::Event) { assert_eq!(ev.token(), CLIENT); - if ev.readiness().is_readable() { + if ev.is_readable() { self.do_read(); } - if ev.readiness().is_writable() { + if ev.is_writable() { self.do_write(); } @@ -57,8 +55,6 @@ impl TlsClient { println!("Connection closed"); process::exit(if self.clean_closure { 0 } else { 1 }); } - - self.reregister(poll); } } @@ -161,34 +157,24 @@ impl TlsClient { self.tls_session.writev_tls(&mut WriteVAdapter::new(&mut self.socket)).unwrap(); } - fn register(&self, poll: &mut mio::Poll) { - poll.register(&self.socket, - CLIENT, - 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(); + fn register(&mut self, poll: &mut mio::Poll) { + let registry = poll.registry(); + let interest = self.ready_interest(); + registry.register(&mut self.socket, CLIENT, interest).unwrap(); } // Use wants_read/wants_write to register for different mio-level // IO readiness events. - fn ready_interest(&self) -> mio::Ready { + fn ready_interest(&self) -> mio::Interest { let rd = self.tls_session.wants_read(); let wr = self.tls_session.wants_write(); if rd && wr { - mio::Ready::readable() | mio::Ready::writable() + mio::Interest::READABLE | mio::Interest::WRITABLE } else if wr { - mio::Ready::writable() + mio::Interest::WRITABLE } else { - mio::Ready::readable() + mio::Interest::READABLE } } @@ -539,7 +525,7 @@ fn main() { 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 mut tlsclient = TlsClient::new(sock, dns_name, config); @@ -563,7 +549,7 @@ fn main() { .unwrap(); for ev in events.iter() { - tlsclient.ready(&mut poll, &ev); + tlsclient.ready(&ev); } } } diff --git a/rustls-mio/examples/tlsserver.rs b/rustls-mio/examples/tlsserver.rs index 1b899a97..8af74a86 100644 --- a/rustls-mio/examples/tlsserver.rs +++ b/rustls-mio/examples/tlsserver.rs @@ -1,7 +1,7 @@ use std::sync::Arc; use mio; -use mio::tcp::{TcpListener, TcpStream, Shutdown}; +use mio::net::{TcpListener, TcpStream}; #[macro_use] extern crate log; @@ -75,8 +75,9 @@ impl TlsServer { let token = mio::Token(self.next_id); self.next_id += 1; - self.connections.insert(token, Connection::new(socket, token, mode, tls_session)); - self.connections[&token].register(poll); + let mut connection = Connection::new(socket, token, mode, tls_session); + connection.register(poll); + self.connections.insert(token, connection); true } Err(e) => { @@ -86,7 +87,7 @@ impl TlsServer { } } - fn conn_event(&mut self, poll: &mut mio::Poll, event: &mio::Event) { + fn conn_event(&mut self, poll: &mut mio::Poll, event: &mio::event::Event) { let token = event.token(); if self.connections.contains_key(&token) { @@ -123,7 +124,7 @@ fn open_back(mode: &ServerMode) -> Option { match *mode { ServerMode::Forward(ref 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) } _ => None, @@ -165,26 +166,25 @@ impl Connection { } /// We're a connection, and we have something to do. - fn ready(&mut self, poll: &mut mio::Poll, ev: &mio::Event) { + fn ready(&mut self, poll: &mut mio::Poll, ev: &mio::event::Event) { // If we're readable: read some TLS. Then // see if that yielded new plaintext. Then // see if the backend is readable too. - if ev.readiness().is_readable() { + if ev.is_readable() { self.do_tls_read(); self.try_plain_read(); self.try_back_read(); } - if ev.readiness().is_writable() { + if ev.is_writable() { self.do_tls_write_and_handle_error(); } if self.closing { - let _ = self.socket.shutdown(Shutdown::Both); + let _ = self.socket.shutdown(net::Shutdown::Both); self.close_back(); self.closed = true; - } else { - self.reregister(poll); + self.deregister(poll); } } @@ -192,7 +192,7 @@ impl Connection { fn close_back(&mut self) { if self.back.is_some() { let back = self.back.as_mut().unwrap(); - back.shutdown(Shutdown::Both).unwrap(); + back.shutdown(net::Shutdown::Both).unwrap(); } self.back = None; } @@ -326,50 +326,45 @@ impl Connection { } } - fn register(&self, poll: &mut mio::Poll) { - poll.register(&self.socket, - self.token, - self.event_set(), - mio::PollOpt::level() | mio::PollOpt::oneshot()) + fn register(&mut self, poll: &mut mio::Poll) { + let registry = poll.registry(); + let event_set = self.event_set(); + registry.register(&mut self.socket, + self.token, + event_set) .unwrap(); if self.back.is_some() { - poll.register(self.back.as_ref().unwrap(), - self.token, - mio::Ready::readable(), - mio::PollOpt::level() | mio::PollOpt::oneshot()) + registry.register(self.back.as_mut().unwrap(), + self.token, + mio::Interest::READABLE) .unwrap(); } } - fn reregister(&self, poll: &mut mio::Poll) { - poll.reregister(&self.socket, - self.token, - self.event_set(), - mio::PollOpt::level() | mio::PollOpt::oneshot()) + fn deregister(&mut self, poll: &mut mio::Poll) { + let registry = poll.registry(); + registry.deregister(&mut self.socket) .unwrap(); if self.back.is_some() { - poll.reregister(self.back.as_ref().unwrap(), - self.token, - mio::Ready::readable(), - mio::PollOpt::level() | mio::PollOpt::oneshot()) + registry.deregister(self.back.as_mut().unwrap()) .unwrap(); } } /// What IO events we're currently waiting for, /// based on wants_read/wants_write. - fn event_set(&self) -> mio::Ready { + fn event_set(&self) -> mio::Interest { let rd = self.tls_session.wants_read(); let wr = self.tls_session.wants_write(); if rd && wr { - mio::Ready::readable() | mio::Ready::writable() + mio::Interest::READABLE | mio::Interest::WRITABLE } else if wr { - mio::Ready::writable() + mio::Interest::WRITABLE } else { - mio::Ready::readable() + mio::Interest::READABLE } } @@ -606,13 +601,12 @@ fn main() { let config = make_config(&args); - let listener = TcpListener::bind(&addr).expect("cannot listen on port"); + let mut listener = TcpListener::bind(addr).expect("cannot listen on port"); let mut poll = mio::Poll::new() .unwrap(); - poll.register(&listener, + poll.registry().register(&mut listener, LISTENER, - mio::Ready::readable(), - mio::PollOpt::level()) + mio::Interest::READABLE) .unwrap(); let mode = if args.cmd_echo {