Skip to content

Commit c0a043b

Browse files
itsai220Eric Powersjuliensldezmmatur
authored
Release 5.0.0 merge master (#12)
* Fixed: Remove data race around default dialer (#6) * Use gorilla DialContext (vulcand#158) * Handle Te header when http2 (vulcand#157) * fix: buffer error and go1.11. (vulcand#159) * fix: buffer error and go1.11. * chore: add go1.11 in Travis. * review: comment. * fix: use internal logger. (vulcand#160) * fix: body should never be nil (vulcand#162) * Pass host header for Websocket. (vulcand#163) * feat: pass host header for Websocket. * add tests. * fix: golint. (vulcand#165) * Flush when we have unannonced trailers (vulcand#168) * Flush when we have unannonced trailers * Remove 1.8, not supported in golint anymore * add missing callback on close of hijacked connections (vulcand#175) * Allowing sticky session's affinity cookies to be created with more options such as HttpOnly or Secure (vulcand#174) * Ensuring the CookieOption struct's fields are exported (vulcand#179) * ensuring the CookieOption struct's fields are exported (vulcand#174) * dep ensuring * Updating failing test, I should pay more attention * dep ensuring has caused problems, reverting. Although this is really strange that dep should do this * chore: migrate to go module. (vulcand#182) * Update README.md Go library change godoc to "pkg.go.dev" * feat: add more cookie options. (vulcand#195) * chore: update dependencies. * feat: add more cookie options. * chore: update travis configuration. * Add Fallback setter on CircuitBreaker (vulcand#201) Signed-off-by: Sylvain Rabot <sylvain@abstraction.fr> * review. * doc: buffer.go: s/request/response/ (vulcand#172) * doc: typo fix /serveHTTP/serveWebSocket/s (vulcand#176) * Make the MakeRateError delay field public so that custom RateErrHandlers can be more easily written (vulcand#206) * fix typo (vulcand#212) * Fix panics on ratelimit period (division by zero) (vulcand#213) * Bump to go1.16 (vulcand#214) * Add a mechanism to format the sticky cookie value (vulcand#216) Co-authored-by: Tom Moulard <tom.moulard@traefik.io> Co-authored-by: M <m@cognusion.com> Co-authored-by: Sylvain Rabot <sylvain@abstraction.fr> * Do not use global websocket.DefaultDialer This change makes it so that each forward gets its own dialer rather then all sharing the global `websocket.DefaultDialer`. It fixes the flaky `TestWebSocketNumGoRoutine` test and allows `WebsocketTLSClientConfig` to set a different TLS config than the one used in the http `RoundTripper`, the TLS config in the http `RoundTripper` will still be used as a fallback if one wasn't set by the user. Adds the new `optSetter` `WebsocketNetDialContext` to set a custom DialContet for WebSocket use. - `go test -run=TestWebSocketNumGoRoutine -count=100 ./forward` now passes. Removed the skip directive. - Closes vulcand#199 - Closes vulcand#125 * Revert un-skipping test * Update: Cleanup local and remote merged changes Co-authored-by: SALLEYRON Julien <julien.salleyron@gmail.com> Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com> Co-authored-by: Michael <mmatur@users.noreply.github.com> Co-authored-by: ravilr <raviprasad_lr@yahoo.com> Co-authored-by: Amir Keibi <gheibia@users.noreply.github.com> Co-authored-by: colynn.liu <colynnliu@foxmail.com> Co-authored-by: Sylvain Rabot <sylvain@abstraction.fr> Co-authored-by: Fernandez Ludovic <lfernandez.dev@gmail.com> Co-authored-by: colynn.liu <colynn.liu@gmail.com> Co-authored-by: Wes Turner <50891+westurner@users.noreply.github.com> Co-authored-by: Ben Yanke <ben@benyanke.com> Co-authored-by: Peter C <somethingnew2-0@users.noreply.github.com> Co-authored-by: Iman Sahebi <iman.s_sani@yahoo.com> Co-authored-by: Douglas De Toni Machado <douglas.machado@traefik.io> Co-authored-by: Romain <rtribotte@users.noreply.github.com> Co-authored-by: Jean-Baptiste Doumenjou <925513+jbdoumenjou@users.noreply.github.com> Co-authored-by: Tom Moulard <tom.moulard@traefik.io> Co-authored-by: M <m@cognusion.com> Co-authored-by: Clifton Kaznocha <ckaznocha@users.noreply.github.com> Co-authored-by: Clifton Kaznocha <ckaznocha@gmail.com> * fixed: forwarder did not set deadline for ws connections (#11) * fixed: forwarder did not set deadline for ws connections * remove debug prints Co-authored-by: Primalmotion <primalmotion@pm.me> Co-authored-by: Eric Powers <epowers@paloaltonetworks.com> Co-authored-by: SALLEYRON Julien <julien.salleyron@gmail.com> Co-authored-by: Ludovic Fernandez <ldez@users.noreply.github.com> Co-authored-by: Michael <mmatur@users.noreply.github.com> Co-authored-by: ravilr <raviprasad_lr@yahoo.com> Co-authored-by: Amir Keibi <gheibia@users.noreply.github.com> Co-authored-by: colynn.liu <colynnliu@foxmail.com> Co-authored-by: Sylvain Rabot <sylvain@abstraction.fr> Co-authored-by: Fernandez Ludovic <lfernandez.dev@gmail.com> Co-authored-by: colynn.liu <colynn.liu@gmail.com> Co-authored-by: Wes Turner <50891+westurner@users.noreply.github.com> Co-authored-by: Ben Yanke <ben@benyanke.com> Co-authored-by: Peter C <somethingnew2-0@users.noreply.github.com> Co-authored-by: Iman Sahebi <iman.s_sani@yahoo.com> Co-authored-by: Douglas De Toni Machado <douglas.machado@traefik.io> Co-authored-by: Romain <rtribotte@users.noreply.github.com> Co-authored-by: Jean-Baptiste Doumenjou <925513+jbdoumenjou@users.noreply.github.com> Co-authored-by: Tom Moulard <tom.moulard@traefik.io> Co-authored-by: M <m@cognusion.com> Co-authored-by: Clifton Kaznocha <ckaznocha@users.noreply.github.com> Co-authored-by: Clifton Kaznocha <ckaznocha@gmail.com> Co-authored-by: primalmotion <208711+primalmotion@users.noreply.github.com> Co-authored-by: Primalmotion <primalmotion@pm.me>
1 parent 5fac166 commit c0a043b

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

forward/fwd.go

+21-2
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ func WebsocketNetDialContext(dialContext func(ctx context.Context, network strin
8989
}
9090
}
9191

92+
// WebsocketPongWait sets the max time to wait for a pong
93+
// before closing the connection.
94+
func WebsocketPongWait(wait time.Duration) optSetter {
95+
return func(f *Forwarder) error {
96+
f.httpForwarder.websocketPongWait = wait
97+
return nil
98+
}
99+
}
100+
92101
// ErrorHandler is a functional argument that sets error handler of the server
93102
func ErrorHandler(h utils.ErrorHandler) optSetter {
94103
return func(f *Forwarder) error {
@@ -202,6 +211,7 @@ type httpForwarder struct {
202211
bufferPool httputil.BufferPool
203212
websocketConnectionClosedHook func(req *http.Request, conn net.Conn)
204213
websocketDialer *websocket.Dialer
214+
websocketPongWait time.Duration
205215
}
206216

207217
const defaultFlushInterval = time.Duration(100) * time.Millisecond
@@ -218,7 +228,10 @@ type UrlForwardingStateListener func(*url.URL, int)
218228
// New creates an instance of Forwarder based on the provided list of configuration options
219229
func New(setters ...optSetter) (*Forwarder, error) {
220230
f := &Forwarder{
221-
httpForwarder: &httpForwarder{log: &internalLogger{Logger: log.StandardLogger()}},
231+
httpForwarder: &httpForwarder{
232+
log: &internalLogger{Logger: log.StandardLogger()},
233+
websocketPongWait: 30 * time.Second,
234+
},
222235
handlerContext: &handlerContext{},
223236
}
224237

@@ -420,10 +433,16 @@ func (f *httpForwarder) serveWebSocket(w http.ResponseWriter, req *http.Request,
420433
})
421434

422435
src.SetPongHandler(func(data string) error {
423-
return forward(websocket.PongMessage, bytes.NewReader([]byte(data)))
436+
if err := forward(websocket.PongMessage, bytes.NewReader([]byte(data))); err != nil {
437+
return err
438+
}
439+
return src.SetReadDeadline(time.Now().Add(f.websocketPongWait))
424440
})
425441

426442
for {
443+
444+
src.SetReadDeadline(time.Now().Add(f.websocketPongWait))
445+
427446
msgType, reader, err := src.NextReader()
428447

429448
if err != nil {

0 commit comments

Comments
 (0)