diff options
author | Mike Crute <mike@crute.us> | 2023-10-08 12:29:59 -0700 |
---|---|---|
committer | Mike Crute <mike@crute.us> | 2023-10-08 12:33:23 -0700 |
commit | b151147e2106d74c599efccb99b1b718b7f0c1f2 (patch) | |
tree | 2b9667ca3a4e2a5941784ad09c5ae46fa52fc288 /echo | |
parent | 2fb75e754e04962a4708a9e1b2cb7acf5881712e (diff) | |
download | golib-b151147e2106d74c599efccb99b1b718b7f0c1f2.tar.bz2 golib-b151147e2106d74c599efccb99b1b718b7f0c1f2.tar.xz golib-b151147e2106d74c599efccb99b1b718b7f0c1f2.zip |
echo: add basic http/3 support
Diffstat (limited to 'echo')
-rw-r--r-- | echo/echo_default.go | 40 | ||||
-rw-r--r-- | echo/go.mod | 14 | ||||
-rw-r--r-- | echo/go.sum | 33 | ||||
-rw-r--r-- | echo/internal_wrappers.go | 65 | ||||
-rw-r--r-- | echo/middleware/alt_svc.go | 17 | ||||
-rw-r--r-- | echo/ports.go | 10 |
6 files changed, 158 insertions, 21 deletions
diff --git a/echo/echo_default.go b/echo/echo_default.go index 916cbd0..98a8ee6 100644 --- a/echo/echo_default.go +++ b/echo/echo_default.go | |||
@@ -18,6 +18,7 @@ import ( | |||
18 | "github.com/labstack/echo/v4" | 18 | "github.com/labstack/echo/v4" |
19 | "github.com/labstack/echo/v4/middleware" | 19 | "github.com/labstack/echo/v4/middleware" |
20 | "github.com/labstack/gommon/log" | 20 | "github.com/labstack/gommon/log" |
21 | "github.com/quic-go/quic-go/http3" | ||
21 | ) | 22 | ) |
22 | 23 | ||
23 | // Docs: https://echo.labstack.com/guide/ | 24 | // Docs: https://echo.labstack.com/guide/ |
@@ -235,22 +236,16 @@ func (w *EchoWrapper) configureCombinedLogging(c *EchoConfig) error { | |||
235 | return nil | 236 | return nil |
236 | } | 237 | } |
237 | 238 | ||
238 | func (w *EchoWrapper) makeServerJob(s *http.Server, echoInit bool) service.RunnerFunc { | 239 | func (w *EchoWrapper) makeServerJob(s webServer) service.RunnerFunc { |
239 | return func(ctx context.Context, wg *sync.WaitGroup) error { | 240 | return func(ctx context.Context, wg *sync.WaitGroup) error { |
240 | wg.Add(1) | 241 | wg.Add(1) |
241 | defer wg.Done() | 242 | defer wg.Done() |
242 | 243 | ||
243 | w.Logger.Infof("Starting server with address: %s", s.Addr) | 244 | s.LogStart(w.Logger) |
244 | 245 | ||
245 | err := make(chan error) | 246 | err := make(chan error) |
246 | go func() { | 247 | go func() { |
247 | if s.TLSConfig == nil && echoInit { | 248 | err <- s.ListenAndServe() |
248 | err <- w.Echo.StartServer(s) | ||
249 | } else if s.TLSConfig == nil && !echoInit { | ||
250 | err <- s.ListenAndServe() | ||
251 | } else { | ||
252 | err <- s.ListenAndServeTLS("", "") | ||
253 | } | ||
254 | }() | 249 | }() |
255 | select { | 250 | select { |
256 | case e := <-err: | 251 | case e := <-err: |
@@ -267,12 +262,13 @@ func (w *EchoWrapper) makeServerJob(s *http.Server, echoInit bool) service.Runne | |||
267 | } | 262 | } |
268 | 263 | ||
269 | func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | 264 | func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { |
270 | for i, a := range bindings.HttpBindings() { | 265 | for _, a := range bindings.HttpBindings() { |
271 | s := &http.Server{ | 266 | s := &http.Server{ |
272 | Addr: a, | 267 | Addr: a, |
273 | Handler: w, | 268 | Handler: w, |
269 | ErrorLog: w.StdLogger, | ||
274 | } | 270 | } |
275 | w.runner.AddJob(w.makeServerJob(s, i == 0)) | 271 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) |
276 | } | 272 | } |
277 | 273 | ||
278 | for _, a := range bindings.TlsBindings() { | 274 | for _, a := range bindings.TlsBindings() { |
@@ -281,11 +277,25 @@ func (w *EchoWrapper) buildServers(c *EchoConfig, bindings *AddressPortConfig) { | |||
281 | TLSConfig: &tls.Config{ | 277 | TLSConfig: &tls.Config{ |
282 | MinVersion: tls.VersionTLS12, | 278 | MinVersion: tls.VersionTLS12, |
283 | GetCertificate: c.Autocert.GetCertificate, | 279 | GetCertificate: c.Autocert.GetCertificate, |
284 | NextProtos: []string{"h2", "http/1.1"}, // enable HTTP/2 | 280 | NextProtos: []string{"h3", "h2", "http/1.1"}, |
285 | }, | 281 | }, |
282 | Handler: w, | ||
283 | ErrorLog: w.StdLogger, | ||
284 | } | ||
285 | w.runner.AddJob(w.makeServerJob(&netHttpWrapper{s})) | ||
286 | } | ||
287 | |||
288 | for _, a := range bindings.QuicBindings() { | ||
289 | q := &http3.Server{ | ||
290 | Addr: a, | ||
291 | TLSConfig: http3.ConfigureTLSConfig(&tls.Config{ | ||
292 | MinVersion: tls.VersionTLS13, | ||
293 | GetCertificate: c.Autocert.GetCertificate, | ||
294 | }), | ||
286 | Handler: w, | 295 | Handler: w, |
287 | } | 296 | } |
288 | w.runner.AddJob(w.makeServerJob(s, false)) | 297 | w.runner.AddJob(w.makeServerJob(&http3Wrapper{q})) |
298 | w.Use(glmw.Http3AltSvcMiddleware(bindings.QuicPort)) | ||
289 | } | 299 | } |
290 | } | 300 | } |
291 | 301 | ||
diff --git a/echo/go.mod b/echo/go.mod index 50a44a8..578e9fc 100644 --- a/echo/go.mod +++ b/echo/go.mod | |||
@@ -11,6 +11,7 @@ require ( | |||
11 | github.com/labstack/echo/v4 v4.6.1 | 11 | github.com/labstack/echo/v4 v4.6.1 |
12 | github.com/labstack/gommon v0.3.1 | 12 | github.com/labstack/gommon v0.3.1 |
13 | github.com/prometheus/client_golang v1.11.0 | 13 | github.com/prometheus/client_golang v1.11.0 |
14 | github.com/quic-go/quic-go v0.39.0 | ||
14 | github.com/stretchr/testify v1.8.1 | 15 | github.com/stretchr/testify v1.8.1 |
15 | gopkg.in/square/go-jose.v2 v2.5.1 | 16 | gopkg.in/square/go-jose.v2 v2.5.1 |
16 | ) | 17 | ) |
@@ -23,9 +24,11 @@ require ( | |||
23 | github.com/cespare/xxhash/v2 v2.1.1 // indirect | 24 | github.com/cespare/xxhash/v2 v2.1.1 // indirect |
24 | github.com/davecgh/go-spew v1.1.1 // indirect | 25 | github.com/davecgh/go-spew v1.1.1 // indirect |
25 | github.com/fatih/color v1.7.0 // indirect | 26 | github.com/fatih/color v1.7.0 // indirect |
27 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect | ||
26 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect | 28 | github.com/golang-jwt/jwt v3.2.2+incompatible // indirect |
27 | github.com/golang/protobuf v1.5.2 // indirect | 29 | github.com/golang/protobuf v1.5.3 // indirect |
28 | github.com/golang/snappy v0.0.4 // indirect | 30 | github.com/golang/snappy v0.0.4 // indirect |
31 | github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect | ||
29 | github.com/hashicorp/errwrap v1.1.0 // indirect | 32 | github.com/hashicorp/errwrap v1.1.0 // indirect |
30 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect | 33 | github.com/hashicorp/go-cleanhttp v0.5.2 // indirect |
31 | github.com/hashicorp/go-hclog v0.16.2 // indirect | 34 | github.com/hashicorp/go-hclog v0.16.2 // indirect |
@@ -55,22 +58,29 @@ require ( | |||
55 | github.com/mitchellh/mapstructure v1.5.0 // indirect | 58 | github.com/mitchellh/mapstructure v1.5.0 // indirect |
56 | github.com/mitchellh/reflectwalk v1.0.0 // indirect | 59 | github.com/mitchellh/reflectwalk v1.0.0 // indirect |
57 | github.com/oklog/run v1.0.0 // indirect | 60 | github.com/oklog/run v1.0.0 // indirect |
61 | github.com/onsi/ginkgo/v2 v2.9.5 // indirect | ||
58 | github.com/pierrec/lz4 v2.5.2+incompatible // indirect | 62 | github.com/pierrec/lz4 v2.5.2+incompatible // indirect |
59 | github.com/pmezard/go-difflib v1.0.0 // indirect | 63 | github.com/pmezard/go-difflib v1.0.0 // indirect |
60 | github.com/prometheus/client_model v0.2.0 // indirect | 64 | github.com/prometheus/client_model v0.2.0 // indirect |
61 | github.com/prometheus/common v0.32.1 // indirect | 65 | github.com/prometheus/common v0.32.1 // indirect |
62 | github.com/prometheus/procfs v0.6.0 // indirect | 66 | github.com/prometheus/procfs v0.6.0 // indirect |
67 | github.com/quic-go/qpack v0.4.0 // indirect | ||
68 | github.com/quic-go/qtls-go1-20 v0.3.4 // indirect | ||
63 | github.com/ryanuber/go-glob v1.0.0 // indirect | 69 | github.com/ryanuber/go-glob v1.0.0 // indirect |
64 | github.com/valyala/bytebufferpool v1.0.0 // indirect | 70 | github.com/valyala/bytebufferpool v1.0.0 // indirect |
65 | github.com/valyala/fasttemplate v1.2.1 // indirect | 71 | github.com/valyala/fasttemplate v1.2.1 // indirect |
66 | go.uber.org/atomic v1.9.0 // indirect | 72 | go.uber.org/atomic v1.9.0 // indirect |
73 | go.uber.org/mock v0.3.0 // indirect | ||
67 | golang.org/x/crypto v0.11.0 // indirect | 74 | golang.org/x/crypto v0.11.0 // indirect |
75 | golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect | ||
76 | golang.org/x/mod v0.11.0 // indirect | ||
68 | golang.org/x/net v0.10.0 // indirect | 77 | golang.org/x/net v0.10.0 // indirect |
69 | golang.org/x/sys v0.10.0 // indirect | 78 | golang.org/x/sys v0.10.0 // indirect |
70 | golang.org/x/text v0.11.0 // indirect | 79 | golang.org/x/text v0.11.0 // indirect |
71 | golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect | 80 | golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect |
81 | golang.org/x/tools v0.9.1 // indirect | ||
72 | google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 // indirect | 82 | google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 // indirect |
73 | google.golang.org/grpc v1.41.0 // indirect | 83 | google.golang.org/grpc v1.41.0 // indirect |
74 | google.golang.org/protobuf v1.26.0 // indirect | 84 | google.golang.org/protobuf v1.28.0 // indirect |
75 | gopkg.in/yaml.v3 v3.0.1 // indirect | 85 | gopkg.in/yaml.v3 v3.0.1 // indirect |
76 | ) | 86 | ) |
diff --git a/echo/go.sum b/echo/go.sum index 29682fa..a2d908f 100644 --- a/echo/go.sum +++ b/echo/go.sum | |||
@@ -104,7 +104,10 @@ github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9p | |||
104 | github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | 104 | github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= |
105 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | 105 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= |
106 | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= | 106 | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= |
107 | github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= | ||
107 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | 108 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= |
109 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= | ||
110 | github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= | ||
108 | github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= | 111 | github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= |
109 | github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= | 112 | github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= |
110 | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | 113 | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= |
@@ -136,8 +139,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD | |||
136 | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | 139 | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= |
137 | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= | 140 | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= |
138 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= | 141 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= |
139 | github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= | ||
140 | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | 142 | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= |
143 | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= | ||
144 | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= | ||
141 | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= | 145 | github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= |
142 | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= | 146 | github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= |
143 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | 147 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= |
@@ -150,8 +154,8 @@ github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ | |||
150 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 154 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
151 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 155 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
152 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 156 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
153 | github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= | ||
154 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= | 157 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= |
158 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= | ||
155 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= | 159 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= |
156 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= | 160 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= |
157 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= | 161 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= |
@@ -162,6 +166,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf | |||
162 | github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | 166 | github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= |
163 | github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | 167 | github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= |
164 | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= | 168 | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= |
169 | github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= | ||
170 | github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= | ||
165 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= | 171 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= |
166 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= | 172 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= |
167 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= | 173 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= |
@@ -225,6 +231,7 @@ github.com/hashicorp/vault/sdk v0.6.0/go.mod h1:+DRpzoXIdMvKc88R4qxr+edwy/RvH5QK | |||
225 | github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= | 231 | github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= |
226 | github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= | 232 | github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= |
227 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | 233 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= |
234 | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= | ||
228 | github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | 235 | github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= |
229 | github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= | 236 | github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= |
230 | github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= | 237 | github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= |
@@ -292,6 +299,9 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW | |||
292 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | 299 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= |
293 | github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= | 300 | github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= |
294 | github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= | 301 | github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= |
302 | github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= | ||
303 | github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= | ||
304 | github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= | ||
295 | github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= | 305 | github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= |
296 | github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= | 306 | github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= |
297 | github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= | 307 | github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= |
@@ -325,6 +335,12 @@ github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+Gx | |||
325 | github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= | 335 | github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= |
326 | github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= | 336 | github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= |
327 | github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= | 337 | github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= |
338 | github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo= | ||
339 | github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A= | ||
340 | github.com/quic-go/qtls-go1-20 v0.3.4 h1:MfFAPULvst4yoMgY9QmtpYmfij/em7O8UUi+bNVm7Cg= | ||
341 | github.com/quic-go/qtls-go1-20 v0.3.4/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= | ||
342 | github.com/quic-go/quic-go v0.39.0 h1:AgP40iThFMY0bj8jGxROhw3S0FMGa8ryqsmi9tBH3So= | ||
343 | github.com/quic-go/quic-go v0.39.0/go.mod h1:T09QsDQWjLiQ74ZmacDfqZmhY/NLnw5BC40MANNNZ1Q= | ||
328 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= | 344 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= |
329 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= | 345 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= |
330 | github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= | 346 | github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= |
@@ -342,6 +358,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf | |||
342 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | 358 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= |
343 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= | 359 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= |
344 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= | 360 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= |
361 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||
345 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | 362 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= |
346 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | 363 | github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= |
347 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= | 364 | github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= |
@@ -364,6 +381,8 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= | |||
364 | go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= | 381 | go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= |
365 | go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= | 382 | go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= |
366 | go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= | 383 | go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= |
384 | go.uber.org/mock v0.3.0 h1:3mUxI1No2/60yUYax92Pt8eNOEecx2D3lcXZh2NEZJo= | ||
385 | go.uber.org/mock v0.3.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= | ||
367 | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | 386 | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= |
368 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | 387 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= |
369 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | 388 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= |
@@ -384,6 +403,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 | |||
384 | golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= | 403 | golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= |
385 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= | 404 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= |
386 | golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= | 405 | golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= |
406 | golang.org/x/exp v0.0.0-20221205204356-47842c84f3db h1:D/cFflL63o2KSLJIwjlcIt8PR064j/xsmdEJL/YvY/o= | ||
407 | golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= | ||
387 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= | 408 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= |
388 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= | 409 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= |
389 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | 410 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= |
@@ -404,6 +425,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB | |||
404 | golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= | 425 | golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= |
405 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | 426 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= |
406 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= | 427 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= |
428 | golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= | ||
429 | golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= | ||
407 | golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | 430 | golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
408 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | 431 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
409 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | 432 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= |
@@ -556,10 +579,11 @@ golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roY | |||
556 | golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | 579 | golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= |
557 | golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | 580 | golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= |
558 | golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= | 581 | golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= |
582 | golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= | ||
583 | golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= | ||
559 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 584 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
560 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 585 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
561 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 586 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
562 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= | ||
563 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= | 587 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= |
564 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= | 588 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= |
565 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= | 589 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= |
@@ -643,8 +667,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD | |||
643 | google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= | 667 | google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= |
644 | google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= | 668 | google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= |
645 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= | 669 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= |
646 | google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= | ||
647 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= | 670 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= |
671 | google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= | ||
672 | google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= | ||
648 | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | 673 | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= |
649 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | 674 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |
650 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | 675 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= |
diff --git a/echo/internal_wrappers.go b/echo/internal_wrappers.go new file mode 100644 index 0000000..557df02 --- /dev/null +++ b/echo/internal_wrappers.go | |||
@@ -0,0 +1,65 @@ | |||
1 | package echo | ||
2 | |||
3 | import ( | ||
4 | "context" | ||
5 | "net/http" | ||
6 | "time" | ||
7 | |||
8 | "code.crute.us/mcrute/golib/log" | ||
9 | |||
10 | "github.com/quic-go/quic-go/http3" | ||
11 | ) | ||
12 | |||
13 | // webServer is an interface to hide the difference between an http 1/2 | ||
14 | // server and an http3 server. | ||
15 | type webServer interface { | ||
16 | LogStart(log.LeveledLogger) | ||
17 | ListenAndServe() error | ||
18 | Shutdown(context.Context) error | ||
19 | } | ||
20 | |||
21 | type netHttpWrapper struct { | ||
22 | *http.Server | ||
23 | } | ||
24 | |||
25 | var _ webServer = (*netHttpWrapper)(nil) | ||
26 | |||
27 | func (w *netHttpWrapper) LogStart(l log.LeveledLogger) { | ||
28 | kind := "https" | ||
29 | if w.TLSConfig == nil { | ||
30 | kind = "http" | ||
31 | } | ||
32 | |||
33 | l.Infof("Starting %s server with address: %s", kind, w.Addr) | ||
34 | } | ||
35 | |||
36 | func (w *netHttpWrapper) ListenAndServe() error { | ||
37 | if w.TLSConfig != nil { | ||
38 | return w.Server.ListenAndServeTLS("", "") | ||
39 | } else { | ||
40 | return w.Server.ListenAndServe() | ||
41 | } | ||
42 | } | ||
43 | |||
44 | type http3Wrapper struct { | ||
45 | *http3.Server | ||
46 | } | ||
47 | |||
48 | var _ webServer = (*http3Wrapper)(nil) | ||
49 | |||
50 | func (w *http3Wrapper) LogStart(l log.LeveledLogger) { | ||
51 | l.Infof("Starting http3 server with address: %s", w.Addr) | ||
52 | } | ||
53 | |||
54 | func (w *http3Wrapper) ListenAndServe() error { | ||
55 | return w.Serve(nil) | ||
56 | } | ||
57 | |||
58 | func (w *http3Wrapper) Shutdown(ctx context.Context) error { | ||
59 | dl, ok := ctx.Deadline() | ||
60 | if ok { | ||
61 | return w.CloseGracefully(time.Until(dl)) | ||
62 | } else { | ||
63 | return w.CloseGracefully(1 * time.Minute) | ||
64 | } | ||
65 | } | ||
diff --git a/echo/middleware/alt_svc.go b/echo/middleware/alt_svc.go new file mode 100644 index 0000000..27ab5ce --- /dev/null +++ b/echo/middleware/alt_svc.go | |||
@@ -0,0 +1,17 @@ | |||
1 | package middleware | ||
2 | |||
3 | import ( | ||
4 | "fmt" | ||
5 | |||
6 | "github.com/labstack/echo/v4" | ||
7 | ) | ||
8 | |||
9 | func Http3AltSvcMiddleware(port int) echo.MiddlewareFunc { | ||
10 | h3Svc := fmt.Sprintf(`h3=":%d"`, port) | ||
11 | return func(next echo.HandlerFunc) echo.HandlerFunc { | ||
12 | return func(c echo.Context) error { | ||
13 | c.Response().Header().Add("Alt-Svc", h3Svc) | ||
14 | return next(c) | ||
15 | } | ||
16 | } | ||
17 | } | ||
diff --git a/echo/ports.go b/echo/ports.go index bdd97fe..542446e 100644 --- a/echo/ports.go +++ b/echo/ports.go | |||
@@ -9,9 +9,18 @@ import ( | |||
9 | type AddressPortConfig struct { | 9 | type AddressPortConfig struct { |
10 | HttpPort int | 10 | HttpPort int |
11 | TlsPort int | 11 | TlsPort int |
12 | QuicPort int | ||
12 | Addresses []string | 13 | Addresses []string |
13 | } | 14 | } |
14 | 15 | ||
16 | func (c *AddressPortConfig) QuicBindings() []string { | ||
17 | o := make([]string, len(c.Addresses)) | ||
18 | for i, a := range c.Addresses { | ||
19 | o[i] = net.JoinHostPort(a, strconv.Itoa(c.QuicPort)) | ||
20 | } | ||
21 | return o | ||
22 | } | ||
23 | |||
15 | func (c *AddressPortConfig) TlsBindings() []string { | 24 | func (c *AddressPortConfig) TlsBindings() []string { |
16 | o := make([]string, len(c.Addresses)) | 25 | o := make([]string, len(c.Addresses)) |
17 | for i, a := range c.Addresses { | 26 | for i, a := range c.Addresses { |
@@ -60,6 +69,7 @@ func ParseAddressPortBindings(b []string) (*AddressPortConfig, error) { | |||
60 | } | 69 | } |
61 | 70 | ||
62 | o.TlsPort = o.HttpPort + 1 | 71 | o.TlsPort = o.HttpPort + 1 |
72 | o.QuicPort = o.TlsPort | ||
63 | 73 | ||
64 | return o, nil | 74 | return o, nil |
65 | } | 75 | } |