Allow specifying custom http.Client to connection manager for WebSocket connections

This commit is contained in:
Neil Alexander 2022-04-11 14:28:53 +01:00
parent e80b089669
commit f686361e6d
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
4 changed files with 18 additions and 8 deletions

View file

@ -132,7 +132,7 @@ func (m *Pinecone) Start() {
m.PineconeRouter = pineconeRouter.NewRouter(m.logger, sk, false)
m.PineconeMulticast = pineconeMulticast.NewMulticast(m.logger, m.PineconeRouter)
m.PineconeManager = pineconeConnections.NewConnectionManager(m.PineconeRouter)
m.PineconeManager = pineconeConnections.NewConnectionManager(m.PineconeRouter, nil)
}
func (m *Pinecone) Stop() {

View file

@ -57,7 +57,7 @@ func main() {
pineconeRouter := router.NewRouter(logger, sk, false)
pineconeMulticast := multicast.NewMulticast(logger, pineconeRouter)
pineconeMulticast.Start()
pineconeManager := connections.NewConnectionManager(pineconeRouter)
pineconeManager := connections.NewConnectionManager(pineconeRouter, nil)
listentcp := flag.String("listen", ":0", "address to listen for TCP connections")
listenws := flag.String("listenws", ":0", "address to listen for WebSockets connections")

View file

@ -72,7 +72,7 @@ func main() {
pineconeRouter := router.NewRouter(logger, sk, false)
pineconeMulticast := multicast.NewMulticast(logger, pineconeRouter)
pineconeMulticast.Start()
pineconeManager := connections.NewConnectionManager(pineconeRouter)
pineconeManager := connections.NewConnectionManager(pineconeRouter, nil)
pineconeTUN, err := tun.NewTUN(pineconeRouter)
if err != nil {
panic(err)

View file

@ -19,6 +19,7 @@ import (
"fmt"
"math"
"net"
"net/http"
"strings"
"time"
@ -35,6 +36,8 @@ type ConnectionManager struct {
ctx context.Context
cancel context.CancelFunc
router *router.Router
client *http.Client
ws *websocket.DialOptions
_staticPeers map[string]*connectionAttempts
_connectedPeers map[string]struct{}
}
@ -44,15 +47,22 @@ type connectionAttempts struct {
next time.Time
}
func NewConnectionManager(r *router.Router) *ConnectionManager {
func NewConnectionManager(r *router.Router, client *http.Client) *ConnectionManager {
ctx, cancel := context.WithCancel(context.Background())
m := &ConnectionManager{
ctx: ctx,
cancel: cancel,
router: r,
ctx: ctx,
cancel: cancel,
router: r,
client: client,
ws: &websocket.DialOptions{
HTTPClient: client,
},
_staticPeers: map[string]*connectionAttempts{},
_connectedPeers: map[string]struct{}{},
}
if m.ws.HTTPClient == nil {
m.ws.HTTPClient = http.DefaultClient
}
time.AfterFunc(interval, m._worker)
return m
}
@ -82,7 +92,7 @@ func (m *ConnectionManager) _connect(uri string) {
case strings.HasPrefix(uri, "ws://"):
fallthrough
case strings.HasPrefix(uri, "wss://"):
c, _, err := websocket.Dial(ctx, uri, nil)
c, _, err := websocket.Dial(ctx, uri, m.ws)
if err != nil {
result(err)
return