1pub const X_FORWARDED_FOR: &str = "x-forwarded-for";
8
9pub const X_REAL_IP: &str = "x-real-ip";
11
12pub const FORWARDED: &str = "forwarded";
14
15pub const CONTENT_TYPE: &str = "content-type";
17
18pub const HOST: &str = "host";
20
21pub const CONTENT_LENGTH: &str = "content-length";
23
24pub const CONNECTION: &str = "connection";
26
27pub const KEEP_ALIVE: &str = "keep-alive";
29
30pub const PROXY_AUTHENTICATE: &str = "proxy-authenticate";
32
33pub const PROXY_AUTHORIZATION: &str = "proxy-authorization";
35
36pub const TE: &str = "te";
38
39pub const TRAILERS: &str = "trailers";
41
42pub const TRANSFER_ENCODING: &str = "transfer-encoding";
44
45pub const UPGRADE: &str = "upgrade";
47
48pub const HOP_BY_HOP_HEADERS: &[&str] = &[
50 CONNECTION,
51 KEEP_ALIVE,
52 PROXY_AUTHENTICATE,
53 PROXY_AUTHORIZATION,
54 TE,
55 TRAILERS,
56 TRANSFER_ENCODING,
57 UPGRADE,
58];
59
60pub fn is_hop_by_hop(header_name: &str) -> bool {
80 HOP_BY_HOP_HEADERS.contains(&header_name)
81}
82
83#[cfg(test)]
84mod tests {
85 use super::*;
86
87 #[test]
88 fn test_hop_by_hop_headers() {
89 assert!(is_hop_by_hop(CONNECTION));
90 assert!(is_hop_by_hop(KEEP_ALIVE));
91 assert!(is_hop_by_hop(PROXY_AUTHENTICATE));
92 assert!(is_hop_by_hop(PROXY_AUTHORIZATION));
93 assert!(is_hop_by_hop(TE));
94 assert!(is_hop_by_hop(TRAILERS));
95 assert!(is_hop_by_hop(TRANSFER_ENCODING));
96 assert!(is_hop_by_hop(UPGRADE));
97 }
98
99 #[test]
100 fn test_not_hop_by_hop_headers() {
101 assert!(!is_hop_by_hop(CONTENT_TYPE));
102 assert!(!is_hop_by_hop(HOST));
103 assert!(!is_hop_by_hop(CONTENT_LENGTH));
104 assert!(!is_hop_by_hop(X_FORWARDED_FOR));
105 assert!(!is_hop_by_hop(X_REAL_IP));
106 assert!(!is_hop_by_hop(FORWARDED));
107 assert!(!is_hop_by_hop("authorization"));
108 assert!(!is_hop_by_hop("accept"));
109 }
110
111 #[test]
112 fn test_header_constants_lowercase() {
113 assert_eq!(X_FORWARDED_FOR, X_FORWARDED_FOR.to_lowercase());
115 assert_eq!(X_REAL_IP, X_REAL_IP.to_lowercase());
116 assert_eq!(FORWARDED, FORWARDED.to_lowercase());
117 assert_eq!(CONTENT_TYPE, CONTENT_TYPE.to_lowercase());
118 assert_eq!(HOST, HOST.to_lowercase());
119 assert_eq!(CONTENT_LENGTH, CONTENT_LENGTH.to_lowercase());
120 }
121}