Merge pull request #7774 from thaJeztah/bump_golang_net
vendor: golang.org/x/net v0.4.0
This commit is contained in:
		
							
								
								
									
										8
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								go.mod
									
									
									
									
									
								
							| @@ -68,7 +68,7 @@ require ( | ||||
| 	go.opentelemetry.io/otel/sdk v1.11.1 | ||||
| 	go.opentelemetry.io/otel/trace v1.11.1 | ||||
| 	golang.org/x/sync v0.1.0 | ||||
| 	golang.org/x/sys v0.2.0 | ||||
| 	golang.org/x/sys v0.3.0 | ||||
| 	google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd | ||||
| 	google.golang.org/grpc v1.50.1 | ||||
| 	google.golang.org/protobuf v1.28.1 | ||||
| @@ -124,10 +124,10 @@ require ( | ||||
| 	go.opentelemetry.io/proto/otlp v0.19.0 // indirect | ||||
| 	golang.org/x/crypto v0.1.0 // indirect | ||||
| 	golang.org/x/mod v0.6.0 // indirect | ||||
| 	golang.org/x/net v0.1.1-0.20221027164007-c63010009c80 // indirect | ||||
| 	golang.org/x/net v0.4.0 // indirect | ||||
| 	golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect | ||||
| 	golang.org/x/term v0.1.0 // indirect | ||||
| 	golang.org/x/text v0.4.0 // indirect | ||||
| 	golang.org/x/term v0.3.0 // indirect | ||||
| 	golang.org/x/text v0.5.0 // indirect | ||||
| 	golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect | ||||
| 	golang.org/x/tools v0.2.0 // indirect | ||||
| 	google.golang.org/appengine v1.6.7 // indirect | ||||
|   | ||||
							
								
								
									
										16
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1136,8 +1136,8 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx | ||||
| golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= | ||||
| golang.org/x/net v0.1.1-0.20221027164007-c63010009c80 h1:CtRWmqbiPSOXwJV1JoY7pWiTx2xzVKQ813bvU+Y/9jI= | ||||
| golang.org/x/net v0.1.1-0.20221027164007-c63010009c80/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= | ||||
| golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= | ||||
| golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| @@ -1266,14 +1266,14 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc | ||||
| golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= | ||||
| golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= | ||||
| golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw= | ||||
| golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= | ||||
| golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= | ||||
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| @@ -1283,8 +1283,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||
| golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= | ||||
| golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= | ||||
| golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
|   | ||||
| @@ -16,7 +16,7 @@ require ( | ||||
| 	github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb | ||||
| 	github.com/sirupsen/logrus v1.9.0 | ||||
| 	github.com/stretchr/testify v1.8.0 | ||||
| 	golang.org/x/sys v0.2.0 | ||||
| 	golang.org/x/sys v0.3.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| @@ -55,9 +55,9 @@ require ( | ||||
| 	go.opentelemetry.io/otel v1.11.1 // indirect | ||||
| 	go.opentelemetry.io/otel/trace v1.11.1 // indirect | ||||
| 	golang.org/x/mod v0.6.0 // indirect | ||||
| 	golang.org/x/net v0.1.1-0.20221027164007-c63010009c80 // indirect | ||||
| 	golang.org/x/net v0.4.0 // indirect | ||||
| 	golang.org/x/sync v0.1.0 // indirect | ||||
| 	golang.org/x/text v0.4.0 // indirect | ||||
| 	golang.org/x/text v0.5.0 // indirect | ||||
| 	golang.org/x/tools v0.2.0 // indirect | ||||
| 	google.golang.org/genproto v0.0.0-20221107162902-2d387536bcdd // indirect | ||||
| 	google.golang.org/grpc v1.50.1 // indirect | ||||
|   | ||||
| @@ -1221,8 +1221,9 @@ golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfS | ||||
| golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | ||||
| golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= | ||||
| golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= | ||||
| golang.org/x/net v0.1.1-0.20221027164007-c63010009c80 h1:CtRWmqbiPSOXwJV1JoY7pWiTx2xzVKQ813bvU+Y/9jI= | ||||
| golang.org/x/net v0.1.1-0.20221027164007-c63010009c80/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= | ||||
| golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= | ||||
| golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= | ||||
| golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||||
| golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= | ||||
| @@ -1376,11 +1377,13 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc | ||||
| golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= | ||||
| golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= | ||||
| golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= | ||||
| golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= | ||||
| golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= | ||||
| golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= | ||||
| golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||||
| @@ -1391,8 +1394,9 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= | ||||
| golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= | ||||
| golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= | ||||
| golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= | ||||
| golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= | ||||
| golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
| golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||||
|   | ||||
							
								
								
									
										18
									
								
								vendor/golang.org/x/net/http2/headermap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/golang.org/x/net/http2/headermap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -27,7 +27,14 @@ func buildCommonHeaderMaps() { | ||||
| 		"accept-language", | ||||
| 		"accept-ranges", | ||||
| 		"age", | ||||
| 		"access-control-allow-credentials", | ||||
| 		"access-control-allow-headers", | ||||
| 		"access-control-allow-methods", | ||||
| 		"access-control-allow-origin", | ||||
| 		"access-control-expose-headers", | ||||
| 		"access-control-max-age", | ||||
| 		"access-control-request-headers", | ||||
| 		"access-control-request-method", | ||||
| 		"allow", | ||||
| 		"authorization", | ||||
| 		"cache-control", | ||||
| @@ -53,6 +60,7 @@ func buildCommonHeaderMaps() { | ||||
| 		"link", | ||||
| 		"location", | ||||
| 		"max-forwards", | ||||
| 		"origin", | ||||
| 		"proxy-authenticate", | ||||
| 		"proxy-authorization", | ||||
| 		"range", | ||||
| @@ -68,6 +76,8 @@ func buildCommonHeaderMaps() { | ||||
| 		"vary", | ||||
| 		"via", | ||||
| 		"www-authenticate", | ||||
| 		"x-forwarded-for", | ||||
| 		"x-forwarded-proto", | ||||
| 	} | ||||
| 	commonLowerHeader = make(map[string]string, len(common)) | ||||
| 	commonCanonHeader = make(map[string]string, len(common)) | ||||
| @@ -85,3 +95,11 @@ func lowerHeader(v string) (lower string, ascii bool) { | ||||
| 	} | ||||
| 	return asciiToLower(v) | ||||
| } | ||||
|  | ||||
| func canonicalHeader(v string) string { | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| 	if s, ok := commonCanonHeader[v]; ok { | ||||
| 		return s | ||||
| 	} | ||||
| 	return http.CanonicalHeaderKey(v) | ||||
| } | ||||
|   | ||||
							
								
								
									
										5
									
								
								vendor/golang.org/x/net/http2/hpack/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/golang.org/x/net/http2/hpack/encode.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -116,6 +116,11 @@ func (e *Encoder) SetMaxDynamicTableSize(v uint32) { | ||||
| 	e.dynTab.setMaxSize(v) | ||||
| } | ||||
|  | ||||
| // MaxDynamicTableSize returns the current dynamic header table size. | ||||
| func (e *Encoder) MaxDynamicTableSize() (v uint32) { | ||||
| 	return e.dynTab.maxSize | ||||
| } | ||||
|  | ||||
| // SetMaxDynamicTableSizeLimit changes the maximum value that can be | ||||
| // specified in SetMaxDynamicTableSize to v. By default, it is set to | ||||
| // 4096, which is the same size of the default dynamic header table | ||||
|   | ||||
							
								
								
									
										206
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										206
									
								
								vendor/golang.org/x/net/http2/server.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -98,6 +98,19 @@ type Server struct { | ||||
| 	// the HTTP/2 spec's recommendations. | ||||
| 	MaxConcurrentStreams uint32 | ||||
|  | ||||
| 	// MaxDecoderHeaderTableSize optionally specifies the http2 | ||||
| 	// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It | ||||
| 	// informs the remote endpoint of the maximum size of the header compression | ||||
| 	// table used to decode header blocks, in octets. If zero, the default value | ||||
| 	// of 4096 is used. | ||||
| 	MaxDecoderHeaderTableSize uint32 | ||||
|  | ||||
| 	// MaxEncoderHeaderTableSize optionally specifies an upper limit for the | ||||
| 	// header compression table used for encoding request headers. Received | ||||
| 	// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero, | ||||
| 	// the default value of 4096 is used. | ||||
| 	MaxEncoderHeaderTableSize uint32 | ||||
|  | ||||
| 	// MaxReadFrameSize optionally specifies the largest frame | ||||
| 	// this server is willing to read. A valid value is between | ||||
| 	// 16k and 16M, inclusive. If zero or otherwise invalid, a | ||||
| @@ -170,6 +183,20 @@ func (s *Server) maxConcurrentStreams() uint32 { | ||||
| 	return defaultMaxStreams | ||||
| } | ||||
|  | ||||
| func (s *Server) maxDecoderHeaderTableSize() uint32 { | ||||
| 	if v := s.MaxDecoderHeaderTableSize; v > 0 { | ||||
| 		return v | ||||
| 	} | ||||
| 	return initialHeaderTableSize | ||||
| } | ||||
|  | ||||
| func (s *Server) maxEncoderHeaderTableSize() uint32 { | ||||
| 	if v := s.MaxEncoderHeaderTableSize; v > 0 { | ||||
| 		return v | ||||
| 	} | ||||
| 	return initialHeaderTableSize | ||||
| } | ||||
|  | ||||
| // maxQueuedControlFrames is the maximum number of control frames like | ||||
| // SETTINGS, PING and RST_STREAM that will be queued for writing before | ||||
| // the connection is closed to prevent memory exhaustion attacks. | ||||
| @@ -394,7 +421,6 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { | ||||
| 		advMaxStreams:               s.maxConcurrentStreams(), | ||||
| 		initialStreamSendWindowSize: initialWindowSize, | ||||
| 		maxFrameSize:                initialMaxFrameSize, | ||||
| 		headerTableSize:             initialHeaderTableSize, | ||||
| 		serveG:                      newGoroutineLock(), | ||||
| 		pushEnabled:                 true, | ||||
| 		sawClientPreface:            opts.SawClientPreface, | ||||
| @@ -424,12 +450,13 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { | ||||
| 	sc.flow.add(initialWindowSize) | ||||
| 	sc.inflow.add(initialWindowSize) | ||||
| 	sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) | ||||
| 	sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize()) | ||||
|  | ||||
| 	fr := NewFramer(sc.bw, c) | ||||
| 	if s.CountError != nil { | ||||
| 		fr.countError = s.CountError | ||||
| 	} | ||||
| 	fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil) | ||||
| 	fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil) | ||||
| 	fr.MaxHeaderListSize = sc.maxHeaderListSize() | ||||
| 	fr.SetMaxReadFrameSize(s.maxReadFrameSize()) | ||||
| 	sc.framer = fr | ||||
| @@ -559,9 +586,9 @@ type serverConn struct { | ||||
| 	streams                     map[uint32]*stream | ||||
| 	initialStreamSendWindowSize int32 | ||||
| 	maxFrameSize                int32 | ||||
| 	headerTableSize             uint32 | ||||
| 	peerMaxHeaderListSize       uint32            // zero means unknown (default) | ||||
| 	canonHeader                 map[string]string // http2-lower-case -> Go-Canonical-Case | ||||
| 	canonHeaderKeysSize         int               // canonHeader keys size in bytes | ||||
| 	writingFrame                bool              // started writing a frame (on serve goroutine or separate) | ||||
| 	writingFrameAsync           bool              // started a frame on its own goroutine but haven't heard back on wroteFrameCh | ||||
| 	needsFrameFlush             bool              // last frame write wasn't a flush | ||||
| @@ -622,7 +649,9 @@ type stream struct { | ||||
| 	resetQueued      bool        // RST_STREAM queued for write; set by sc.resetStream | ||||
| 	gotTrailerHeader bool        // HEADER frame for trailers was seen | ||||
| 	wroteHeaders     bool        // whether we wrote headers (not status 100) | ||||
| 	readDeadline     *time.Timer // nil if unused | ||||
| 	writeDeadline    *time.Timer // nil if unused | ||||
| 	closeErr         error       // set before cw is closed | ||||
|  | ||||
| 	trailer    http.Header // accumulated trailers | ||||
| 	reqTrailer http.Header // handler's Request.Trailer | ||||
| @@ -738,6 +767,13 @@ func (sc *serverConn) condlogf(err error, format string, args ...interface{}) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // maxCachedCanonicalHeadersKeysSize is an arbitrarily-chosen limit on the size | ||||
| // of the entries in the canonHeader cache. | ||||
| // This should be larger than the size of unique, uncommon header keys likely to | ||||
| // be sent by the peer, while not so high as to permit unreasonable memory usage | ||||
| // if the peer sends an unbounded number of unique header keys. | ||||
| const maxCachedCanonicalHeadersKeysSize = 2048 | ||||
|  | ||||
| func (sc *serverConn) canonicalHeader(v string) string { | ||||
| 	sc.serveG.check() | ||||
| 	buildCommonHeaderMapsOnce() | ||||
| @@ -753,14 +789,10 @@ func (sc *serverConn) canonicalHeader(v string) string { | ||||
| 		sc.canonHeader = make(map[string]string) | ||||
| 	} | ||||
| 	cv = http.CanonicalHeaderKey(v) | ||||
| 	// maxCachedCanonicalHeaders is an arbitrarily-chosen limit on the number of | ||||
| 	// entries in the canonHeader cache. This should be larger than the number | ||||
| 	// of unique, uncommon header keys likely to be sent by the peer, while not | ||||
| 	// so high as to permit unreasonable memory usage if the peer sends an unbounded | ||||
| 	// number of unique header keys. | ||||
| 	const maxCachedCanonicalHeaders = 32 | ||||
| 	if len(sc.canonHeader) < maxCachedCanonicalHeaders { | ||||
| 	size := 100 + len(v)*2 // 100 bytes of map overhead + key + value | ||||
| 	if sc.canonHeaderKeysSize+size <= maxCachedCanonicalHeadersKeysSize { | ||||
| 		sc.canonHeader[v] = cv | ||||
| 		sc.canonHeaderKeysSize += size | ||||
| 	} | ||||
| 	return cv | ||||
| } | ||||
| @@ -862,6 +894,7 @@ func (sc *serverConn) serve() { | ||||
| 			{SettingMaxFrameSize, sc.srv.maxReadFrameSize()}, | ||||
| 			{SettingMaxConcurrentStreams, sc.advMaxStreams}, | ||||
| 			{SettingMaxHeaderListSize, sc.maxHeaderListSize()}, | ||||
| 			{SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()}, | ||||
| 			{SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())}, | ||||
| 		}, | ||||
| 	}) | ||||
| @@ -869,7 +902,9 @@ func (sc *serverConn) serve() { | ||||
|  | ||||
| 	// Each connection starts with initialWindowSize inflow tokens. | ||||
| 	// If a higher value is configured, we add more tokens. | ||||
| 	sc.sendWindowUpdate(nil) | ||||
| 	if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 { | ||||
| 		sc.sendWindowUpdate(nil, int(diff)) | ||||
| 	} | ||||
|  | ||||
| 	if err := sc.readPreface(); err != nil { | ||||
| 		sc.condlogf(err, "http2: server: error reading preface from client %v: %v", sc.conn.RemoteAddr(), err) | ||||
| @@ -946,6 +981,8 @@ func (sc *serverConn) serve() { | ||||
| 				} | ||||
| 			case *startPushRequest: | ||||
| 				sc.startPush(v) | ||||
| 			case func(*serverConn): | ||||
| 				v(sc) | ||||
| 			default: | ||||
| 				panic(fmt.Sprintf("unexpected type %T", v)) | ||||
| 			} | ||||
| @@ -1469,8 +1506,7 @@ func (sc *serverConn) processFrame(f Frame) error { | ||||
| 			if sc.inflow.available() < int32(f.Length) { | ||||
| 				return sc.countError("data_flow", streamError(f.Header().StreamID, ErrCodeFlowControl)) | ||||
| 			} | ||||
| 			sc.inflow.take(int32(f.Length)) | ||||
| 			sc.sendWindowUpdate(nil) // conn-level | ||||
| 			sc.sendWindowUpdate(nil, int(f.Length)) // conn-level | ||||
| 		} | ||||
| 		return nil | ||||
| 	} | ||||
| @@ -1578,6 +1614,9 @@ func (sc *serverConn) closeStream(st *stream, err error) { | ||||
| 		panic(fmt.Sprintf("invariant; can't close stream in state %v", st.state)) | ||||
| 	} | ||||
| 	st.state = stateClosed | ||||
| 	if st.readDeadline != nil { | ||||
| 		st.readDeadline.Stop() | ||||
| 	} | ||||
| 	if st.writeDeadline != nil { | ||||
| 		st.writeDeadline.Stop() | ||||
| 	} | ||||
| @@ -1599,10 +1638,18 @@ func (sc *serverConn) closeStream(st *stream, err error) { | ||||
| 	if p := st.body; p != nil { | ||||
| 		// Return any buffered unread bytes worth of conn-level flow control. | ||||
| 		// See golang.org/issue/16481 | ||||
| 		sc.sendWindowUpdate(nil) | ||||
| 		sc.sendWindowUpdate(nil, p.Len()) | ||||
|  | ||||
| 		p.CloseWithError(err) | ||||
| 	} | ||||
| 	if e, ok := err.(StreamError); ok { | ||||
| 		if e.Cause != nil { | ||||
| 			err = e.Cause | ||||
| 		} else { | ||||
| 			err = errStreamClosed | ||||
| 		} | ||||
| 	} | ||||
| 	st.closeErr = err | ||||
| 	st.cw.Close() // signals Handler's CloseNotifier, unblocks writes, etc | ||||
| 	sc.writeSched.CloseStream(st.id) | ||||
| } | ||||
| @@ -1645,7 +1692,6 @@ func (sc *serverConn) processSetting(s Setting) error { | ||||
| 	} | ||||
| 	switch s.ID { | ||||
| 	case SettingHeaderTableSize: | ||||
| 		sc.headerTableSize = s.Val | ||||
| 		sc.hpackEncoder.SetMaxDynamicTableSize(s.Val) | ||||
| 	case SettingEnablePush: | ||||
| 		sc.pushEnabled = s.Val != 0 | ||||
| @@ -1737,7 +1783,7 @@ func (sc *serverConn) processData(f *DataFrame) error { | ||||
| 		// sendWindowUpdate, which also schedules sending the | ||||
| 		// frames. | ||||
| 		sc.inflow.take(int32(f.Length)) | ||||
| 		sc.sendWindowUpdate(nil) // conn-level | ||||
| 		sc.sendWindowUpdate(nil, int(f.Length)) // conn-level | ||||
|  | ||||
| 		if st != nil && st.resetQueued { | ||||
| 			// Already have a stream error in flight. Don't send another. | ||||
| @@ -1755,7 +1801,7 @@ func (sc *serverConn) processData(f *DataFrame) error { | ||||
| 			return sc.countError("data_flow", streamError(id, ErrCodeFlowControl)) | ||||
| 		} | ||||
| 		sc.inflow.take(int32(f.Length)) | ||||
| 		sc.sendWindowUpdate(nil) // conn-level | ||||
| 		sc.sendWindowUpdate(nil, int(f.Length)) // conn-level | ||||
|  | ||||
| 		st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes)) | ||||
| 		// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the | ||||
| @@ -1773,7 +1819,7 @@ func (sc *serverConn) processData(f *DataFrame) error { | ||||
| 		if len(data) > 0 { | ||||
| 			wrote, err := st.body.Write(data) | ||||
| 			if err != nil { | ||||
| 				sc.sendWindowUpdate32(nil, int32(f.Length)-int32(wrote)) | ||||
| 				sc.sendWindowUpdate(nil, int(f.Length)-wrote) | ||||
| 				return sc.countError("body_write_err", streamError(id, ErrCodeStreamClosed)) | ||||
| 			} | ||||
| 			if wrote != len(data) { | ||||
| @@ -1841,10 +1887,22 @@ func (st *stream) copyTrailersToHandlerRequest() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // onReadTimeout is run on its own goroutine (from time.AfterFunc) | ||||
| // when the stream's ReadTimeout has fired. | ||||
| func (st *stream) onReadTimeout() { | ||||
| 	// Wrap the ErrDeadlineExceeded to avoid callers depending on us | ||||
| 	// returning the bare error. | ||||
| 	st.body.CloseWithError(fmt.Errorf("%w", os.ErrDeadlineExceeded)) | ||||
| } | ||||
|  | ||||
| // onWriteTimeout is run on its own goroutine (from time.AfterFunc) | ||||
| // when the stream's WriteTimeout has fired. | ||||
| func (st *stream) onWriteTimeout() { | ||||
| 	st.sc.writeFrameFromHandler(FrameWriteRequest{write: streamError(st.id, ErrCodeInternal)}) | ||||
| 	st.sc.writeFrameFromHandler(FrameWriteRequest{write: StreamError{ | ||||
| 		StreamID: st.id, | ||||
| 		Code:     ErrCodeInternal, | ||||
| 		Cause:    os.ErrDeadlineExceeded, | ||||
| 	}}) | ||||
| } | ||||
|  | ||||
| func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { | ||||
| @@ -1952,6 +2010,9 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { | ||||
| 	// (in Go 1.8), though. That's a more sane option anyway. | ||||
| 	if sc.hs.ReadTimeout != 0 { | ||||
| 		sc.conn.SetReadDeadline(time.Time{}) | ||||
| 		if st.body != nil { | ||||
| 			st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	go sc.runHandler(rw, req, handler) | ||||
| @@ -2318,43 +2379,28 @@ func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) { | ||||
|  | ||||
| func (sc *serverConn) noteBodyRead(st *stream, n int) { | ||||
| 	sc.serveG.check() | ||||
| 	sc.sendWindowUpdate(nil) // conn-level | ||||
| 	sc.sendWindowUpdate(nil, n) // conn-level | ||||
| 	if st.state != stateHalfClosedRemote && st.state != stateClosed { | ||||
| 		// Don't send this WINDOW_UPDATE if the stream is closed | ||||
| 		// remotely. | ||||
| 		sc.sendWindowUpdate(st) | ||||
| 		sc.sendWindowUpdate(st, n) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // st may be nil for conn-level | ||||
| func (sc *serverConn) sendWindowUpdate(st *stream) { | ||||
| func (sc *serverConn) sendWindowUpdate(st *stream, n int) { | ||||
| 	sc.serveG.check() | ||||
|  | ||||
| 	var n int32 | ||||
| 	if st == nil { | ||||
| 		if avail, windowSize := sc.inflow.n, sc.srv.initialConnRecvWindowSize(); avail > windowSize/2 { | ||||
| 			return | ||||
| 		} else { | ||||
| 			n = windowSize - avail | ||||
| 		} | ||||
| 	} else { | ||||
| 		if avail, windowSize := st.inflow.n, sc.srv.initialStreamRecvWindowSize(); avail > windowSize/2 { | ||||
| 			return | ||||
| 		} else { | ||||
| 			n = windowSize - avail | ||||
| 		} | ||||
| 	} | ||||
| 	// "The legal range for the increment to the flow control | ||||
| 	// window is 1 to 2^31-1 (2,147,483,647) octets." | ||||
| 	// A Go Read call on 64-bit machines could in theory read | ||||
| 	// a larger Read than this. Very unlikely, but we handle it here | ||||
| 	// rather than elsewhere for now. | ||||
| 	const maxUint31 = 1<<31 - 1 | ||||
| 	for n >= maxUint31 { | ||||
| 	for n > maxUint31 { | ||||
| 		sc.sendWindowUpdate32(st, maxUint31) | ||||
| 		n -= maxUint31 | ||||
| 	} | ||||
| 	sc.sendWindowUpdate32(st, n) | ||||
| 	sc.sendWindowUpdate32(st, int32(n)) | ||||
| } | ||||
|  | ||||
| // st may be nil for conn-level | ||||
| @@ -2470,7 +2516,15 @@ type responseWriterState struct { | ||||
|  | ||||
| type chunkWriter struct{ rws *responseWriterState } | ||||
|  | ||||
| func (cw chunkWriter) Write(p []byte) (n int, err error) { return cw.rws.writeChunk(p) } | ||||
| func (cw chunkWriter) Write(p []byte) (n int, err error) { | ||||
| 	n, err = cw.rws.writeChunk(p) | ||||
| 	if err == errStreamClosed { | ||||
| 		// If writing failed because the stream has been closed, | ||||
| 		// return the reason it was closed. | ||||
| 		err = cw.rws.stream.closeErr | ||||
| 	} | ||||
| 	return n, err | ||||
| } | ||||
|  | ||||
| func (rws *responseWriterState) hasTrailers() bool { return len(rws.trailers) > 0 } | ||||
|  | ||||
| @@ -2664,23 +2718,85 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (w *responseWriter) SetReadDeadline(deadline time.Time) error { | ||||
| 	st := w.rws.stream | ||||
| 	if !deadline.IsZero() && deadline.Before(time.Now()) { | ||||
| 		// If we're setting a deadline in the past, reset the stream immediately | ||||
| 		// so writes after SetWriteDeadline returns will fail. | ||||
| 		st.onReadTimeout() | ||||
| 		return nil | ||||
| 	} | ||||
| 	w.rws.conn.sendServeMsg(func(sc *serverConn) { | ||||
| 		if st.readDeadline != nil { | ||||
| 			if !st.readDeadline.Stop() { | ||||
| 				// Deadline already exceeded, or stream has been closed. | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 		if deadline.IsZero() { | ||||
| 			st.readDeadline = nil | ||||
| 		} else if st.readDeadline == nil { | ||||
| 			st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout) | ||||
| 		} else { | ||||
| 			st.readDeadline.Reset(deadline.Sub(time.Now())) | ||||
| 		} | ||||
| 	}) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (w *responseWriter) SetWriteDeadline(deadline time.Time) error { | ||||
| 	st := w.rws.stream | ||||
| 	if !deadline.IsZero() && deadline.Before(time.Now()) { | ||||
| 		// If we're setting a deadline in the past, reset the stream immediately | ||||
| 		// so writes after SetWriteDeadline returns will fail. | ||||
| 		st.onWriteTimeout() | ||||
| 		return nil | ||||
| 	} | ||||
| 	w.rws.conn.sendServeMsg(func(sc *serverConn) { | ||||
| 		if st.writeDeadline != nil { | ||||
| 			if !st.writeDeadline.Stop() { | ||||
| 				// Deadline already exceeded, or stream has been closed. | ||||
| 				return | ||||
| 			} | ||||
| 		} | ||||
| 		if deadline.IsZero() { | ||||
| 			st.writeDeadline = nil | ||||
| 		} else if st.writeDeadline == nil { | ||||
| 			st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout) | ||||
| 		} else { | ||||
| 			st.writeDeadline.Reset(deadline.Sub(time.Now())) | ||||
| 		} | ||||
| 	}) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (w *responseWriter) Flush() { | ||||
| 	w.FlushError() | ||||
| } | ||||
|  | ||||
| func (w *responseWriter) FlushError() error { | ||||
| 	rws := w.rws | ||||
| 	if rws == nil { | ||||
| 		panic("Header called after Handler finished") | ||||
| 	} | ||||
| 	var err error | ||||
| 	if rws.bw.Buffered() > 0 { | ||||
| 		if err := rws.bw.Flush(); err != nil { | ||||
| 			// Ignore the error. The frame writer already knows. | ||||
| 			return | ||||
| 		} | ||||
| 		err = rws.bw.Flush() | ||||
| 	} else { | ||||
| 		// The bufio.Writer won't call chunkWriter.Write | ||||
| 		// (writeChunk with zero bytes, so we have to do it | ||||
| 		// ourselves to force the HTTP response header and/or | ||||
| 		// final DATA frame (with END_STREAM) to be sent. | ||||
| 		rws.writeChunk(nil) | ||||
| 		_, err = chunkWriter{rws}.Write(nil) | ||||
| 		if err == nil { | ||||
| 			select { | ||||
| 			case <-rws.stream.cw: | ||||
| 				err = rws.stream.closeErr | ||||
| 			default: | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
|  | ||||
| func (w *responseWriter) CloseNotify() <-chan bool { | ||||
|   | ||||
							
								
								
									
										111
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										111
									
								
								vendor/golang.org/x/net/http2/transport.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -16,6 +16,7 @@ import ( | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/fs" | ||||
| 	"log" | ||||
| 	"math" | ||||
| 	mathrand "math/rand" | ||||
| @@ -117,6 +118,28 @@ type Transport struct { | ||||
| 	// to mean no limit. | ||||
| 	MaxHeaderListSize uint32 | ||||
|  | ||||
| 	// MaxReadFrameSize is the http2 SETTINGS_MAX_FRAME_SIZE to send in the | ||||
| 	// initial settings frame. It is the size in bytes of the largest frame | ||||
| 	// payload that the sender is willing to receive. If 0, no setting is | ||||
| 	// sent, and the value is provided by the peer, which should be 16384 | ||||
| 	// according to the spec: | ||||
| 	// https://datatracker.ietf.org/doc/html/rfc7540#section-6.5.2. | ||||
| 	// Values are bounded in the range 16k to 16M. | ||||
| 	MaxReadFrameSize uint32 | ||||
|  | ||||
| 	// MaxDecoderHeaderTableSize optionally specifies the http2 | ||||
| 	// SETTINGS_HEADER_TABLE_SIZE to send in the initial settings frame. It | ||||
| 	// informs the remote endpoint of the maximum size of the header compression | ||||
| 	// table used to decode header blocks, in octets. If zero, the default value | ||||
| 	// of 4096 is used. | ||||
| 	MaxDecoderHeaderTableSize uint32 | ||||
|  | ||||
| 	// MaxEncoderHeaderTableSize optionally specifies an upper limit for the | ||||
| 	// header compression table used for encoding request headers. Received | ||||
| 	// SETTINGS_HEADER_TABLE_SIZE settings are capped at this limit. If zero, | ||||
| 	// the default value of 4096 is used. | ||||
| 	MaxEncoderHeaderTableSize uint32 | ||||
|  | ||||
| 	// StrictMaxConcurrentStreams controls whether the server's | ||||
| 	// SETTINGS_MAX_CONCURRENT_STREAMS should be respected | ||||
| 	// globally. If false, new TCP connections are created to the | ||||
| @@ -170,6 +193,19 @@ func (t *Transport) maxHeaderListSize() uint32 { | ||||
| 	return t.MaxHeaderListSize | ||||
| } | ||||
|  | ||||
| func (t *Transport) maxFrameReadSize() uint32 { | ||||
| 	if t.MaxReadFrameSize == 0 { | ||||
| 		return 0 // use the default provided by the peer | ||||
| 	} | ||||
| 	if t.MaxReadFrameSize < minMaxFrameSize { | ||||
| 		return minMaxFrameSize | ||||
| 	} | ||||
| 	if t.MaxReadFrameSize > maxFrameSize { | ||||
| 		return maxFrameSize | ||||
| 	} | ||||
| 	return t.MaxReadFrameSize | ||||
| } | ||||
|  | ||||
| func (t *Transport) disableCompression() bool { | ||||
| 	return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression) | ||||
| } | ||||
| @@ -292,10 +328,11 @@ type ClientConn struct { | ||||
| 	lastActive      time.Time | ||||
| 	lastIdle        time.Time // time last idle | ||||
| 	// Settings from peer: (also guarded by wmu) | ||||
| 	maxFrameSize          uint32 | ||||
| 	maxConcurrentStreams  uint32 | ||||
| 	peerMaxHeaderListSize uint64 | ||||
| 	initialWindowSize     uint32 | ||||
| 	maxFrameSize           uint32 | ||||
| 	maxConcurrentStreams   uint32 | ||||
| 	peerMaxHeaderListSize  uint64 | ||||
| 	peerMaxHeaderTableSize uint32 | ||||
| 	initialWindowSize      uint32 | ||||
|  | ||||
| 	// reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests. | ||||
| 	// Write to reqHeaderMu to lock it, read from it to unlock. | ||||
| @@ -501,6 +538,15 @@ func authorityAddr(scheme string, authority string) (addr string) { | ||||
| 	return net.JoinHostPort(host, port) | ||||
| } | ||||
|  | ||||
| var retryBackoffHook func(time.Duration) *time.Timer | ||||
|  | ||||
| func backoffNewTimer(d time.Duration) *time.Timer { | ||||
| 	if retryBackoffHook != nil { | ||||
| 		return retryBackoffHook(d) | ||||
| 	} | ||||
| 	return time.NewTimer(d) | ||||
| } | ||||
|  | ||||
| // RoundTripOpt is like RoundTrip, but takes options. | ||||
| func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { | ||||
| 	if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) { | ||||
| @@ -526,11 +572,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res | ||||
| 				} | ||||
| 				backoff := float64(uint(1) << (uint(retry) - 1)) | ||||
| 				backoff += backoff * (0.1 * mathrand.Float64()) | ||||
| 				d := time.Second * time.Duration(backoff) | ||||
| 				timer := backoffNewTimer(d) | ||||
| 				select { | ||||
| 				case <-time.After(time.Second * time.Duration(backoff)): | ||||
| 				case <-timer.C: | ||||
| 					t.vlogf("RoundTrip retrying after failure: %v", err) | ||||
| 					continue | ||||
| 				case <-req.Context().Done(): | ||||
| 					timer.Stop() | ||||
| 					err = req.Context().Err() | ||||
| 				} | ||||
| 			} | ||||
| @@ -668,6 +717,20 @@ func (t *Transport) expectContinueTimeout() time.Duration { | ||||
| 	return t.t1.ExpectContinueTimeout | ||||
| } | ||||
|  | ||||
| func (t *Transport) maxDecoderHeaderTableSize() uint32 { | ||||
| 	if v := t.MaxDecoderHeaderTableSize; v > 0 { | ||||
| 		return v | ||||
| 	} | ||||
| 	return initialHeaderTableSize | ||||
| } | ||||
|  | ||||
| func (t *Transport) maxEncoderHeaderTableSize() uint32 { | ||||
| 	if v := t.MaxEncoderHeaderTableSize; v > 0 { | ||||
| 		return v | ||||
| 	} | ||||
| 	return initialHeaderTableSize | ||||
| } | ||||
|  | ||||
| func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { | ||||
| 	return t.newClientConn(c, t.disableKeepAlives()) | ||||
| } | ||||
| @@ -708,15 +771,19 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro | ||||
| 	}) | ||||
| 	cc.br = bufio.NewReader(c) | ||||
| 	cc.fr = NewFramer(cc.bw, cc.br) | ||||
| 	if t.maxFrameReadSize() != 0 { | ||||
| 		cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize()) | ||||
| 	} | ||||
| 	if t.CountError != nil { | ||||
| 		cc.fr.countError = t.CountError | ||||
| 	} | ||||
| 	cc.fr.ReadMetaHeaders = hpack.NewDecoder(initialHeaderTableSize, nil) | ||||
| 	maxHeaderTableSize := t.maxDecoderHeaderTableSize() | ||||
| 	cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil) | ||||
| 	cc.fr.MaxHeaderListSize = t.maxHeaderListSize() | ||||
|  | ||||
| 	// TODO: SetMaxDynamicTableSize, SetMaxDynamicTableSizeLimit on | ||||
| 	// henc in response to SETTINGS frames? | ||||
| 	cc.henc = hpack.NewEncoder(&cc.hbuf) | ||||
| 	cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize()) | ||||
| 	cc.peerMaxHeaderTableSize = initialHeaderTableSize | ||||
|  | ||||
| 	if t.AllowHTTP { | ||||
| 		cc.nextStreamID = 3 | ||||
| @@ -731,9 +798,15 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro | ||||
| 		{ID: SettingEnablePush, Val: 0}, | ||||
| 		{ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow}, | ||||
| 	} | ||||
| 	if max := t.maxFrameReadSize(); max != 0 { | ||||
| 		initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max}) | ||||
| 	} | ||||
| 	if max := t.maxHeaderListSize(); max != 0 { | ||||
| 		initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max}) | ||||
| 	} | ||||
| 	if maxHeaderTableSize != initialHeaderTableSize { | ||||
| 		initialSettings = append(initialSettings, Setting{ID: SettingHeaderTableSize, Val: maxHeaderTableSize}) | ||||
| 	} | ||||
|  | ||||
| 	cc.bw.Write(clientPreface) | ||||
| 	cc.fr.WriteSettings(initialSettings...) | ||||
| @@ -1075,7 +1148,7 @@ var errRequestCanceled = errors.New("net/http: request canceled") | ||||
| func commaSeparatedTrailers(req *http.Request) (string, error) { | ||||
| 	keys := make([]string, 0, len(req.Trailer)) | ||||
| 	for k := range req.Trailer { | ||||
| 		k = http.CanonicalHeaderKey(k) | ||||
| 		k = canonicalHeader(k) | ||||
| 		switch k { | ||||
| 		case "Transfer-Encoding", "Trailer", "Content-Length": | ||||
| 			return "", fmt.Errorf("invalid Trailer key %q", k) | ||||
| @@ -1915,7 +1988,7 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail | ||||
|  | ||||
| 	// Header list size is ok. Write the headers. | ||||
| 	enumerateHeaders(func(name, value string) { | ||||
| 		name, ascii := asciiToLower(name) | ||||
| 		name, ascii := lowerHeader(name) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
| @@ -1968,7 +2041,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { | ||||
| 	} | ||||
|  | ||||
| 	for k, vv := range trailer { | ||||
| 		lowKey, ascii := asciiToLower(k) | ||||
| 		lowKey, ascii := lowerHeader(k) | ||||
| 		if !ascii { | ||||
| 			// Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header | ||||
| 			// field names have to be ASCII characters (just as in HTTP/1.x). | ||||
| @@ -2301,7 +2374,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra | ||||
| 		Status:     status + " " + http.StatusText(statusCode), | ||||
| 	} | ||||
| 	for _, hf := range regularFields { | ||||
| 		key := http.CanonicalHeaderKey(hf.Name) | ||||
| 		key := canonicalHeader(hf.Name) | ||||
| 		if key == "Trailer" { | ||||
| 			t := res.Trailer | ||||
| 			if t == nil { | ||||
| @@ -2309,7 +2382,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra | ||||
| 				res.Trailer = t | ||||
| 			} | ||||
| 			foreachHeaderElement(hf.Value, func(v string) { | ||||
| 				t[http.CanonicalHeaderKey(v)] = nil | ||||
| 				t[canonicalHeader(v)] = nil | ||||
| 			}) | ||||
| 		} else { | ||||
| 			vv := header[key] | ||||
| @@ -2414,7 +2487,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr | ||||
|  | ||||
| 	trailer := make(http.Header) | ||||
| 	for _, hf := range f.RegularFields() { | ||||
| 		key := http.CanonicalHeaderKey(hf.Name) | ||||
| 		key := canonicalHeader(hf.Name) | ||||
| 		trailer[key] = append(trailer[key], hf.Value) | ||||
| 	} | ||||
| 	cs.trailer = trailer | ||||
| @@ -2760,8 +2833,10 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { | ||||
| 			cc.cond.Broadcast() | ||||
|  | ||||
| 			cc.initialWindowSize = s.Val | ||||
| 		case SettingHeaderTableSize: | ||||
| 			cc.henc.SetMaxDynamicTableSize(s.Val) | ||||
| 			cc.peerMaxHeaderTableSize = s.Val | ||||
| 		default: | ||||
| 			// TODO(bradfitz): handle more settings? SETTINGS_HEADER_TABLE_SIZE probably. | ||||
| 			cc.vlogf("Unhandled Setting: %v", s) | ||||
| 		} | ||||
| 		return nil | ||||
| @@ -2985,7 +3060,11 @@ func (gz *gzipReader) Read(p []byte) (n int, err error) { | ||||
| } | ||||
|  | ||||
| func (gz *gzipReader) Close() error { | ||||
| 	return gz.body.Close() | ||||
| 	if err := gz.body.Close(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	gz.zerr = fs.ErrClosed | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| type errorReader struct{ err error } | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/golang.org/x/sys/execabs/execabs_go119.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/golang.org/x/sys/execabs/execabs_go119.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -7,9 +7,11 @@ | ||||
|  | ||||
| package execabs | ||||
|  | ||||
| import "strings" | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"os/exec" | ||||
| ) | ||||
|  | ||||
| func isGo119ErrDot(err error) bool { | ||||
| 	// TODO: return errors.Is(err, exec.ErrDot) | ||||
| 	return strings.Contains(err.Error(), "current directory") | ||||
| 	return errors.Is(err, exec.ErrDot) | ||||
| } | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/sys/windows/syscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -367,6 +367,7 @@ func NewCallbackCDecl(fn interface{}) uintptr { | ||||
| //sys	IsWindowUnicode(hwnd HWND) (isUnicode bool) = user32.IsWindowUnicode | ||||
| //sys	IsWindowVisible(hwnd HWND) (isVisible bool) = user32.IsWindowVisible | ||||
| //sys	GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) = user32.GetGUIThreadInfo | ||||
| //sys	GetLargePageMinimum() (size uintptr) | ||||
|  | ||||
| // Volume Management Functions | ||||
| //sys	DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) = DefineDosDeviceW | ||||
|   | ||||
							
								
								
									
										7
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/golang.org/x/sys/windows/zsyscall_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -252,6 +252,7 @@ var ( | ||||
| 	procGetFileType                                          = modkernel32.NewProc("GetFileType") | ||||
| 	procGetFinalPathNameByHandleW                            = modkernel32.NewProc("GetFinalPathNameByHandleW") | ||||
| 	procGetFullPathNameW                                     = modkernel32.NewProc("GetFullPathNameW") | ||||
| 	procGetLargePageMinimum                                  = modkernel32.NewProc("GetLargePageMinimum") | ||||
| 	procGetLastError                                         = modkernel32.NewProc("GetLastError") | ||||
| 	procGetLogicalDriveStringsW                              = modkernel32.NewProc("GetLogicalDriveStringsW") | ||||
| 	procGetLogicalDrives                                     = modkernel32.NewProc("GetLogicalDrives") | ||||
| @@ -2180,6 +2181,12 @@ func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) ( | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func GetLargePageMinimum() (size uintptr) { | ||||
| 	r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0) | ||||
| 	size = uintptr(r0) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func GetLastError() (lasterr error) { | ||||
| 	r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) | ||||
| 	if r0 != 0 { | ||||
|   | ||||
							
								
								
									
										1
									
								
								vendor/golang.org/x/term/terminal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/golang.org/x/term/terminal.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -233,7 +233,6 @@ func (t *Terminal) queue(data []rune) { | ||||
| 	t.outBuf = append(t.outBuf, []byte(string(data))...) | ||||
| } | ||||
|  | ||||
| var eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'} | ||||
| var space = []rune{' '} | ||||
|  | ||||
| func isPrintable(key rune) bool { | ||||
|   | ||||
							
								
								
									
										12
									
								
								vendor/golang.org/x/text/unicode/bidi/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/golang.org/x/text/unicode/bidi/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -37,18 +37,6 @@ const ( | ||||
| 	unknownClass = ^Class(0) | ||||
| ) | ||||
|  | ||||
| var controlToClass = map[rune]Class{ | ||||
| 	0x202D: LRO, // LeftToRightOverride, | ||||
| 	0x202E: RLO, // RightToLeftOverride, | ||||
| 	0x202A: LRE, // LeftToRightEmbedding, | ||||
| 	0x202B: RLE, // RightToLeftEmbedding, | ||||
| 	0x202C: PDF, // PopDirectionalFormat, | ||||
| 	0x2066: LRI, // LeftToRightIsolate, | ||||
| 	0x2067: RLI, // RightToLeftIsolate, | ||||
| 	0x2068: FSI, // FirstStrongIsolate, | ||||
| 	0x2069: PDI, // PopDirectionalIsolate, | ||||
| } | ||||
|  | ||||
| // A trie entry has the following bits: | ||||
| // 7..5  XOR mask for brackets | ||||
| // 4     1: Bracket open, 0: Bracket close | ||||
|   | ||||
							
								
								
									
										8
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							| @@ -487,7 +487,7 @@ golang.org/x/crypto/pbkdf2 | ||||
| # golang.org/x/mod v0.6.0 | ||||
| ## explicit; go 1.17 | ||||
| golang.org/x/mod/semver | ||||
| # golang.org/x/net v0.1.1-0.20221027164007-c63010009c80 | ||||
| # golang.org/x/net v0.4.0 | ||||
| ## explicit; go 1.17 | ||||
| golang.org/x/net/context | ||||
| golang.org/x/net/context/ctxhttp | ||||
| @@ -508,7 +508,7 @@ golang.org/x/oauth2/internal | ||||
| ## explicit | ||||
| golang.org/x/sync/errgroup | ||||
| golang.org/x/sync/semaphore | ||||
| # golang.org/x/sys v0.2.0 | ||||
| # golang.org/x/sys v0.3.0 | ||||
| ## explicit; go 1.17 | ||||
| golang.org/x/sys/execabs | ||||
| golang.org/x/sys/internal/unsafeheader | ||||
| @@ -519,10 +519,10 @@ golang.org/x/sys/windows/registry | ||||
| golang.org/x/sys/windows/svc | ||||
| golang.org/x/sys/windows/svc/debug | ||||
| golang.org/x/sys/windows/svc/mgr | ||||
| # golang.org/x/term v0.1.0 | ||||
| # golang.org/x/term v0.3.0 | ||||
| ## explicit; go 1.17 | ||||
| golang.org/x/term | ||||
| # golang.org/x/text v0.4.0 | ||||
| # golang.org/x/text v0.5.0 | ||||
| ## explicit; go 1.17 | ||||
| golang.org/x/text/secure/bidirule | ||||
| golang.org/x/text/transform | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Akihiro Suda
					Akihiro Suda