mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
net/http: simplify ParseHTTPVersion
Removes code. No need for atoi helper. R=golang-dev, adg CC=golang-dev https://golang.org/cl/6285045
This commit is contained in:
parent
947a3ddf87
commit
6b31508e3d
1 changed files with 17 additions and 23 deletions
|
|
@ -19,6 +19,7 @@ import (
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
"net/textproto"
|
"net/textproto"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -369,36 +370,29 @@ func (req *Request) write(w io.Writer, usingProxy bool, extraHeaders Header) err
|
||||||
return bw.Flush()
|
return bw.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert decimal at s[i:len(s)] to integer,
|
|
||||||
// returning value, string position where the digits stopped,
|
|
||||||
// and whether there was a valid number (digits, not too big).
|
|
||||||
func atoi(s string, i int) (n, i1 int, ok bool) {
|
|
||||||
const Big = 1000000
|
|
||||||
if i >= len(s) || s[i] < '0' || s[i] > '9' {
|
|
||||||
return 0, 0, false
|
|
||||||
}
|
|
||||||
n = 0
|
|
||||||
for ; i < len(s) && '0' <= s[i] && s[i] <= '9'; i++ {
|
|
||||||
n = n*10 + int(s[i]-'0')
|
|
||||||
if n > Big {
|
|
||||||
return 0, 0, false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n, i, true
|
|
||||||
}
|
|
||||||
|
|
||||||
// ParseHTTPVersion parses a HTTP version string.
|
// ParseHTTPVersion parses a HTTP version string.
|
||||||
// "HTTP/1.0" returns (1, 0, true).
|
// "HTTP/1.0" returns (1, 0, true).
|
||||||
func ParseHTTPVersion(vers string) (major, minor int, ok bool) {
|
func ParseHTTPVersion(vers string) (major, minor int, ok bool) {
|
||||||
if len(vers) < 5 || vers[0:5] != "HTTP/" {
|
const Big = 1000000 // arbitrary upper bound
|
||||||
|
switch vers {
|
||||||
|
case "HTTP/1.1":
|
||||||
|
return 1, 1, true
|
||||||
|
case "HTTP/1.0":
|
||||||
|
return 1, 0, true
|
||||||
|
}
|
||||||
|
if !strings.HasPrefix(vers, "HTTP/") {
|
||||||
return 0, 0, false
|
return 0, 0, false
|
||||||
}
|
}
|
||||||
major, i, ok := atoi(vers, 5)
|
dot := strings.Index(vers, ".")
|
||||||
if !ok || i >= len(vers) || vers[i] != '.' {
|
if dot < 0 {
|
||||||
return 0, 0, false
|
return 0, 0, false
|
||||||
}
|
}
|
||||||
minor, i, ok = atoi(vers, i+1)
|
major, err := strconv.Atoi(vers[5:dot])
|
||||||
if !ok || i != len(vers) {
|
if err != nil || major < 0 || major > Big {
|
||||||
|
return 0, 0, false
|
||||||
|
}
|
||||||
|
minor, err = strconv.Atoi(vers[dot+1:])
|
||||||
|
if err != nil || minor < 0 || minor > Big {
|
||||||
return 0, 0, false
|
return 0, 0, false
|
||||||
}
|
}
|
||||||
return major, minor, true
|
return major, minor, true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue