|
@@ -38,8 +38,8 @@ var (
|
38
|
38
|
)
|
39
|
39
|
|
40
|
40
|
const (
|
41
|
|
- // when shutting down the REST and websocket servers, wait this long
|
42
|
|
- // before killing active non-WS connections. TODO: this might not be
|
|
41
|
+ // when shutting down the REST server, wait this long
|
|
42
|
+ // before killing active connections. TODO: this might not be
|
43
|
43
|
// necessary at all? but it seems prudent to avoid potential resource
|
44
|
44
|
// leaks
|
45
|
45
|
httpShutdownTimeout = time.Second
|
|
@@ -124,7 +124,6 @@ type Server struct {
|
124
|
124
|
store *buntdb.DB
|
125
|
125
|
stsEnabled bool
|
126
|
126
|
whoWas *WhoWasList
|
127
|
|
- wsServer *http.Server
|
128
|
127
|
}
|
129
|
128
|
|
130
|
129
|
var (
|
|
@@ -382,75 +381,6 @@ func (server *Server) createListener(addr string, tlsConfig *tls.Config) *Listen
|
382
|
381
|
return &wrapper
|
383
|
382
|
}
|
384
|
383
|
|
385
|
|
-//
|
386
|
|
-// websocket listen goroutine
|
387
|
|
-//
|
388
|
|
-
|
389
|
|
-func (server *Server) setupWSListener(config *Config) {
|
390
|
|
- // unconditionally shut down the old listener because we can't tell
|
391
|
|
- // whether we need to reload the TLS certificate
|
392
|
|
- if server.wsServer != nil {
|
393
|
|
- ctx, _ := context.WithTimeout(context.Background(), httpShutdownTimeout)
|
394
|
|
- server.wsServer.Shutdown(ctx)
|
395
|
|
- server.wsServer.Close()
|
396
|
|
- }
|
397
|
|
-
|
398
|
|
- if config.Server.Wslisten == "" {
|
399
|
|
- server.wsServer = nil
|
400
|
|
- return
|
401
|
|
- }
|
402
|
|
-
|
403
|
|
- addr := config.Server.Wslisten
|
404
|
|
- tlsConfig := config.Server.TLSListeners[addr]
|
405
|
|
- handler := http.NewServeMux()
|
406
|
|
- wsServer := http.Server{
|
407
|
|
- Addr: addr,
|
408
|
|
- Handler: handler,
|
409
|
|
- }
|
410
|
|
-
|
411
|
|
- handler.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
412
|
|
- if r.Method != "GET" {
|
413
|
|
- server.logger.Error("ws", addr, fmt.Sprintf("%s method not allowed", r.Method))
|
414
|
|
- return
|
415
|
|
- }
|
416
|
|
-
|
417
|
|
- // We don't have any subprotocols, so if someone attempts to `new
|
418
|
|
- // WebSocket(server, "subprotocol")` they'll break here, instead of
|
419
|
|
- // getting the default, ambiguous, response from gorilla.
|
420
|
|
- if v, ok := r.Header["Sec-Websocket-Protocol"]; ok {
|
421
|
|
- http.Error(w, fmt.Sprintf("WebSocket subprocotols (e.g. %s) not supported", v), 400)
|
422
|
|
- }
|
423
|
|
-
|
424
|
|
- ws, err := upgrader.Upgrade(w, r, nil)
|
425
|
|
- if err != nil {
|
426
|
|
- server.logger.Error("ws", addr, fmt.Sprintf("%s websocket upgrade error: %s", server.name, err))
|
427
|
|
- return
|
428
|
|
- }
|
429
|
|
-
|
430
|
|
- newConn := clientConn{
|
431
|
|
- Conn: WSContainer{ws},
|
432
|
|
- IsTLS: tlsConfig != nil,
|
433
|
|
- }
|
434
|
|
- server.newConns <- newConn
|
435
|
|
- })
|
436
|
|
-
|
437
|
|
- go func() {
|
438
|
|
- var err error
|
439
|
|
- server.logger.Info("listeners", fmt.Sprintf("websocket listening on %s, tls=%t.", addr, tlsConfig != nil))
|
440
|
|
-
|
441
|
|
- if tlsConfig != nil {
|
442
|
|
- err = wsServer.ListenAndServeTLS(tlsConfig.Cert, tlsConfig.Key)
|
443
|
|
- } else {
|
444
|
|
- err = wsServer.ListenAndServe()
|
445
|
|
- }
|
446
|
|
- if err != nil {
|
447
|
|
- server.logger.Error("listeners", fmt.Sprintf("websocket ListenAndServe error: %s", err))
|
448
|
|
- }
|
449
|
|
- }()
|
450
|
|
-
|
451
|
|
- server.wsServer = &wsServer
|
452
|
|
-}
|
453
|
|
-
|
454
|
384
|
// generateMessageID returns a network-unique message ID.
|
455
|
385
|
func (server *Server) generateMessageID() string {
|
456
|
386
|
return fmt.Sprintf("%s-%s", strconv.FormatInt(time.Now().UTC().UnixNano(), 10), strconv.FormatInt(rand.Int63(), 10))
|
|
@@ -1497,7 +1427,6 @@ func (server *Server) applyConfig(config *Config, initial bool) error {
|
1497
|
1427
|
|
1498
|
1428
|
// we are now open for business
|
1499
|
1429
|
server.setupListeners(config)
|
1500
|
|
- server.setupWSListener(config)
|
1501
|
1430
|
server.setupRestAPI(config)
|
1502
|
1431
|
|
1503
|
1432
|
return nil
|