Fix clippy warnings.
This commit is contained in:
+1
-1
@@ -25,5 +25,5 @@ path = "src/icmpd/main.rs"
|
||||
[dependencies]
|
||||
netutils = { git = "https://github.com/redox-os/netutils.git" }
|
||||
rand = "0.3"
|
||||
redox_event = { path = "../event" }
|
||||
redox_event = { git = "https://github.com/redox-os/event.git" }
|
||||
redox_syscall = "0.1"
|
||||
|
||||
+18
-18
@@ -2,6 +2,15 @@ use error::{PacketResult, PacketError};
|
||||
use netutils::Checksum;
|
||||
use std::mem;
|
||||
|
||||
const ECHO_REQUEST_TYPE: u8 = 8;
|
||||
const ECHO_REQUEST_CODE: u8 = 0;
|
||||
const ECHO_RESPONSE_TYPE: u8 = 0;
|
||||
const ECHO_RESPONSE_CODE: u8 = 0;
|
||||
const UNREACHABLE_TYPE: u8 = 3;
|
||||
const UNREACHABLE_HOST_CODE: u8 = 1;
|
||||
const UNREACHABLE_PROTO_CODE: u8 = 2;
|
||||
const UNREACHABLE_PORT_CODE: u8 = 3;
|
||||
|
||||
#[repr(packed)]
|
||||
pub struct Header {
|
||||
icmp_type: u8,
|
||||
@@ -44,9 +53,7 @@ pub enum PacketKind {
|
||||
|
||||
impl EchoHeader {
|
||||
pub fn new(id: u16) -> EchoHeader {
|
||||
EchoHeader {
|
||||
id: id.to_be(),
|
||||
}
|
||||
EchoHeader { id: id.to_be() }
|
||||
}
|
||||
|
||||
pub fn get_id(&self) -> u16 {
|
||||
@@ -72,7 +79,7 @@ impl<'a> Packet<'a> {
|
||||
} else {
|
||||
let (header_bytes, payload_bytes) = bytes.split_at(mem::size_of::<Header>());
|
||||
let mut packet = Packet {
|
||||
header: unsafe { mem::transmute(header_bytes.as_ptr()) },
|
||||
header: unsafe { &*(header_bytes.as_ptr() as *const Header) },
|
||||
payload: payload_bytes,
|
||||
subheader: SubHeader::None,
|
||||
};
|
||||
@@ -86,8 +93,10 @@ impl<'a> Packet<'a> {
|
||||
}
|
||||
let (echo_header_payload, payload) =
|
||||
packet.payload.split_at(mem::size_of::<EchoHeader>());
|
||||
packet.subheader =
|
||||
SubHeader::Echo(unsafe { mem::transmute(echo_header_payload.as_ptr()) });
|
||||
packet.subheader = SubHeader::Echo(unsafe {
|
||||
&*(echo_header_payload.as_ptr() as
|
||||
*const EchoHeader)
|
||||
});
|
||||
packet.payload = payload;
|
||||
Ok(packet)
|
||||
}
|
||||
@@ -138,7 +147,7 @@ impl<'a> MutPacket<'a> {
|
||||
} else {
|
||||
let (header_bytes, payload_bytes) = bytes.split_at_mut(mem::size_of::<Header>());
|
||||
Ok(MutPacket {
|
||||
header: unsafe { mem::transmute(header_bytes.as_ptr()) },
|
||||
header: unsafe { &mut *(header_bytes.as_ptr() as *mut Header) },
|
||||
payload: payload_bytes,
|
||||
subheader: SubHeader::None,
|
||||
})
|
||||
@@ -159,8 +168,8 @@ impl<'a> MutPacket<'a> {
|
||||
let new_subheader = match *subheader {
|
||||
SubHeader::Echo(echo_sub_header) => {
|
||||
let echo_sub_header_mut: &mut EchoHeader =
|
||||
unsafe { mem::transmute(subheader_bytes.as_ptr()) };
|
||||
*echo_sub_header_mut = echo_sub_header.clone();
|
||||
unsafe { &mut *(subheader_bytes.as_ptr() as *mut EchoHeader) };
|
||||
*echo_sub_header_mut = *echo_sub_header;
|
||||
SubHeader::Echo(echo_sub_header_mut)
|
||||
}
|
||||
SubHeader::None => SubHeader::None,
|
||||
@@ -201,12 +210,3 @@ impl<'a> MutPacket<'a> {
|
||||
mem::size_of::<Header>() + subheader.get_size()
|
||||
}
|
||||
}
|
||||
|
||||
const ECHO_REQUEST_TYPE: u8 = 8;
|
||||
const ECHO_REQUEST_CODE: u8 = 0;
|
||||
const ECHO_RESPONSE_TYPE: u8 = 0;
|
||||
const ECHO_RESPONSE_CODE: u8 = 0;
|
||||
const UNREACHABLE_TYPE: u8 = 3;
|
||||
const UNREACHABLE_HOST_CODE: u8 = 1;
|
||||
const UNREACHABLE_PROTO_CODE: u8 = 2;
|
||||
const UNREACHABLE_PORT_CODE: u8 = 3;
|
||||
|
||||
+26
-20
@@ -64,7 +64,7 @@ impl Icmpd {
|
||||
break;
|
||||
}
|
||||
self.handle(&mut packet);
|
||||
self.scheme_file.write(&packet)?;
|
||||
self.scheme_file.write_all(&packet)?;
|
||||
}
|
||||
Ok(None)
|
||||
}
|
||||
@@ -80,8 +80,10 @@ impl Icmpd {
|
||||
break;
|
||||
}
|
||||
let ip_packet = Ipv4::from_bytes(&packet_buffer[..bytes_readed])
|
||||
.ok_or(Error::from_parsing_error(PacketError::NotEnoughData,
|
||||
"failed to parse ip header"))?;
|
||||
.ok_or_else(|| {
|
||||
Error::from_parsing_error(PacketError::NotEnoughData,
|
||||
"failed to parse ip header")
|
||||
})?;
|
||||
let icmp_packet =
|
||||
Packet::from_bytes(&ip_packet.data)
|
||||
.map_err(|e| Error::from_parsing_error(e, "failed to parse ICMP packet"))?;
|
||||
@@ -107,7 +109,7 @@ impl Icmpd {
|
||||
}
|
||||
|
||||
fn on_echo_response(&mut self, ip_packet: &Ipv4, icmp_packet: &Packet) -> Result<()> {
|
||||
if let &SubHeader::Echo(echo_subheader) = icmp_packet.get_subheader() {
|
||||
if let SubHeader::Echo(echo_subheader) = *icmp_packet.get_subheader() {
|
||||
if let Some(fd_set) = self.echo_ips
|
||||
.get_mut(&Ipv4Addr::from(ip_packet.header.src.bytes)) {
|
||||
for fd in fd_set.iter() {
|
||||
@@ -138,7 +140,7 @@ impl Icmpd {
|
||||
self.handles.insert(fd, handle);
|
||||
self.echo_ips
|
||||
.entry(ip_addr)
|
||||
.or_insert_with(|| HashSet::new())
|
||||
.or_insert_with(HashSet::new)
|
||||
.insert(fd);
|
||||
Ok(fd)
|
||||
}
|
||||
@@ -164,13 +166,17 @@ impl SchemeMut for Icmpd {
|
||||
use std::str::FromStr;
|
||||
|
||||
let path = str::from_utf8(url)
|
||||
.or(Err(syscall::Error::new(syscall::EINVAL)))?;
|
||||
let mut parts = path.split("/");
|
||||
let method = parts.next().ok_or(syscall::Error::new(syscall::EINVAL))?;
|
||||
.or_else(|_| Err(syscall::Error::new(syscall::EINVAL)))?;
|
||||
let mut parts = path.split('/');
|
||||
let method = parts
|
||||
.next()
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EINVAL))?;
|
||||
match method {
|
||||
"echo" => {
|
||||
let addr = parts.next().ok_or(syscall::Error::new(syscall::EINVAL))?;
|
||||
let addr = Ipv4Addr::from_str(&addr)
|
||||
let addr = parts
|
||||
.next()
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EINVAL))?;
|
||||
let addr = Ipv4Addr::from_str(addr)
|
||||
.map_err(|_| syscall::Error::new(syscall::EINVAL))?;
|
||||
self.open_echo(addr, flags)
|
||||
}
|
||||
@@ -182,7 +188,7 @@ impl SchemeMut for Icmpd {
|
||||
let (ip, ip_set) = {
|
||||
let handle = self.handles
|
||||
.get_mut(&fd)
|
||||
.ok_or(syscall::Error::new(syscall::EBADF))?;
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EBADF))?;
|
||||
match handle.handle_type {
|
||||
HandleType::Echo => (handle.ip_addr, &mut self.echo_ips),
|
||||
}
|
||||
@@ -208,15 +214,15 @@ impl SchemeMut for Icmpd {
|
||||
}
|
||||
let handle = self.handles
|
||||
.get_mut(&fd)
|
||||
.ok_or(syscall::Error::new(syscall::EBADF))?;
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EBADF))?;
|
||||
match handle.handle_type {
|
||||
HandleType::Echo => {
|
||||
let echo_request =
|
||||
produce_icmp_packet(handle.ip_addr,
|
||||
PacketKind::EchoRequest,
|
||||
&SubHeader::Echo(&EchoHeader::new(fd as u16)),
|
||||
buf)
|
||||
.map_err(|_| syscall::Error::new(syscall::EPROTO))?;
|
||||
let echo_request = produce_icmp_packet(handle.ip_addr,
|
||||
PacketKind::EchoRequest,
|
||||
&SubHeader::Echo(&EchoHeader::new(fd as
|
||||
u16)),
|
||||
buf)
|
||||
.map_err(|_| syscall::Error::new(syscall::EPROTO))?;
|
||||
self.icmp_file
|
||||
.write(&echo_request)
|
||||
.map_err(|_| syscall::Error::new(syscall::EPROTO))
|
||||
@@ -227,7 +233,7 @@ impl SchemeMut for Icmpd {
|
||||
fn read(&mut self, fd: usize, buf: &mut [u8]) -> syscall::Result<usize> {
|
||||
let handle = self.handles
|
||||
.get_mut(&fd)
|
||||
.ok_or(syscall::Error::new(syscall::EBADF))?;
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EBADF))?;
|
||||
match handle.handle_type {
|
||||
HandleType::Echo => Icmpd::read_echo(handle, buf),
|
||||
}
|
||||
@@ -236,7 +242,7 @@ impl SchemeMut for Icmpd {
|
||||
fn fevent(&mut self, fd: usize, events: usize) -> syscall::Result<usize> {
|
||||
let handle = self.handles
|
||||
.get_mut(&fd)
|
||||
.ok_or(syscall::Error::new(syscall::EBADF))?;
|
||||
.ok_or_else(|| syscall::Error::new(syscall::EBADF))?;
|
||||
handle.events = events;
|
||||
Ok(fd)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user