package http
import "core:strings"
Header :: struct {
name: string,
value: string,
}
headers_add :: proc(headers: ^[dynamic]Header, name, value: string) {
l_name := strings.to_lower(name)
defer delete(l_name)
l_value := strings.trim_space(value)
append(headers, Header{name = strings.clone(l_name), value = strings.clone(l_value)})
}
headers_get :: proc(headers: []Header, name: string) -> [dynamic]string {
l_name := strings.to_lower(name)
defer delete(l_name)
values := make([dynamic]string, 0, 2)
for h in headers {
if h.name == l_name {
append(&values, h.value)
}
}
return values
}
headers_get_first :: proc(headers: []Header, name: string) -> (string, bool) {
l_name := strings.to_lower(name)
defer delete(l_name)
for h in headers {
if h.name == l_name {
return h.value, true
}
}
return "", false
}
header_has_token :: proc(headers: []Header, name, token: string) -> bool {
v, ok := headers_get_first(headers, name)
if !ok {
return false
}
parts := strings.split(v, ",")
defer delete(parts)
l_token := strings.to_lower(token)
defer delete(l_token)
for p in parts {
l_p := strings.to_lower(strings.trim_space(p))
defer delete(l_p)
if l_p == l_token {
return true
}
}
return false
}