use std::net::{TcpListener, TcpStream};
use std::path::Path;
use std::fs::File;
use std::io::{Write, Read};
use std::io::prelude::*;
pub enum FTP {
Normal(String, File),
Secure(String, File),
}
impl FTP {
pub fn new(ip_addr: &str, file: File) -> FTP {
let ip_addr = String::from(ip_addr);
FTP::Normal(ip_addr, file)
}
pub fn send(self) {
let mut buffer = Vec::new();
let (ip, mut file) = self.get_ip_file();
let mut stream = TcpStream::connect(ip).unwrap();
file.read_to_end(&mut buffer).unwrap();
stream.write_all(&buffer).unwrap();
}
pub fn recv(self) {
let mut buffer = Vec::new();
let (ip, mut file) = self.get_ip_file();
let listener = TcpListener::bind(ip).unwrap();
for stream in listener.incoming() {
let num = stream.unwrap().read_to_end(&mut buffer).unwrap();
file.write_all(&buffer[..num]).unwrap();
}
}
fn get_ip_file(self) -> (String, File) {
match self {
FTP::Normal(ip, file) => return (ip, file),
FTP::Secure(ip, file) => return (ip, file)
}
}
}