summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Birr-Pixton <jpixton@gmail.com>2016-09-03 16:05:32 +0100
committerJoseph Birr-Pixton <jpixton@gmail.com>2016-09-03 16:06:25 +0100
commitc8d31c1e299222b92b0870e2ec84b62127ea2be1 (patch)
tree393a75678689bf2687ce491eb7750b7b01a9a846
parent6810a7fcdafd352f50e5f892e0847967fe0ede1f (diff)
Let callers know when we're handshaking
Should fix issue #21
-rw-r--r--Cargo.toml2
-rw-r--r--examples/bench.rs11
-rw-r--r--src/client.rs8
-rw-r--r--src/server.rs8
-rw-r--r--src/session.rs5
5 files changed, 32 insertions, 2 deletions
diff --git a/Cargo.toml b/Cargo.toml
index cb07b061..09cecfd8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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.