in internal/netutil/netutil.go [95:136]
func parseForwarded(f string) forwardedHeader {
// We only consider the first value in the sequence,
// if there are multiple. Disregard everything after
// the first comma.
if comma := strings.IndexRune(f, ','); comma != -1 {
f = f[:comma]
}
var result forwardedHeader
for f != "" {
field := f
if semi := strings.IndexRune(f, ';'); semi != -1 {
field = f[:semi]
f = f[semi+1:]
} else {
f = ""
}
eq := strings.IndexRune(field, '=')
if eq == -1 {
// Malformed field, ignore.
continue
}
key := strings.TrimSpace(field[:eq])
value := strings.TrimSpace(field[eq+1:])
if len(value) > 0 && value[0] == '"' {
var err error
value, err = strconv.Unquote(value)
if err != nil {
// Malformed, ignore
continue
}
}
switch {
case strings.EqualFold(key, "for"):
result.For = value
case strings.EqualFold(key, "host"):
result.Host = value
case strings.EqualFold(key, "proto"):
result.Proto = value
}
}
return result
}