43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package http
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"golang_org/x/net/lex/httplex"
|
|
)
|
|
|
|
// maxInt64 is the effective "infinite" value for the Server and
|
|
// Transport's byte-limiting readers.
|
|
const maxInt64 = 1<<63 - 1
|
|
|
|
// TODO(bradfitz): move common stuff here. The other files have accumulated
|
|
// generic http stuff in random places.
|
|
|
|
// contextKey is a value for use with context.WithValue. It's used as
|
|
// a pointer so it fits in an interface{} without allocation.
|
|
type contextKey struct {
|
|
name string
|
|
}
|
|
|
|
func (k *contextKey) String() string { return "net/http context value " + k.name }
|
|
|
|
// Given a string of the form "host", "host:port", or "[ipv6::address]:port",
|
|
// return true if the string includes a port.
|
|
func hasPort(s string) bool { return strings.LastIndex(s, ":") > strings.LastIndex(s, "]") }
|
|
|
|
// removeEmptyPort strips the empty port in ":port" to ""
|
|
// as mandated by RFC 3986 Section 6.2.3.
|
|
func removeEmptyPort(host string) string {
|
|
if hasPort(host) {
|
|
return strings.TrimSuffix(host, ":")
|
|
}
|
|
return host
|
|
}
|
|
|
|
func isNotToken(r rune) bool {
|
|
return !httplex.IsTokenRune(r)
|
|
}
|