diff options
author | Joseph Birr-Pixton <jpixton@gmail.com> | 2016-09-03 16:05:32 +0100 |
---|---|---|
committer | Joseph Birr-Pixton <jpixton@gmail.com> | 2016-09-03 16:06:25 +0100 |
commit | c8d31c1e299222b92b0870e2ec84b62127ea2be1 (patch) | |
tree | 393a75678689bf2687ce491eb7750b7b01a9a846 | |
parent | 6810a7fcdafd352f50e5f892e0847967fe0ede1f (diff) |
Let callers know when we're handshaking
Should fix issue #21
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | examples/bench.rs | 11 | ||||
-rw-r--r-- | src/client.rs | 8 | ||||
-rw-r--r-- | src/server.rs | 8 | ||||
-rw-r--r-- | src/session.rs | 5 |
5 files changed, 32 insertions, 2 deletions
@@ -1,6 +1,6 @@ [package] name = "rustls" -version = "0.1.1" +version = "0.1.2" authors = ["Joseph Birr-Pixton <jpixton@gmail.com>"] license = "Apache-2.0/ISC/MIT" readme = "README.md" diff --git a/examples/bench.rs b/examples/bench.rs index 7b5ed25c..8eab4d1f 100644 --- a/examples/bench.rs +++ b/examples/bench.rs @@ -187,15 +187,24 @@ fn bench_handshake(suite: &'static rustls::SupportedCipherSuite, clientauth: Cli } fn do_handshake(client: &mut ClientSession, server: &mut ServerSession) { + assert_eq!(server.is_handshaking(), true); + assert_eq!(client.is_handshaking(), true); transfer(client, server); server.process_new_packets().unwrap(); + assert_eq!(server.is_handshaking(), true); + assert_eq!(client.is_handshaking(), true); transfer(server, client); client.process_new_packets().unwrap(); + assert_eq!(server.is_handshaking(), true); + assert_eq!(client.is_handshaking(), true); transfer(client, server); server.process_new_packets().unwrap(); + assert_eq!(server.is_handshaking(), false); + assert_eq!(client.is_handshaking(), true); transfer(server, client); client.process_new_packets().unwrap(); - transfer(client, server); + assert_eq!(server.is_handshaking(), false); + assert_eq!(client.is_handshaking(), false); } fn bench_bulk(suite: &'static rustls::SupportedCipherSuite) { diff --git a/src/client.rs b/src/client.rs index a0ea97f4..0d4e70e2 100644 --- a/src/client.rs +++ b/src/client.rs @@ -360,6 +360,10 @@ impl ClientSessionImpl { !self.common.sendable_tls.is_empty() } + pub fn is_handshaking(&self) -> bool { + self.state != ConnState::Traffic + } + pub fn process_msg(&mut self, msg: &mut Message) -> Result<(), TLSError> { /* Decrypt if demanded by current state. */ if self.common.peer_encrypting { @@ -531,6 +535,10 @@ impl Session for ClientSession { self.imp.wants_write() } + fn is_handshaking(&self) -> bool { + self.imp.is_handshaking() + } + fn send_close_notify(&mut self) { self.imp.send_close_notify() } diff --git a/src/server.rs b/src/server.rs index b1b681e4..955c6055 100644 --- a/src/server.rs +++ b/src/server.rs @@ -328,6 +328,10 @@ impl ServerSessionImpl { !self.common.sendable_tls.is_empty() } + pub fn is_handshaking(&self) -> bool { + self.state != ConnState::Traffic + } + pub fn process_msg(&mut self, msg: &mut Message) -> Result<(), TLSError> { /* Decrypt if demanded by current state. */ if self.common.peer_encrypting { @@ -479,6 +483,10 @@ impl Session for ServerSession { self.imp.wants_write() } + fn is_handshaking(&self) -> bool { + self.imp.is_handshaking() + } + fn send_close_notify(&mut self) { self.imp.send_close_notify() } diff --git a/src/session.rs b/src/session.rs index bd5ad564..198b0819 100644 --- a/src/session.rs +++ b/src/session.rs @@ -48,6 +48,11 @@ pub trait Session : Read + Write { /// as possible. fn wants_write(&self) -> bool; + /// Returns true if the session is currently perform the TLS + /// handshake. During this time plaintext written to the + /// session is buffered in memory. + fn is_handshaking(&self) -> bool; + /// Queues a close_notify fatal alert to be sent in the next /// `write_tls` call. This informs the peer that the /// connection is being closed. |