refactor out packet-building, test

This commit is contained in:
lesnyrumcajs 2019-02-04 23:24:21 +01:00
parent 04766c94c1
commit cdc20fb59a

View File

@ -16,6 +16,7 @@ use std::net::{SocketAddr, ToSocketAddrs, UdpSocket};
const MAC_SIZE: usize = 6; const MAC_SIZE: usize = 6;
const MAC_PER_MAGIC: usize = 16; const MAC_PER_MAGIC: usize = 16;
static HEADER: [u8; 6] = [0xFF; 6];
/// Wake-on-LAN packet /// Wake-on-LAN packet
pub struct WolPacket { pub struct WolPacket {
@ -31,13 +32,7 @@ impl WolPacket {
/// let wol = wakey::WolPacket::from_bytes(&vec![0x00, 0x01, 0x02, 0x03, 0x04, 0x05]); /// let wol = wakey::WolPacket::from_bytes(&vec![0x00, 0x01, 0x02, 0x03, 0x04, 0x05]);
/// ``` /// ```
pub fn from_bytes(mac: &[u8]) -> WolPacket { pub fn from_bytes(mac: &[u8]) -> WolPacket {
static HEADER: [u8; 6] = [0xFF; 6]; WolPacket { packet: WolPacket::create_packet_bytes(mac) }
let mut packet = Vec::with_capacity(HEADER.len() + MAC_SIZE * MAC_PER_MAGIC);
packet.extend(HEADER.iter());
packet.extend(WolPacket::extend_mac(mac));
WolPacket { packet }
} }
/// Creates WOL packet from string MAC representation (e.x. 00:01:02:03:04:05) /// Creates WOL packet from string MAC representation (e.x. 00:01:02:03:04:05)
@ -101,6 +96,16 @@ impl WolPacket {
.cloned() .cloned()
.collect() .collect()
} }
/// Creates bytes of the magic packet from MAC address
fn create_packet_bytes(mac: &[u8]) -> Vec<u8> {
let mut packet = Vec::with_capacity(HEADER.len() + MAC_SIZE * MAC_PER_MAGIC);
packet.extend(HEADER.iter());
packet.extend(WolPacket::extend_mac(mac));
packet
}
} }
#[cfg(test)] #[cfg(test)]
@ -136,4 +141,12 @@ mod tests {
let mac = "01002:03:04:05:06"; let mac = "01002:03:04:05:06";
super::WolPacket::mac_to_byte(mac, ':'); super::WolPacket::mac_to_byte(mac, ':');
} }
#[test]
fn create_packet_bytes_test() {
let bytes = super::WolPacket::create_packet_bytes(&[0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
assert_eq!(bytes.len(), super::MAC_SIZE * super::MAC_PER_MAGIC + super::HEADER.len());
assert!(bytes.iter().all(|&x| x == 0xFF));
}
} }