matrix-wol/src/wol.rs

23 lines
625 B
Rust
Raw Normal View History

2020-10-15 20:05:21 +00:00
use anyhow::{Context, Result};
use std::net::{Ipv4Addr, UdpSocket};
pub(crate) fn wake(host: [u8; 6]) -> Result<()> {
let mut magic_packet = vec![0xffu8; 6];
let mut payload = host
.to_vec()
.iter()
.map(|x| *x)
.cycle()
.take(16 * 6)
.collect::<Vec<_>>();
magic_packet.append(&mut payload);
let socket = UdpSocket::bind((Ipv4Addr::new(0, 0, 0, 0), 0)).context("")?;
socket
.set_broadcast(true)
.context("Couldn't set socket to broadcasting")?;
socket.send_to(&magic_packet[..], (Ipv4Addr::new(255, 255, 255, 255), 9))?;
Ok(())
}