2011-08-15 16:54:02 -07:00
|
|
|
import str;
|
2011-08-15 16:38:23 -07:00
|
|
|
import vec;
|
2011-08-15 16:54:02 -07:00
|
|
|
import uint;
|
|
|
|
|
|
|
|
|
|
tag ip_addr {
|
|
|
|
|
ipv4(u8, u8, u8, u8);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn format_addr(ip : ip_addr) -> str {
|
|
|
|
|
alt(ip) {
|
|
|
|
|
ipv4(a, b, c, d) {
|
|
|
|
|
#fmt("%u.%u.%u.%u",
|
|
|
|
|
a as uint,
|
|
|
|
|
b as uint,
|
|
|
|
|
c as uint,
|
|
|
|
|
d as uint)
|
|
|
|
|
}
|
|
|
|
|
_ { fail "Unsupported address type"; }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn parse_addr(ip : str) -> ip_addr {
|
2011-08-15 16:38:23 -07:00
|
|
|
let parts = vec::map(uint::from_str, str::split(ip, ".".(0)));
|
|
|
|
|
if vec::len(parts) != 4u { fail "Too many dots in IP address"; }
|
2011-08-15 16:54:02 -07:00
|
|
|
for i in parts { if i > 255u { fail "Invalid IP Address part."; } }
|
|
|
|
|
ipv4(parts.(0) as u8,
|
|
|
|
|
parts.(1) as u8,
|
|
|
|
|
parts.(2) as u8,
|
|
|
|
|
parts.(3) as u8)
|
|
|
|
|
}
|