use expectrl::{
interact::{actions::lookup::Lookup, InteractOptions},
spawn,
stream::stdin::Stdin,
ControlCode, Error, Regex,
};
use std::io::stdout;
#[cfg(not(all(windows, feature = "polling")))]
#[cfg(not(feature = "async"))]
fn main() -> Result<(), Error> {
let mut auth = false;
let mut login_lookup = Lookup::new();
let opts = InteractOptions::new(&mut auth).on_output(|ctx| {
if login_lookup
.on(ctx.buf, ctx.eof, "Login successful")?
.is_some()
{
**ctx.state = true;
return Ok(true);
}
Ok(false)
});
let mut p = spawn("ftp bks4-speedtest-1.tele2.net")?;
let mut stdin = Stdin::open()?;
p.interact(&mut stdin, stdout()).spawn(opts)?;
stdin.close()?;
if !auth {
println!("An authefication was not passed");
return Ok(());
}
p.expect("ftp>")?;
p.send_line("cd upload")?;
p.expect("successfully changed.")?;
p.send_line("pwd")?;
p.expect(Regex("[0-9]+ \"/upload\""))?;
p.send(ControlCode::EndOfTransmission)?;
p.expect("Goodbye.")?;
Ok(())
}
#[cfg(any(all(windows, feature = "polling"), feature = "async"))]
fn main() {}