blob: 5632c83ed780f9aa4b670c9a680bb3b84cf8d136 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
use std::net::{IpAddr, SocketAddr, ToSocketAddrs};
pub fn gethostname() -> String {
// PHP's gethostname() wraps gethostname(2). On Linux the kernel exposes the
// same value via /proc; fall back to the HOSTNAME env var, then to "localhost".
std::fs::read_to_string("/proc/sys/kernel/hostname")
.ok()
.map(|s| s.trim().to_string())
.filter(|s| !s.is_empty())
.or_else(|| std::env::var("HOSTNAME").ok().filter(|s| !s.is_empty()))
.unwrap_or_else(|| "localhost".to_string())
}
// Resolves the first IPv4 address for the host name, mirroring PHP's gethostbyname
// which only ever yields an IPv4 record and returns the unmodified host name on
// failure.
pub fn gethostbyname(hostname: &str) -> String {
match (hostname, 0u16).to_socket_addrs() {
Ok(addrs) => addrs
.filter_map(|addr| match addr {
SocketAddr::V4(v4) => Some(v4.ip().to_string()),
SocketAddr::V6(_) => None,
})
.next()
.unwrap_or_else(|| hostname.to_string()),
Err(_) => hostname.to_string(),
}
}
pub fn inet_pton(host: &str) -> Option<Vec<u8>> {
match host.parse::<IpAddr>() {
Ok(IpAddr::V4(v4)) => Some(v4.octets().to_vec()),
Ok(IpAddr::V6(v6)) => Some(v6.octets().to_vec()),
Err(_) => None,
}
}
pub fn http_get_last_response_headers() -> Option<Vec<String>> {
todo!()
}
pub fn http_clear_last_response_headers() {
todo!()
}
|