From 428be5146dd284461076179d4ddeab5f462101f0 Mon Sep 17 00:00:00 2001 From: Alexis Mousset Date: Mon, 2 Mar 2015 01:54:16 +0100 Subject: [PATCH] Improve connection reuse --- src/client/mod.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/client/mod.rs b/src/client/mod.rs index 0e37062..b015b14 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -210,7 +210,7 @@ impl Client { } // Connect to the server if needed - if self.stream.is_none() || self.server_info.is_none() { + if self.stream.is_none() { try!(self.connect()); // Extended Hello or Hello if needed @@ -230,7 +230,7 @@ impl Client { } // TODO: Use PLAIN AUTH in encrypted connections, CRAM-MD5 otherwise - if self.credentials.is_some() { + if self.credentials.is_some() && self.state.connection_reuse_count == 0 { let credentials = self.credentials.clone().unwrap(); if self.server_info.as_ref().unwrap().supports_feature(Extension::CramMd5Authentication).is_some() { @@ -270,6 +270,11 @@ impl Client { // Message content let result = self.message(message.as_slice()); + if result.is_ok() { + // Increment the connection reuse counter + self.state.connection_reuse_count = self.state.connection_reuse_count + 1; + } + // Test if we can reuse the existing connection if (!self.configuration.enable_connection_reuse) || (self.state.connection_reuse_count == self.configuration.connection_reuse_count_limit) { @@ -434,11 +439,9 @@ impl Client { /// Sends the message content and close pub fn message(&mut self, message_content: &str) -> SmtpResult { - let result = self.send_server(message_content, MESSAGE_ENDING, [250].iter()); //250 + let result = self.send_server(message_content, MESSAGE_ENDING, [250].iter()); if result.is_ok() { - // Increment the connection reuse counter - self.state.connection_reuse_count = self.state.connection_reuse_count + 1; // Log the message info!("{}: conn_use={}, size={}, status=sent ({})", self.state.current_message.as_ref().unwrap(), self.state.connection_reuse_count, message_content.len(), result.as_ref().ok().unwrap());