Initial project import

This commit is contained in:
Agila Forge Importer committed 2026-07-13 15:20:32 +00:00
commit 23f2d29e32
11957 files changed
+1754577

No files matched your search

+44
View File
@@ -0,0 +1,44 @@
module net
// validate_port checks whether a port is valid and returns the port or an error.
// The valid ports numbers are between 0 and 0xFFFF.
// For TCP, port number 0 is reserved and cannot be used, while for UDP, the source port
// is optional and a value of zero means no port.
// See also https://en.wikipedia.org/wiki/Port_%28computer_networking%29 .
pub fn validate_port(port int) !u16 {
if port >= 0 && port <= 0xFFFF {
return u16(port)
} else {
return err_port_out_of_range
}
}
// split_address splits an address into its host name and its port
pub fn split_address(addr string) !(string, u16) {
if _ := addr.index(']') {
// ipv6 brackets
address := addr.all_after('[').all_before_last(']')
port := addr.all_after_last(']:').int()
p := validate_port(port)!
return address, p
} else if _ := addr.index('::') {
if addr.count(':') == 2 && addr.all_before_last('::') == '' {
// ipv6 host only `::1`
return addr, 0
} else {
// addr:port, or `::addr:port`
address := addr.all_before_last(':')
port := addr.all_after_last(':').int()
p := validate_port(port)!
return address, p
}
} else if _ := addr.index(':') {
// addr:port
address := addr.all_before_last(':')
p := validate_port(addr.all_after_last(':').int())!
return address, p
} else {
// addr only
return addr, 0
}
}