author | Shawn Walker-Salas <shawn.walker@oracle.com> |
Tue, 20 Dec 2016 11:59:29 -0800 | |
changeset 7518 | c388d4e1d3ad |
permissions | -rw-r--r-- |
7518
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
1 |
From 3b6f4b04ba4da9e90e1f28dcd19c0eac78c57170 Mon Sep 17 00:00:00 2001 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
2 |
From: Chris Broadfoot <[email protected]> |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
3 |
Date: Tue, 18 Oct 2016 12:52:26 -0700 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
4 |
Subject: [PATCH 28/38] [release-branch.go1.7] net/http: update bundled http2 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
5 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
6 |
Updates bundled http2 for x/net/http2 git rev d4c55e66 for: |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
7 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
8 |
[release-branch.go1.7] http2: never Read from Request.Body in Transport |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
9 |
to determine ContentLength |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
10 |
https://golang.org/cl/31361 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
11 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
12 |
Updates #17480 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
13 |
Updates #17071 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
14 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
15 |
Change-Id: I2231adaed3cb5b368927a9654dcf7e69a8b664b6 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
16 |
Reviewed-on: https://go-review.googlesource.com/31432 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
17 |
Run-TryBot: Chris Broadfoot <[email protected]> |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
18 |
TryBot-Result: Gobot Gobot <[email protected]> |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
19 |
Reviewed-by: Chris Broadfoot <[email protected]> |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
20 |
--- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
21 |
src/net/http/h2_bundle.go | 33 ++++++++++----------------------- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
22 |
1 file changed, 10 insertions(+), 23 deletions(-) |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
23 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
24 |
diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
25 |
index 80c02d0..063043a 100644 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
26 |
--- a/src/net/http/h2_bundle.go |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
27 |
+++ b/src/net/http/h2_bundle.go |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
28 |
@@ -5448,31 +5448,17 @@ func http2checkConnHeaders(req *Request) error { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
29 |
return nil |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
30 |
} |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
31 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
32 |
-func http2bodyAndLength(req *Request) (body io.Reader, contentLen int64) { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
33 |
- body = req.Body |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
34 |
- if body == nil { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
35 |
- return nil, 0 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
36 |
+// actualContentLength returns a sanitized version of |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
37 |
+// req.ContentLength, where 0 actually means zero (not unknown) and -1 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
38 |
+// means unknown. |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
39 |
+func http2actualContentLength(req *Request) int64 { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
40 |
+ if req.Body == nil { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
41 |
+ return 0 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
42 |
} |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
43 |
if req.ContentLength != 0 { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
44 |
- return req.Body, req.ContentLength |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
45 |
- } |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
46 |
- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
47 |
- // We have a body but a zero content length. Test to see if |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
48 |
- // it's actually zero or just unset. |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
49 |
- var buf [1]byte |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
50 |
- n, rerr := body.Read(buf[:]) |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
51 |
- if rerr != nil && rerr != io.EOF { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
52 |
- return http2errorReader{rerr}, -1 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
53 |
+ return req.ContentLength |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
54 |
} |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
55 |
- if n == 1 { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
56 |
- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
57 |
- if rerr == io.EOF { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
58 |
- return bytes.NewReader(buf[:]), 1 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
59 |
- } |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
60 |
- return io.MultiReader(bytes.NewReader(buf[:]), body), -1 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
61 |
- } |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
62 |
- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
63 |
- return nil, 0 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
64 |
+ return -1 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
65 |
} |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
66 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
67 |
func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
68 |
@@ -5493,8 +5479,9 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) { |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
69 |
return nil, http2errClientConnUnusable |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
70 |
} |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
71 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
72 |
- body, contentLen := http2bodyAndLength(req) |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
73 |
+ body := req.Body |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
74 |
hasBody := body != nil |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
75 |
+ contentLen := http2actualContentLength(req) |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
76 |
|
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
77 |
// TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
78 |
var requestedGzip bool |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
79 |
-- |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
80 |
2.7.4 |
c388d4e1d3ad
PSARC/2016/250 Google Go version 1.7
Shawn Walker-Salas <shawn.walker@oracle.com>
parents:
diff
changeset
|
81 |