[server] Add support for Go HTTP plain server for non TLS.

This commit is contained in:
Ciprian Dorin Craciun 2021-12-18 01:29:57 +02:00
parent 0da155a72c
commit 2621994fb6

View file

@ -42,10 +42,11 @@ import _ "embed"
type server struct {
httpServer *fasthttp.Server
httpsServer *fasthttp.Server
https2Server *http.Server
quicServer *http3.Server
httpPlain1Server *fasthttp.Server
httpPlain2Server *http.Server
httpTls1Server *fasthttp.Server
httpTls2Server *http.Server
httpQuicServer *http3.Server
cdbReader *cdb.CDB
cachedFileFingerprints map[string][]byte
cachedDataMeta map[string][]byte
@ -458,7 +459,7 @@ func (_server *server) ServeHTTP (_response http.ResponseWriter, _request *http.
log.Printf ("[dd] [524cd64b] [go-http.] using Go HTTP/2 for `%s`...", _request.URL.Path)
}
case 3 :
_requestProtoUnsupported = (_server.quicServer == nil) || (_request.ProtoMinor != 0)
_requestProtoUnsupported = (_server.httpQuicServer == nil) || (_request.ProtoMinor != 0)
if _server.debug && !_requestProtoUnsupported {
log.Printf ("[dd] [be95da51] [go-http.] using QUIC HTTP/3 for `%s`...", _request.URL.Path)
}
@ -560,8 +561,9 @@ func main_0 () (error) {
var _bind string
var _bindTls string
var _bindPlain1 string
var _bindPlain2 string
var _bindTls1 string
var _bindTls2 string
var _bindQuic string
var _http1Disabled bool
@ -601,8 +603,9 @@ func main_0 () (error) {
fmt.Fprintf (os.Stderr, "%s", usageText)
}
_bind_0 := _flags.String ("bind", "", "")
_bindTls_0 := _flags.String ("bind-tls", "", "")
_bindPlain1_0 := _flags.String ("bind", "", "")
_bindPlain2_0 := _flags.String ("bind-2", "", "")
_bindTls1_0 := _flags.String ("bind-tls", "", "")
_bindTls2_0 := _flags.String ("bind-tls-2", "", "")
_bindQuic_0 := _flags.String ("bind-quic", "", "")
_http1Disabled_0 := _flags.Bool ("http1-disable", false, "")
@ -635,8 +638,9 @@ func main_0 () (error) {
FlagsParse (_flags, 0, 0)
_bind = *_bind_0
_bindTls = *_bindTls_0
_bindPlain1 = *_bindPlain1_0
_bindPlain2 = *_bindPlain2_0
_bindTls1 = *_bindTls1_0
_bindTls2 = *_bindTls2_0
_bindQuic = *_bindQuic_0
_http1Disabled = *_http1Disabled_0
@ -671,7 +675,7 @@ func main_0 () (error) {
_isFirst = true
}
if (_bind == "") && (_bindTls == "") && (_bindTls2 == "") && (_bindQuic == "") {
if (_bindPlain1 == "") && (_bindPlain2 == "") && (_bindTls1 == "") && (_bindTls2 == "") && (_bindQuic == "") {
AbortError (nil, "[6edd9512] expected bind address argument!")
}
if (*_tlsBundle_0 != "") && ((*_tlsPrivate_0 != "") || (*_tlsPublic_0 != "")) {
@ -687,20 +691,20 @@ func main_0 () (error) {
if ((_tlsPrivate != "") && (_tlsPublic == "")) || ((_tlsPublic != "") && (_tlsPrivate == "")) {
AbortError (nil, "[6e5b42e4] TLS private/public must be specified together!")
}
if ((_tlsPrivate != "") || (_tlsPublic != "")) && ((_bindTls == "") && (_bindTls2 == "") && (_bindQuic == "")) {
if ((_tlsPrivate != "") || (_tlsPublic != "")) && ((_bindTls1 == "") && (_bindTls2 == "") && (_bindQuic == "")) {
AbortError (nil, "[4e31f251] TLS certificate specified, but TLS not enabled!")
}
if _http1Disabled && (_bind != "") {
AbortError (nil, "[f498816a] HTTP/1 is mandatory with `--bind`!")
if _http1Disabled && ((_bindPlain1 != "") || (_bindPlain2 != "")) {
AbortError (nil, "[bd16d596] HTTP/1 is mandatory with `--bind` or `--bind-2`!")
}
if _http1Disabled && (_bindTls != "") {
if _http1Disabled && (_bindTls1 != "") {
AbortError (nil, "[f498816a] HTTP/1 is mandatory with `--bind-tls`!")
}
if _http1Disabled && (_bind == "") && (_bindTls == "") && (_bindTls2 == "") {
if _http1Disabled && (_bindPlain1 == "") && (_bindPlain2 == "") && (_bindTls1 == "") && (_bindTls2 == "") {
log.Printf ("[ww] [6bc56c8e] HTTP/1 is not available!\n")
}
if _http2Disabled && (_bindTls == "") && (_bindTls2 == "") {
if _http2Disabled && (_bindTls1 == "") && (_bindTls2 == "") {
log.Printf ("[ww] [1ed4864c] HTTP/2 is not available!\n")
}
if (_http3AltSvc != "") && (_bindQuic == "") {
@ -796,7 +800,7 @@ func main_0 () (error) {
debug.SetMaxStack (16 * 1024)
_httpServerReduceMemory := false
_httpReduceMemory := false
if _limitMemory > 0 {
@ -844,11 +848,14 @@ func main_0 () (error) {
_processName := os.Args[0]
_processArguments := make ([]string, 0, len (os.Args))
if _bind != "" {
_processArguments = append (_processArguments, "--bind", _bind)
if _bindPlain1 != "" {
_processArguments = append (_processArguments, "--bind", _bindPlain1)
}
if _bindTls != "" {
_processArguments = append (_processArguments, "--bind-tls", _bindTls)
if _bindPlain2 != "" {
_processArguments = append (_processArguments, "--bind-2", _bindPlain2)
}
if _bindTls1 != "" {
_processArguments = append (_processArguments, "--bind-tls", _bindTls1)
}
if _bindTls2 != "" {
_processArguments = append (_processArguments, "--bind-tls-2", _bindTls2)
@ -1313,7 +1320,7 @@ func main_0 () (error) {
_tlsConfig := & tls.Config {
_tls1Config := & tls.Config {
Certificates : nil,
MinVersion : tls.VersionTLS12,
MaxVersion : tls.VersionTLS13,
@ -1336,20 +1343,20 @@ func main_0 () (error) {
NextProtos : []string { "http/1.1", "http/1.0" },
}
if (_bindTls != "") || (_bindTls2 != "") {
if (_bindTls1 != "") || (_bindTls2 != "") {
if _tlsPrivate != "" {
if _certificate, _error := tls.LoadX509KeyPair (_tlsPublic, _tlsPrivate); _error == nil {
_tlsConfig.Certificates = append (_tlsConfig.Certificates, _certificate)
_tls1Config.Certificates = append (_tls1Config.Certificates, _certificate)
} else {
AbortError (_error, "[ecdf443d] [tls.....] failed loading TLS certificate!")
}
}
if len (_tlsConfig.Certificates) == 0 {
if len (_tls1Config.Certificates) == 0 {
if !_quiet {
log.Printf ("[ii] [344ba198] [tls.....] no TLS certificate specified; using self-signed!\n")
}
if _certificate, _error := tls.X509KeyPair ([]byte (DefaultTlsCertificatePublic), []byte (DefaultTlsCertificatePrivate)); _error == nil {
_tlsConfig.Certificates = append (_tlsConfig.Certificates, _certificate)
_tls1Config.Certificates = append (_tls1Config.Certificates, _certificate)
} else {
AbortError (_error, "[98ba6d23] [tls.....] failed parsing TLS certificate!")
}
@ -1359,7 +1366,7 @@ func main_0 () (error) {
_httpServer := & fasthttp.Server {
_httpPlain1Server := & fasthttp.Server {
Name : "kawipiko",
Handler : _server.Serve,
@ -1384,7 +1391,7 @@ func main_0 () (error) {
TCPKeepalive : true,
TCPKeepalivePeriod : 60 * time.Second,
ReduceMemoryUsage : _httpServerReduceMemory,
ReduceMemoryUsage : _httpReduceMemory,
CloseOnShutdown : true,
DisableKeepalive : false,
@ -1394,27 +1401,33 @@ func main_0 () (error) {
}
_httpsServer := & fasthttp.Server {}
*_httpsServer = *_httpServer
_httpTls1Server := & fasthttp.Server {}
*_httpTls1Server = *_httpPlain1Server
_https2Server := & http.Server {
_httpPlain2Server := & http.Server {
Handler : _server,
TLSConfig : nil,
MaxHeaderBytes : _httpsServer.ReadBufferSize,
MaxHeaderBytes : _httpPlain1Server.ReadBufferSize,
ReadTimeout : _httpsServer.ReadTimeout,
ReadHeaderTimeout : _httpsServer.ReadTimeout,
WriteTimeout : _httpsServer.WriteTimeout,
IdleTimeout : _httpsServer.IdleTimeout,
ReadTimeout : _httpPlain1Server.ReadTimeout,
ReadHeaderTimeout : _httpPlain1Server.ReadTimeout,
WriteTimeout : _httpPlain1Server.WriteTimeout,
IdleTimeout : _httpPlain1Server.IdleTimeout,
}
_tls2Config := _tlsConfig.Clone ()
_httpTls2Server := & http.Server {}
*_httpTls2Server = *_httpPlain2Server
_tls2Config := _tls1Config.Clone ()
if !_http1Disabled && !_http2Disabled {
_tls2Config.NextProtos = []string { "h2", "http/1.1", "http/1.0" }
} else if !_http1Disabled {
@ -1427,29 +1440,38 @@ func main_0 () (error) {
panic ("[1b618ffe]")
}
if !_quiet {
_https2Server.ErrorLog = log.New (os.Stderr, log.Prefix () + "[ee] [f734edc4] [go-http.] | ", 0)
_httpPlain2Server.ErrorLog = log.New (os.Stderr, log.Prefix () + "[ee] [efe8cf82] [go-http.] | ", 0)
} else {
_https2Server.ErrorLog = log.New (ioutil.Discard, "", 0)
_httpPlain2Server.ErrorLog = log.New (ioutil.Discard, "", 0)
}
if !_quiet {
_httpTls2Server.ErrorLog = log.New (os.Stderr, log.Prefix () + "[ee] [f734edc4] [go-http.] | ", 0)
} else {
_httpTls2Server.ErrorLog = log.New (ioutil.Discard, "", 0)
}
_quicServer := & http3.Server {}
_httpQuicServer := & http3.Server {}
_quicServer.Server = & http.Server {
_httpQuicServer.Server = & http.Server {
Handler : _server,
TLSConfig : nil,
}
_quicTlsConfig := _tlsConfig.Clone ()
_quicTlsConfig.NextProtos = []string { "h3", "h3-29" }
_quicServer.Server.TLSConfig = _quicTlsConfig
_tls3Config := _tls1Config.Clone ()
_tls3Config.NextProtos = []string { "h3", "h3-29" }
_httpQuicServer.Server.TLSConfig = _tls3Config
_quicServer.QuicConfig = & quic.Config {
_httpQuicServer.QuicConfig = & quic.Config {
Versions : []quic.VersionNumber {
quic.Version1,
@ -1457,7 +1479,7 @@ func main_0 () (error) {
},
HandshakeIdleTimeout : 6 * time.Second,
MaxIdleTimeout : _httpsServer.IdleTimeout,
MaxIdleTimeout : _httpTls1Server.IdleTimeout,
MaxIncomingStreams : 1024,
MaxIncomingUniStreams : 1024,
@ -1472,9 +1494,9 @@ func main_0 () (error) {
}
if !_quiet {
_quicServer.Server.ErrorLog = log.New (os.Stderr, log.Prefix () + "[ee] [a6af7354] [quic-h3.] | ", 0)
_httpQuicServer.Server.ErrorLog = log.New (os.Stderr, log.Prefix () + "[ee] [a6af7354] [quic-h3.] | ", 0)
} else {
_quicServer.Server.ErrorLog = log.New (ioutil.Discard, "", 0)
_httpQuicServer.Server.ErrorLog = log.New (ioutil.Discard, "", 0)
}
@ -1482,18 +1504,23 @@ func main_0 () (error) {
if _timeoutDisabled {
_httpServer.ReadTimeout = 0
_httpServer.WriteTimeout = 0
_httpServer.IdleTimeout = 0
_httpPlain1Server.ReadTimeout = 0
_httpPlain1Server.WriteTimeout = 0
_httpPlain1Server.IdleTimeout = 0
_httpsServer.ReadTimeout = 0
_httpsServer.WriteTimeout = 0
_httpsServer.IdleTimeout = 0
_httpTls1Server.ReadTimeout = 0
_httpTls1Server.WriteTimeout = 0
_httpTls1Server.IdleTimeout = 0
_https2Server.ReadTimeout = 0
_https2Server.ReadHeaderTimeout = 0
_https2Server.WriteTimeout = 0
_https2Server.IdleTimeout = 0
_httpPlain2Server.ReadTimeout = 0
_httpPlain2Server.ReadHeaderTimeout = 0
_httpPlain2Server.WriteTimeout = 0
_httpPlain2Server.IdleTimeout = 0
_httpTls2Server.ReadTimeout = 0
_httpTls2Server.ReadHeaderTimeout = 0
_httpTls2Server.WriteTimeout = 0
_httpTls2Server.IdleTimeout = 0
}
@ -1507,14 +1534,17 @@ func main_0 () (error) {
if !_quiet && (_debug || _isFirst) {
if _bind != "" {
log.Printf ("[ii] [f11e4e37] [bind-0..] listening on `http://%s/` (using FastHTTP supporting HTTP/1.1, HTTP/1.0);\n", _bind)
if _bindPlain1 != "" {
log.Printf ("[ii] [f11e4e37] [bind-0a.] listening on `http://%s/` (using FastHTTP supporting HTTP/1.1, HTTP/1.0);\n", _bindPlain1)
}
if _bindTls != "" {
if _bindPlain2 != "" {
log.Printf ("[ii] [9a05dbb7] [bind-0b.] listening on `http://%s/` (using Go HTTP supporting HTTP/1.1, HTTP/1.0);\n", _bindPlain2)
}
if _bindTls1 != "" {
if !_http1Disabled && (!_http2Disabled && _bindTls2 == "") {
log.Printf ("[ii] [21f050c3] [bind-1..] listening on `https://%s/` (using FastHTTP supporting TLS with HTTP/1.1, HTTP/1.0, and HTTP/2 split);\n", _bindTls)
log.Printf ("[ii] [21f050c3] [bind-1..] listening on `https://%s/` (using FastHTTP supporting TLS with HTTP/1.1, HTTP/1.0, and HTTP/2 split);\n", _bindTls1)
} else if !_http1Disabled {
log.Printf ("[ii] [21f050c3] [bind-1..] listening on `https://%s/` (using FastHTTP supporting TLS with HTTP/1.1, HTTP/1.0);\n", _bindTls)
log.Printf ("[ii] [8e41f2df] [bind-1..] listening on `https://%s/` (using FastHTTP supporting TLS with HTTP/1.1, HTTP/1.0);\n", _bindTls1)
} else {
panic ("[fc754170]")
}
@ -1536,37 +1566,46 @@ func main_0 () (error) {
}
var _httpListener net.Listener
if _bind != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bind); _error == nil {
_httpListener = _listener_0
var _httpPlain1Listener net.Listener
if _bindPlain1 != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bindPlain1); _error == nil {
_httpPlain1Listener = _listener_0
} else {
AbortError (_error, "[d5f51e9f] [bind-0..] failed creating TCP listener!")
AbortError (_error, "[d5f51e9f] [bind-0a.] failed creating TCP listener!")
}
}
var _httpsListener net.Listener
if _bindTls != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls); _error == nil {
_httpsListener = _listener_0
var _httpPlain2Listener net.Listener
if _bindPlain2 != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bindPlain2); _error == nil {
_httpPlain2Listener = _listener_0
} else {
AbortError (_error, "[546075c2] [bind-0b.] failed creating TCP listener!")
}
}
var _httpTls1Listener net.Listener
if _bindTls1 != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls1); _error == nil {
_httpTls1Listener = _listener_0
} else {
AbortError (_error, "[e35cc693] [bind-1..] failed creating TCP listener!")
}
}
var _https2Listener net.Listener
var _httpTls2Listener net.Listener
if _bindTls2 != "" {
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls2); _error == nil {
_https2Listener = _listener_0
_httpTls2Listener = _listener_0
} else {
AbortError (_error, "[63567445] [bind-2..] failed creating TCP listener!")
}
}
var _quicListener net.PacketConn
var _httpQuicListener net.PacketConn
if _bindQuic != "" {
if _listener_0, _error := net.ListenPacket ("udp4", _bindQuic); _error == nil {
_quicListener = _listener_0
_httpQuicListener = _listener_0
} else {
AbortError (_error, "[3b1bfc15] [bind-3..] failed creating UDP listener!")
}
@ -1574,18 +1613,18 @@ func main_0 () (error) {
var _splitListenerClose func () ()
if (_httpsListener != nil) && (_https2Listener == nil) && !_http2Disabled {
log.Printf ("[ii] [1098a405] [bind-1..] listening on `https://%s/` (using Go HTTP supporting only HTTP/2 split);\n", _bindTls)
_tlsConfig.NextProtos = append ([]string { "h2" }, _tlsConfig.NextProtos ...)
if (_httpTls1Listener != nil) && (_httpTls2Listener == nil) && !_http2Disabled {
log.Printf ("[ii] [1098a405] [bind-1..] listening on `https://%s/` (using Go HTTP supporting only HTTP/2 split);\n", _bindTls1)
_tls1Config.NextProtos = append ([]string { "h2" }, _tls1Config.NextProtos ...)
if !_quiet {
log.Printf ("[ii] [ba970bbb] [bind-1..] advertising TLS next protocols: %s", _tlsConfig.NextProtos)
log.Printf ("[ii] [ba970bbb] [bind-1..] advertising TLS next protocols: %s", _tls1Config.NextProtos)
}
_tlsListener := tls.NewListener (_httpsListener, _tlsConfig)
_httpsListener_0 := & splitListener {
_tlsListener := tls.NewListener (_httpTls1Listener, _tls1Config)
_httpTls1Listener_0 := & splitListener {
listener : _tlsListener,
queue : make (chan net.Conn),
}
_https2Listener_0 := & splitListener {
_httpTls2Listener_0 := & splitListener {
listener : _tlsListener,
queue : make (chan net.Conn),
}
@ -1601,7 +1640,7 @@ func main_0 () (error) {
_connection := _connection_0.(*tls.Conn)
if _error := _connection.Handshake (); _error != nil {
if !_quiet {
LogError (_error, "[d1c3dba3] [bind-1..] failed negotiating TLS connection!")
log.Printf ("[ww] [d1c3dba3] [bind-1..] failed negotiating TLS connection!\n")
}
}
_protocol := _connection.ConnectionState () .NegotiatedProtocol
@ -1609,12 +1648,12 @@ func main_0 () (error) {
if _debug {
log.Printf ("[dd] [df9f3e7e] [bind-1..] dispatching HTTP/2 TLS connection!\n")
}
_https2Listener_0.queue <- _connection
_httpTls2Listener_0.queue <- _connection
} else if (_protocol == "http/1.1") || (_protocol == "http/1.0") || (_protocol == "") {
if _debug {
log.Printf ("[dd] [d534c361] [bind-1..] dispatching HTTP/1.x TLS connection!\n")
}
_httpsListener_0.queue <- _connection
_httpTls1Listener_0.queue <- _connection
} else {
if !_quiet {
log.Printf ("[ww] [5cc0ebde] [bind-1..] unknown TLS protocol `%s`!\n", _protocol)
@ -1630,48 +1669,52 @@ func main_0 () (error) {
}
}
} ()
_httpsListener = _httpsListener_0
_https2Listener = _https2Listener_0
_httpTls1Listener = _httpTls1Listener_0
_httpTls2Listener = _httpTls2Listener_0
} else {
if _httpsListener != nil {
if _httpTls1Listener != nil {
if !_quiet {
log.Printf ("[ii] [ceed854a] [bind-1..] advertising TLS next protocols: %s", _tlsConfig.NextProtos)
log.Printf ("[ii] [ceed854a] [bind-1..] advertising TLS next protocols: %s", _tls1Config.NextProtos)
}
_httpsListener = tls.NewListener (_httpsListener, _tlsConfig)
_httpTls1Listener = tls.NewListener (_httpTls1Listener, _tls1Config)
}
if _https2Listener != nil {
if _httpTls2Listener != nil {
if !_quiet {
log.Printf ("[ii] [8b97c977] [bind-2..] advertising TLS next protocols: %s", _tls2Config.NextProtos)
}
_https2Listener = tls.NewListener (_https2Listener, _tls2Config)
_httpTls2Listener = tls.NewListener (_httpTls2Listener, _tls2Config)
}
}
if _quicListener != nil {
if _httpQuicListener != nil {
if !_quiet {
log.Printf ("[ii] [22feb826] [bind-3..] advertising TLS next protocols: %s", _quicTlsConfig.NextProtos)
log.Printf ("[ii] [22feb826] [bind-3..] advertising TLS next protocols: %s", _tls3Config.NextProtos)
}
}
if _httpListener != nil {
_server.httpServer = _httpServer
if _httpPlain1Listener != nil {
_server.httpPlain1Server = _httpPlain1Server
}
if _httpsListener != nil {
_server.httpsServer = _httpsServer
if _httpPlain2Listener != nil {
_server.httpPlain2Server = _httpPlain2Server
}
if _https2Listener != nil {
_server.https2Server = _https2Server
if _httpTls1Listener != nil {
_server.httpTls1Server = _httpTls1Server
}
if _quicListener != nil {
_server.quicServer = _quicServer
if _httpTls2Listener != nil {
_server.httpTls2Server = _httpTls2Server
}
if _httpQuicListener != nil {
_server.httpQuicServer = _httpQuicServer
}
_httpServer = nil
_httpsServer = nil
_https2Server = nil
_quicServer = nil
_httpPlain1Server = nil
_httpPlain2Server = nil
_httpTls1Server = nil
_httpTls2Server = nil
_httpQuicServer = nil
@ -1684,14 +1727,14 @@ func main_0 () (error) {
var _waiter sync.WaitGroup
if _server.httpServer != nil {
if _server.httpPlain1Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [f2061f1b] [fasthttp] starting FastHTTP server...\n")
}
if _error := _server.httpServer.Serve (_httpListener); _error != nil {
if _error := _server.httpPlain1Server.Serve (_httpPlain1Listener); _error != nil {
AbortError (_error, "[44f45c67] [fasthttp] failed executing server!")
}
if !_quiet {
@ -1700,14 +1743,14 @@ func main_0 () (error) {
} ()
}
if _server.httpsServer != nil {
if _server.httpTls1Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [83cb1f6f] [fasthttp] starting FastHTTP server (for TLS)...\n")
}
if _error := _server.httpsServer.Serve (_httpsListener); _error != nil {
if _error := _server.httpTls1Server.Serve (_httpTls1Listener); _error != nil {
AbortError (_error, "[b2d50852] [fasthttp] failed executing server!")
}
if !_quiet {
@ -1716,30 +1759,46 @@ func main_0 () (error) {
} ()
}
if _server.https2Server != nil {
if _server.httpPlain2Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [46ec2e41] [go-http.] starting Go HTTP server...\n")
log.Printf ("[ii] [4e579931] [go-http.] starting Go HTTP server...\n")
}
if _error := _server.https2Server.Serve (_https2Listener); (_error != nil) && (_error != http.ErrServerClosed) {
AbortError (_error, "[9f6d28f4] [go-http.] failed executing server!")
if _error := _server.httpPlain2Server.Serve (_httpPlain2Listener); (_error != nil) && (_error != http.ErrServerClosed) {
AbortError (_error, "[99e9abba] [go-http.] failed executing server!")
}
if !_quiet {
log.Printf ("[ii] [9a487770] [go-http.] stopped Go HTTP server;\n")
log.Printf ("[ii] [af0e9811] [go-http.] stopped Go HTTP server;\n")
}
} ()
}
if _server.quicServer != nil {
if _server.httpTls2Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [46ec2e41] [go-http.] starting Go HTTP server (for TLS)...\n")
}
if _error := _server.httpTls2Server.Serve (_httpTls2Listener); (_error != nil) && (_error != http.ErrServerClosed) {
AbortError (_error, "[9f6d28f4] [go-http.] failed executing server (for TLS)!")
}
if !_quiet {
log.Printf ("[ii] [9a487770] [go-http.] stopped Go HTTP server (for TLS);\n")
}
} ()
}
if _server.httpQuicServer != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [4cf834b0] [quic-h3.] starting QUIC server...\n")
}
if _error := _server.quicServer.Serve (_quicListener); (_error != nil) && (_error.Error () != "server closed") {
if _error := _server.httpQuicServer.Serve (_httpQuicListener); (_error != nil) && (_error.Error () != "server closed") {
AbortError (_error, "[73e700c5] [quic-h3.] failed executing server!")
}
if !_quiet {
@ -1758,14 +1817,14 @@ func main_0 () (error) {
if !_quiet {
log.Printf ("[ii] [691cb695] [shutdown] terminating...\n")
}
if _server.httpServer != nil {
if _server.httpPlain1Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [8eea3f63] [fasthttp] stopping FastHTTP server...\n")
}
_server.httpServer.Shutdown ()
_server.httpPlain1Server.Shutdown ()
} ()
}
if _splitListenerClose != nil {
@ -1775,36 +1834,46 @@ func main_0 () (error) {
_splitListenerClose ()
} ()
}
if _server.httpsServer != nil {
if _server.httpTls1Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [ff651007] [fasthttp] stopping FastHTTP server (for TLS)...\n")
}
_server.httpsServer.Shutdown ()
_server.httpTls1Server.Shutdown ()
} ()
}
if _server.https2Server != nil {
if _server.httpPlain2Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [9ae5a25b] [go-http.] stopping Go HTTP server...\n")
log.Printf ("[ii] [befe966d] [go-http.] stopping Go HTTP server...\n")
}
_server.https2Server.Shutdown (context.TODO ())
_server.httpPlain2Server.Shutdown (context.TODO ())
} ()
}
if _server.quicServer != nil {
if _server.httpTls2Server != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [9ae5a25b] [go-http.] stopping Go HTTP server (for TLS)...\n")
}
_server.httpTls2Server.Shutdown (context.TODO ())
} ()
}
if _server.httpQuicServer != nil {
_waiter.Add (1)
go func () () {
defer _waiter.Done ()
if !_quiet {
log.Printf ("[ii] [41dab8c2] [quic-h3.] stopping QUIC server...\n")
}
_server.quicServer.CloseGracefully (1 * time.Second)
_server.httpQuicServer.CloseGracefully (1 * time.Second)
time.Sleep (1 * time.Second)
_server.quicServer.Close ()
_server.httpQuicServer.Close ()
} ()
}
if true {