1
0
Fork 0
forked from External/grumble

Merge pull request #51 from olabiniV2/optional_webport

Add a configuration parameter making it possible to avoid the web port
This commit is contained in:
Derrick 2020-04-11 18:59:52 -07:00 committed by GitHub
commit 00b8984bd4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1358,6 +1358,12 @@ func (server *Server) Port() int {
return port return port
} }
// ListenWebPort returns true if we should listen to the
// web port, otherwise false
func (server *Server) ListenWebPort() bool {
return !server.cfg.BoolValue("NoWebServer")
}
// WebPort returns the port the web server will listen on when it is // WebPort returns the port the web server will listen on when it is
// started. // started.
func (server *Server) WebPort() int { func (server *Server) WebPort() int {
@ -1399,6 +1405,7 @@ func (server *Server) Start() (err error) {
host := server.HostAddress() host := server.HostAddress()
port := server.Port() port := server.Port()
webport := server.WebPort() webport := server.WebPort()
shouldListenWeb := server.ListenWebPort()
// Setup our UDP listener // Setup our UDP listener
server.udpconn, err = net.ListenUDP("udp", &net.UDPAddr{IP: net.ParseIP(host), Port: port}) server.udpconn, err = net.ListenUDP("udp", &net.UDPAddr{IP: net.ParseIP(host), Port: port})
@ -1437,6 +1444,7 @@ func (server *Server) Start() (err error) {
} }
server.tlsl = tls.NewListener(server.tcpl, server.tlscfg) server.tlsl = tls.NewListener(server.tcpl, server.tlscfg)
if shouldListenWeb {
// Create HTTP server and WebSocket "listener" // Create HTTP server and WebSocket "listener"
webaddr := &net.TCPAddr{IP: net.ParseIP(host), Port: webport} webaddr := &net.TCPAddr{IP: net.ParseIP(host), Port: webport}
server.webtlscfg = &tls.Config{ server.webtlscfg = &tls.Config{
@ -1468,6 +1476,10 @@ func (server *Server) Start() (err error) {
}() }()
server.Printf("Started: listening on %v and %v", server.tcpl.Addr(), server.webwsl.Addr()) server.Printf("Started: listening on %v and %v", server.tcpl.Addr(), server.webwsl.Addr())
} else {
server.Printf("Started: listening on %v", server.tcpl.Addr())
}
server.running = true server.running = true
// Open a fresh freezer log // Open a fresh freezer log
@ -1490,10 +1502,17 @@ func (server *Server) Start() (err error) {
// for the servers. Each network goroutine defers a call to // for the servers. Each network goroutine defers a call to
// netwg.Done(). In the Stop() we close all the connections // netwg.Done(). In the Stop() we close all the connections
// and call netwg.Wait() to wait for the goroutines to end. // and call netwg.Wait() to wait for the goroutines to end.
server.netwg.Add(3) numWG := 2
if shouldListenWeb {
numWG++
}
server.netwg.Add(numWG)
go server.udpListenLoop() go server.udpListenLoop()
go server.acceptLoop(server.tlsl) go server.acceptLoop(server.tlsl)
if shouldListenWeb {
go server.acceptLoop(server.webwsl) go server.acceptLoop(server.webwsl)
}
// Schedule a server registration update (if needed) // Schedule a server registration update (if needed)
go func() { go func() {
@ -1523,6 +1542,7 @@ func (server *Server) Stop() (err error) {
// This does not apply to opened WebSockets, which were forcibly closed when // This does not apply to opened WebSockets, which were forcibly closed when
// all clients were disconnected. // all clients were disconnected.
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(15*time.Second)) ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(15*time.Second))
if server.ListenWebPort() {
err = server.webhttp.Shutdown(ctx) err = server.webhttp.Shutdown(ctx)
cancel() cancel()
if err == context.DeadlineExceeded { if err == context.DeadlineExceeded {
@ -1531,12 +1551,14 @@ func (server *Server) Stop() (err error) {
return err return err
} }
// Close the listeners err = server.webwsl.Close()
err = server.tlsl.Close()
if err != nil { if err != nil {
return err return err
} }
err = server.webwsl.Close() }
// Close the listeners
err = server.tlsl.Close()
if err != nil { if err != nil {
return err return err
} }