Fix var swapping in finalize_message
This commit is contained in:
		
							parent
							
								
									263dbda46a
								
							
						
					
					
						commit
						543f56d904
					
				
							
								
								
									
										29
									
								
								src/smtp.rs
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								src/smtp.rs
									
									
									
									
									
								
							@ -1,4 +1,5 @@
 | 
				
			|||||||
use std::io::{BufRead, BufReader, Write};
 | 
					use std::io::{BufRead, BufReader, Write};
 | 
				
			||||||
 | 
					use std::mem;
 | 
				
			||||||
use std::net::{TcpListener, TcpStream};
 | 
					use std::net::{TcpListener, TcpStream};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub fn start_server() {
 | 
					pub fn start_server() {
 | 
				
			||||||
@ -12,7 +13,13 @@ pub fn start_server() {
 | 
				
			|||||||
                let reader = BufReader::new(tcp_stream.try_clone().unwrap());
 | 
					                let reader = BufReader::new(tcp_stream.try_clone().unwrap());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                let mut connection = Connection::new();
 | 
					                let mut connection = Connection::new();
 | 
				
			||||||
                let _ = connection.handle(tcp_stream, reader);
 | 
					                if let Err(e) = connection.handle(tcp_stream, reader) {
 | 
				
			||||||
 | 
					                    eprintln!("System error: {}", e)
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    for mail in connection.messages {
 | 
				
			||||||
 | 
					                        println!("Mail from {} for {}\n{}", mail.sender, mail.recipients.join(", "), mail.data.unwrap_or("<empty>".to_string()))
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            Err(e) => {
 | 
					            Err(e) => {
 | 
				
			||||||
                eprintln!("Failed to accept connection: {}", e)
 | 
					                eprintln!("Failed to accept connection: {}", e)
 | 
				
			||||||
@ -102,14 +109,14 @@ impl Connection {
 | 
				
			|||||||
                send(&mut writer, out)?;
 | 
					                send(&mut writer, out)?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if out == MSG_BYE {
 | 
					                if out == MSG_BYE {
 | 
				
			||||||
                    break
 | 
					                    break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            line.clear()
 | 
					            line.clear()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return Ok(())
 | 
					        return Ok(());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn handle_line(&mut self, line: &String) -> Result<Option<&str>, &'static str> {
 | 
					    fn handle_line(&mut self, line: &String) -> Result<Option<&str>, &'static str> {
 | 
				
			||||||
@ -147,7 +154,7 @@ impl Connection {
 | 
				
			|||||||
            ConnectionState::Data => {
 | 
					            ConnectionState::Data => {
 | 
				
			||||||
                if line.trim_end() == CMD_DOT {
 | 
					                if line.trim_end() == CMD_DOT {
 | 
				
			||||||
                    self.state = ConnectionState::Done;
 | 
					                    self.state = ConnectionState::Done;
 | 
				
			||||||
                    return Ok(Some(MSG_OK))
 | 
					                    return Ok(Some(MSG_OK));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                return match self.current_message {
 | 
					                return match self.current_message {
 | 
				
			||||||
@ -163,18 +170,17 @@ impl Connection {
 | 
				
			|||||||
                    _ => {
 | 
					                    _ => {
 | 
				
			||||||
                        Err(MSG_FAIL)
 | 
					                        Err(MSG_FAIL)
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                };
 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            ConnectionState::Done => {
 | 
					            ConnectionState::Done => {
 | 
				
			||||||
                if line.starts_with(CMD_QUIT) {
 | 
					                if line.starts_with(CMD_QUIT) {
 | 
				
			||||||
                    self.finalize_mail();
 | 
					                    self.finalize_mail();
 | 
				
			||||||
                    return Ok(Some(MSG_BYE))
 | 
					                    return Ok(Some(MSG_BYE));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if line.starts_with(CMD_MAIL_FROM) {
 | 
					                if line.starts_with(CMD_MAIL_FROM) {
 | 
				
			||||||
                    self.finalize_mail();
 | 
					                    self.finalize_mail();
 | 
				
			||||||
                    return Ok(Some(MSG_OK))
 | 
					                    return Ok(Some(MSG_OK));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -183,9 +189,10 @@ impl Connection {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn finalize_mail(&mut self) {
 | 
					    fn finalize_mail(&mut self) {
 | 
				
			||||||
        if let Some(mail) = &self.current_message {
 | 
					        let current_message = mem::replace(&mut self.current_message, None);
 | 
				
			||||||
            self.current_message = None;
 | 
					
 | 
				
			||||||
            self.messages.push(*mail)
 | 
					        if let Some(mail) = current_message {
 | 
				
			||||||
 | 
					            self.messages.push(mail)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user