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 }