Update golang/x/net dependency

parent 6c52f03a
...@@ -3632,67 +3632,67 @@ ...@@ -3632,67 +3632,67 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/context/ctxhttp", "ImportPath": "golang.org/x/net/context/ctxhttp",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html", "ImportPath": "golang.org/x/net/html",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html/atom", "ImportPath": "golang.org/x/net/html/atom",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html/charset", "ImportPath": "golang.org/x/net/html/charset",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/nettest", "ImportPath": "golang.org/x/net/internal/nettest",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/socks", "ImportPath": "golang.org/x/net/internal/socks",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/sockstest", "ImportPath": "golang.org/x/net/internal/sockstest",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/timeseries", "ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/proxy", "ImportPath": "golang.org/x/net/proxy",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/trace", "ImportPath": "golang.org/x/net/trace",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -56,19 +56,19 @@ ...@@ -56,19 +56,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -688,35 +688,35 @@ ...@@ -688,35 +688,35 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/timeseries", "ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/trace", "ImportPath": "golang.org/x/net/trace",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -120,31 +120,31 @@ ...@@ -120,31 +120,31 @@
}, },
{ {
"ImportPath": "golang.org/x/net/html", "ImportPath": "golang.org/x/net/html",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html/atom", "ImportPath": "golang.org/x/net/html/atom",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -696,35 +696,35 @@ ...@@ -696,35 +696,35 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/timeseries", "ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/trace", "ImportPath": "golang.org/x/net/trace",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -168,23 +168,23 @@ ...@@ -168,23 +168,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -192,27 +192,27 @@ ...@@ -192,27 +192,27 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/context/ctxhttp", "ImportPath": "golang.org/x/net/context/ctxhttp",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -84,23 +84,23 @@ ...@@ -84,23 +84,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -24,19 +24,19 @@ ...@@ -24,19 +24,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -84,23 +84,23 @@ ...@@ -84,23 +84,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -268,43 +268,43 @@ ...@@ -268,43 +268,43 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html", "ImportPath": "golang.org/x/net/html",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/html/atom", "ImportPath": "golang.org/x/net/html/atom",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/timeseries", "ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/trace", "ImportPath": "golang.org/x/net/trace",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -20,19 +20,19 @@ ...@@ -20,19 +20,19 @@
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/text/secure/bidirule", "ImportPath": "golang.org/x/text/secure/bidirule",
......
...@@ -88,23 +88,23 @@ ...@@ -88,23 +88,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -84,23 +84,23 @@ ...@@ -84,23 +84,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -248,35 +248,35 @@ ...@@ -248,35 +248,35 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/internal/timeseries", "ImportPath": "golang.org/x/net/internal/timeseries",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/trace", "ImportPath": "golang.org/x/net/trace",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/websocket", "ImportPath": "golang.org/x/net/websocket",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -160,23 +160,23 @@ ...@@ -160,23 +160,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -96,23 +96,23 @@ ...@@ -96,23 +96,23 @@
}, },
{ {
"ImportPath": "golang.org/x/net/context", "ImportPath": "golang.org/x/net/context",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http/httpguts", "ImportPath": "golang.org/x/net/http/httpguts",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2", "ImportPath": "golang.org/x/net/http2",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/http2/hpack", "ImportPath": "golang.org/x/net/http2/hpack",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/net/idna", "ImportPath": "golang.org/x/net/idna",
"Rev": "65e2d4e15006aab9813ff8769e768bbf4bb667a0" "Rev": "cdfb69ac37fc6fa907650654115ebebb3aae2087"
}, },
{ {
"ImportPath": "golang.org/x/oauth2", "ImportPath": "golang.org/x/oauth2",
......
...@@ -52,10 +52,11 @@ import ( ...@@ -52,10 +52,11 @@ import (
) )
const ( const (
prefaceTimeout = 10 * time.Second prefaceTimeout = 10 * time.Second
firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway
handlerChunkWriteSize = 4 << 10 handlerChunkWriteSize = 4 << 10
defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to?
maxQueuedControlFrames = 10000
) )
var ( var (
...@@ -163,6 +164,15 @@ func (s *Server) maxConcurrentStreams() uint32 { ...@@ -163,6 +164,15 @@ func (s *Server) maxConcurrentStreams() uint32 {
return defaultMaxStreams return defaultMaxStreams
} }
// 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.
func (s *Server) maxQueuedControlFrames() int {
// TODO: if anybody asks, add a Server field, and remember to define the
// behavior of negative values.
return maxQueuedControlFrames
}
type serverInternalState struct { type serverInternalState struct {
mu sync.Mutex mu sync.Mutex
activeConns map[*serverConn]struct{} activeConns map[*serverConn]struct{}
...@@ -482,6 +492,7 @@ type serverConn struct { ...@@ -482,6 +492,7 @@ type serverConn struct {
sawFirstSettings bool // got the initial SETTINGS frame after the preface sawFirstSettings bool // got the initial SETTINGS frame after the preface
needToSendSettingsAck bool needToSendSettingsAck bool
unackedSettings int // how many SETTINGS have we sent without ACKs? unackedSettings int // how many SETTINGS have we sent without ACKs?
queuedControlFrames int // control frames in the writeSched queue
clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit) clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit)
advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client
curClientStreams uint32 // number of open streams initiated by the client curClientStreams uint32 // number of open streams initiated by the client
...@@ -870,6 +881,14 @@ func (sc *serverConn) serve() { ...@@ -870,6 +881,14 @@ func (sc *serverConn) serve() {
} }
} }
// If the peer is causing us to generate a lot of control frames,
// but not reading them from us, assume they are trying to make us
// run out of memory.
if sc.queuedControlFrames > sc.srv.maxQueuedControlFrames() {
sc.vlogf("http2: too many control frames in send queue, closing connection")
return
}
// Start the shutdown timer after sending a GOAWAY. When sending GOAWAY // Start the shutdown timer after sending a GOAWAY. When sending GOAWAY
// with no error code (graceful shutdown), don't start the timer until // with no error code (graceful shutdown), don't start the timer until
// all open streams have been completed. // all open streams have been completed.
...@@ -1069,6 +1088,14 @@ func (sc *serverConn) writeFrame(wr FrameWriteRequest) { ...@@ -1069,6 +1088,14 @@ func (sc *serverConn) writeFrame(wr FrameWriteRequest) {
} }
if !ignoreWrite { if !ignoreWrite {
if wr.isControl() {
sc.queuedControlFrames++
// For extra safety, detect wraparounds, which should not happen,
// and pull the plug.
if sc.queuedControlFrames < 0 {
sc.conn.Close()
}
}
sc.writeSched.Push(wr) sc.writeSched.Push(wr)
} }
sc.scheduleFrameWrite() sc.scheduleFrameWrite()
...@@ -1186,10 +1213,8 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) { ...@@ -1186,10 +1213,8 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) {
// If a frame is already being written, nothing happens. This will be called again // If a frame is already being written, nothing happens. This will be called again
// when the frame is done being written. // when the frame is done being written.
// //
// If a frame isn't being written we need to send one, the best frame // If a frame isn't being written and we need to send one, the best frame
// to send is selected, preferring first things that aren't // to send is selected by writeSched.
// stream-specific (e.g. ACKing settings), and then finding the
// highest priority stream.
// //
// If a frame isn't being written and there's nothing else to send, we // If a frame isn't being written and there's nothing else to send, we
// flush the write buffer. // flush the write buffer.
...@@ -1217,6 +1242,9 @@ func (sc *serverConn) scheduleFrameWrite() { ...@@ -1217,6 +1242,9 @@ func (sc *serverConn) scheduleFrameWrite() {
} }
if !sc.inGoAway || sc.goAwayCode == ErrCodeNo { if !sc.inGoAway || sc.goAwayCode == ErrCodeNo {
if wr, ok := sc.writeSched.Pop(); ok { if wr, ok := sc.writeSched.Pop(); ok {
if wr.isControl() {
sc.queuedControlFrames--
}
sc.startFrameWrite(wr) sc.startFrameWrite(wr)
continue continue
} }
...@@ -1509,6 +1537,8 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error { ...@@ -1509,6 +1537,8 @@ func (sc *serverConn) processSettings(f *SettingsFrame) error {
if err := f.ForeachSetting(sc.processSetting); err != nil { if err := f.ForeachSetting(sc.processSetting); err != nil {
return err return err
} }
// TODO: judging by RFC 7540, Section 6.5.3 each SETTINGS frame should be
// acknowledged individually, even if multiple are received before the ACK.
sc.needToSendSettingsAck = true sc.needToSendSettingsAck = true
sc.scheduleFrameWrite() sc.scheduleFrameWrite()
return nil return nil
......
...@@ -32,7 +32,7 @@ type WriteScheduler interface { ...@@ -32,7 +32,7 @@ type WriteScheduler interface {
// Pop dequeues the next frame to write. Returns false if no frames can // Pop dequeues the next frame to write. Returns false if no frames can
// be written. Frames with a given wr.StreamID() are Pop'd in the same // be written. Frames with a given wr.StreamID() are Pop'd in the same
// order they are Push'd. // order they are Push'd. No frames should be discarded except by CloseStream.
Pop() (wr FrameWriteRequest, ok bool) Pop() (wr FrameWriteRequest, ok bool)
} }
...@@ -76,6 +76,12 @@ func (wr FrameWriteRequest) StreamID() uint32 { ...@@ -76,6 +76,12 @@ func (wr FrameWriteRequest) StreamID() uint32 {
return wr.stream.id return wr.stream.id
} }
// isControl reports whether wr is a control frame for MaxQueuedControlFrames
// purposes. That includes non-stream frames and RST_STREAM frames.
func (wr FrameWriteRequest) isControl() bool {
return wr.stream == nil
}
// DataSize returns the number of flow control bytes that must be consumed // DataSize returns the number of flow control bytes that must be consumed
// to write this entire frame. This is 0 for non-DATA frames. // to write this entire frame. This is 0 for non-DATA frames.
func (wr FrameWriteRequest) DataSize() int { func (wr FrameWriteRequest) DataSize() int {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment