MCPcopy Create free account
hub / github.com/celzero/midway / httpHostHeader

Function httpHostHeader

midway/relay/http.go:33–71  ·  view source on GitHub ↗
(br *bufio.Reader)

Source from the content-addressed store, hash-verified

31)
32
33func httpHostHeader(br *bufio.Reader) string {
34 const maxPeek = 4 << 10
35 peekSize := 0
36 for {
37 peekSize++
38 if peekSize > maxPeek {
39 b, _ := br.Peek(br.Buffered())
40 return httpHostHeaderFromBytes(b)
41 }
42 b, err := br.Peek(peekSize)
43 if n := br.Buffered(); n > peekSize {
44 b, _ = br.Peek(n)
45 peekSize = n
46 }
47 if len(b) > 0 {
48 if b[0] < 'A' || b[0] > 'Z' {
49 // Doesn't look like an HTTP verb
50 // (GET, POST, etc).
51 return ""
52 }
53 if bytes.Index(b, crlfcrlf) != -1 || bytes.Index(b, lflf) != -1 {
54 req, err := http.ReadRequest(bufio.NewReader(bytes.NewReader(b)))
55 if err != nil {
56 return ""
57 }
58 if len(req.Header["Host"]) > 1 {
59 // TODO(bradfitz): what does
60 // ReadRequest do if there are
61 // multiple Host headers?
62 return ""
63 }
64 return req.Host
65 }
66 }
67 if err != nil {
68 return httpHostHeaderFromBytes(b)
69 }
70 }
71}
72
73var (
74 lfHostColon = []byte("\nHost:")

Callers 1

NewProxyConnFunction · 0.85

Calls 1

httpHostHeaderFromBytesFunction · 0.85

Tested by

no test coverage detected