Merge pull request #187 from amousset/fix-message-streaming
fix(transport): Fix message streaming
This commit is contained in:
@@ -201,19 +201,22 @@ impl<S: Connector + Write + Read + Timeout + Debug> Client<S> {
|
|||||||
|
|
||||||
/// Sends the message content
|
/// Sends the message content
|
||||||
pub fn message<T: Read>(&mut self, mut message: Box<T>) -> SmtpResult {
|
pub fn message<T: Read>(&mut self, mut message: Box<T>) -> SmtpResult {
|
||||||
let mut in_buf: Vec<u8> = vec![];
|
|
||||||
let mut out_buf: Vec<u8> = vec![];
|
let mut out_buf: Vec<u8> = vec![];
|
||||||
|
|
||||||
let mut codec = ClientCodec::new();
|
let mut codec = ClientCodec::new();
|
||||||
let mut message_reader = BufReader::new(message.as_mut());
|
let mut message_reader = BufReader::new(message.as_mut());
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
in_buf.clear();
|
|
||||||
out_buf.clear();
|
out_buf.clear();
|
||||||
match message_reader.read(&mut in_buf)? {
|
|
||||||
0 => break,
|
let consumed = match message_reader.fill_buf() {
|
||||||
_ => codec.encode(in_buf.as_slice(), &mut out_buf)?,
|
Ok(bytes) => { codec.encode(bytes, &mut out_buf)?; bytes.len() },
|
||||||
|
Err(ref err) => panic!("Failed with: {}", err)
|
||||||
};
|
};
|
||||||
|
message_reader.consume(consumed);
|
||||||
|
|
||||||
|
if consumed == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
self.write_server(out_buf.as_slice())?;
|
self.write_server(out_buf.as_slice())?;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user