aboutsummaryrefslogtreecommitdiff
path: root/src/tftpd.rs
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2019-03-10 15:10:46 +0100
committerReiner Herrmann <reiner@reiner-h.de>2019-03-10 15:10:46 +0100
commitd2ace614a1bfa8643889b49852b38f13b25a6e64 (patch)
tree35b6cbd5eca7d368b4deb2ccdbc8990f51527496 /src/tftpd.rs
parenta6fd3c9eac2339a6edbc1bfbb64109ce9fc72027 (diff)
Implement netascii transfer mode (in server, client and for tsize option)
Diffstat (limited to 'src/tftpd.rs')
-rw-r--r--src/tftpd.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/tftpd.rs b/src/tftpd.rs
index 024b105..ecb9b37 100644
--- a/src/tftpd.rs
+++ b/src/tftpd.rs
@@ -92,7 +92,8 @@ impl Tftpd {
self.tftp.init_tftp_options(&socket, &mut options)?;
match mode.as_ref() {
- "octet" => (),
+ "octet" => self.tftp.set_mode(rtftp::Mode::OCTET),
+ "netascii" => self.tftp.set_mode(rtftp::Mode::NETASCII),
_ => {
self.tftp.send_error(&socket, 0, "Unsupported mode")?;
return Err(io::Error::new(io::ErrorKind::Other, "unsupported mode"));
@@ -138,7 +139,8 @@ impl Tftpd {
self.tftp.init_tftp_options(&socket, &mut options)?;
match mode.as_ref() {
- "octet" => (),
+ "octet" => self.tftp.set_mode(rtftp::Mode::OCTET),
+ "netascii" => self.tftp.set_mode(rtftp::Mode::NETASCII),
_ => {
self.tftp.send_error(&socket, 0, "Unsupported mode")?;
return Err(io::Error::new(io::ErrorKind::Other, "unsupported mode"));
@@ -173,7 +175,7 @@ impl Tftpd {
}
if let Some(opt) = options.get_mut("tsize") {
- *opt = file.metadata()?.len().to_string();
+ *opt = self.tftp.transfersize(&mut file)?.to_string();
}
self.tftp.ack_options(&socket, &options, true)?;
match self.tftp.send_file(&socket, &mut file) {
@@ -191,7 +193,7 @@ impl Tftpd {
socket.connect(cl)?;
match u16::from_be_bytes([buf[0], buf[1]]) { // opcode
- o if o == rtftp::Opcodes::RRQ as u16 => {
+ o if o == rtftp::Opcode::RRQ as u16 => {
if self.conf.wo {
self.tftp.send_error(&socket, 4, "reading not allowed")?;
Err(io::Error::new(io::ErrorKind::Other, "unallowed mode"))
@@ -199,7 +201,7 @@ impl Tftpd {
self.handle_rrq(&socket, &cl, &buf[2..])
}
}
- o if o == rtftp::Opcodes::WRQ as u16 => {
+ o if o == rtftp::Opcode::WRQ as u16 => {
if self.conf.ro {
self.tftp.send_error(&socket, 4, "writing not allowed")?;
Err(io::Error::new(io::ErrorKind::Other, "unallowed mode"))
@@ -207,7 +209,7 @@ impl Tftpd {
self.handle_wrq(&socket, &cl, &buf[2..])
}
}
- o if o == rtftp::Opcodes::ERROR as u16 => Ok(format!("Received ERROR from {}", cl)),
+ o if o == rtftp::Opcode::ERROR as u16 => Ok(format!("Received ERROR from {}", cl)),
_ => {
self.tftp.send_error(&socket, 4, "Unexpected opcode")?;
Err(io::Error::new(io::ErrorKind::Other, "unexpected opcode"))