[server] Add initial support for both fasthttp
and net.http
HTTPS handlers
This commit is contained in:
parent
a1e456d290
commit
f4a57a9265
1 changed files with 96 additions and 31 deletions
|
@ -5,6 +5,7 @@ package server
|
||||||
|
|
||||||
import "bufio"
|
import "bufio"
|
||||||
import "bytes"
|
import "bytes"
|
||||||
|
import "context"
|
||||||
import "crypto/tls"
|
import "crypto/tls"
|
||||||
import "flag"
|
import "flag"
|
||||||
import "fmt"
|
import "fmt"
|
||||||
|
@ -36,7 +37,8 @@ import . "github.com/volution/kawipiko/lib/server"
|
||||||
|
|
||||||
type server struct {
|
type server struct {
|
||||||
httpServer *fasthttp.Server
|
httpServer *fasthttp.Server
|
||||||
httpsServer *http.Server
|
httpsServer *fasthttp.Server
|
||||||
|
https2Server *http.Server
|
||||||
cdbReader *cdb.CDB
|
cdbReader *cdb.CDB
|
||||||
cachedFileFingerprints map[string][]byte
|
cachedFileFingerprints map[string][]byte
|
||||||
cachedDataMeta map[string][]byte
|
cachedDataMeta map[string][]byte
|
||||||
|
@ -454,6 +456,7 @@ func main_0 () (error) {
|
||||||
|
|
||||||
var _bind string
|
var _bind string
|
||||||
var _bindTls string
|
var _bindTls string
|
||||||
|
var _bindTls2 string
|
||||||
var _archivePath string
|
var _archivePath string
|
||||||
var _archiveInmem bool
|
var _archiveInmem bool
|
||||||
var _archiveMmap bool
|
var _archiveMmap bool
|
||||||
|
@ -529,6 +532,7 @@ func main_0 () (error) {
|
||||||
|
|
||||||
_bind_0 := _flags.String ("bind", "", "")
|
_bind_0 := _flags.String ("bind", "", "")
|
||||||
_bindTls_0 := _flags.String ("bind-tls", "", "")
|
_bindTls_0 := _flags.String ("bind-tls", "", "")
|
||||||
|
_bindTls2_0 := _flags.String ("bind-tls-2", "", "")
|
||||||
_archivePath_0 := _flags.String ("archive", "", "")
|
_archivePath_0 := _flags.String ("archive", "", "")
|
||||||
_archiveInmem_0 := _flags.Bool ("archive-inmem", false, "")
|
_archiveInmem_0 := _flags.Bool ("archive-inmem", false, "")
|
||||||
_archiveMmap_0 := _flags.Bool ("archive-mmap", false, "")
|
_archiveMmap_0 := _flags.Bool ("archive-mmap", false, "")
|
||||||
|
@ -553,6 +557,7 @@ func main_0 () (error) {
|
||||||
|
|
||||||
_bind = *_bind_0
|
_bind = *_bind_0
|
||||||
_bindTls = *_bindTls_0
|
_bindTls = *_bindTls_0
|
||||||
|
_bindTls2 = *_bindTls2_0
|
||||||
_archivePath = *_archivePath_0
|
_archivePath = *_archivePath_0
|
||||||
_archiveInmem = *_archiveInmem_0
|
_archiveInmem = *_archiveInmem_0
|
||||||
_archiveMmap = *_archiveMmap_0
|
_archiveMmap = *_archiveMmap_0
|
||||||
|
@ -581,7 +586,7 @@ func main_0 () (error) {
|
||||||
_isFirst = true
|
_isFirst = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_bind == "") && (_bindTls == "") {
|
if (_bind == "") && (_bindTls == "") && (_bindTls2 == "") {
|
||||||
AbortError (nil, "[6edd9512] expected bind address argument!")
|
AbortError (nil, "[6edd9512] expected bind address argument!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,6 +670,9 @@ func main_0 () (error) {
|
||||||
if _bindTls != "" {
|
if _bindTls != "" {
|
||||||
_processArguments = append (_processArguments, "--bind-tls", _bindTls)
|
_processArguments = append (_processArguments, "--bind-tls", _bindTls)
|
||||||
}
|
}
|
||||||
|
if _bindTls2 != "" {
|
||||||
|
_processArguments = append (_processArguments, "--bind-tls-2", _bindTls2)
|
||||||
|
}
|
||||||
if _archivePath != "" {
|
if _archivePath != "" {
|
||||||
_processArguments = append (_processArguments, "--archive", _archivePath)
|
_processArguments = append (_processArguments, "--archive", _archivePath)
|
||||||
}
|
}
|
||||||
|
@ -1060,6 +1068,14 @@ func main_0 () (error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_tlsConfig := & tls.Config {}
|
||||||
|
if _certificate, _error := tls.X509KeyPair ([]byte (DefaultTlsCertificatePublic), []byte (DefaultTlsCertificatePrivate)); _error == nil {
|
||||||
|
_tlsConfig.Certificates = append (_tlsConfig.Certificates, _certificate)
|
||||||
|
} else {
|
||||||
|
AbortError (_error, "[98ba6d23] failed parsing TLS certificate!")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
_httpServer := & fasthttp.Server {
|
_httpServer := & fasthttp.Server {
|
||||||
|
|
||||||
Name : "kawipiko",
|
Name : "kawipiko",
|
||||||
|
@ -1089,17 +1105,20 @@ func main_0 () (error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_httpsServer := & http.Server {
|
_httpsServer := & fasthttp.Server {}
|
||||||
|
*_httpsServer = *_httpServer
|
||||||
|
|
||||||
|
_https2Server := & http.Server {
|
||||||
|
|
||||||
Handler : _server,
|
Handler : _server,
|
||||||
TLSConfig : & tls.Config {},
|
TLSConfig : _tlsConfig.Clone (),
|
||||||
|
|
||||||
MaxHeaderBytes : 16 * 1024,
|
MaxHeaderBytes : _httpsServer.ReadBufferSize,
|
||||||
|
|
||||||
ReadTimeout : 30 * time.Second,
|
ReadTimeout : _httpsServer.ReadTimeout,
|
||||||
ReadHeaderTimeout : 30 * time.Second,
|
ReadHeaderTimeout : _httpsServer.ReadTimeout,
|
||||||
WriteTimeout : 30 * time.Second,
|
WriteTimeout : _httpsServer.WriteTimeout,
|
||||||
IdleTimeout : 360 * time.Second,
|
IdleTimeout : _httpsServer.IdleTimeout,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1110,19 +1129,26 @@ func main_0 () (error) {
|
||||||
_httpServer.IdleTimeout = 0
|
_httpServer.IdleTimeout = 0
|
||||||
|
|
||||||
_httpsServer.ReadTimeout = 0
|
_httpsServer.ReadTimeout = 0
|
||||||
_httpsServer.ReadHeaderTimeout = 0
|
|
||||||
_httpsServer.WriteTimeout = 0
|
_httpsServer.WriteTimeout = 0
|
||||||
_httpsServer.IdleTimeout = 1 * time.Second
|
_httpsServer.IdleTimeout = 0
|
||||||
|
|
||||||
|
_https2Server.ReadTimeout = 0
|
||||||
|
_https2Server.ReadHeaderTimeout = 0
|
||||||
|
_https2Server.WriteTimeout = 0
|
||||||
|
_https2Server.IdleTimeout = 0
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if !_quiet && (_debug || _isFirst) {
|
if !_quiet && (_debug || _isFirst) {
|
||||||
if _bind != "" {
|
if _bind != "" {
|
||||||
log.Printf ("[ii] [f11e4e37] listening on `http://%s/`;\n", _bind)
|
log.Printf ("[ii] [f11e4e37] listening on `http://%s/` (HTTP/1.1, HTTP/1.0);\n", _bind)
|
||||||
}
|
}
|
||||||
if _bindTls != "" {
|
if _bindTls != "" {
|
||||||
log.Printf ("[ii] [21f050c3] listening on `https://%s/`;\n", _bindTls)
|
log.Printf ("[ii] [21f050c3] listening on `https://%s/` (HTTP/1.1, HTTP/1.0);\n", _bindTls)
|
||||||
|
}
|
||||||
|
if _bindTls2 != "" {
|
||||||
|
log.Printf ("[ii] [e7f03c99] listening on `https://%s/` (HTTP/2, HTTP/1.1, HTTP/1.0);\n", _bindTls2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1132,7 +1158,7 @@ func main_0 () (error) {
|
||||||
if _listener_0, _error := reuseport.Listen ("tcp4", _bind); _error == nil {
|
if _listener_0, _error := reuseport.Listen ("tcp4", _bind); _error == nil {
|
||||||
_httpListener = _listener_0
|
_httpListener = _listener_0
|
||||||
} else {
|
} else {
|
||||||
AbortError (_error, "[d5f51e9f] failed starting listener!")
|
AbortError (_error, "[d5f51e9f] failed creating HTTP listener!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1141,14 +1167,16 @@ func main_0 () (error) {
|
||||||
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls); _error == nil {
|
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls); _error == nil {
|
||||||
_httpsListener = _listener_0
|
_httpsListener = _listener_0
|
||||||
} else {
|
} else {
|
||||||
AbortError (_error, "[e35cc693] failed starting listener!")
|
AbortError (_error, "[e35cc693] failed creating HTTPS listener!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _bindTls != "" {
|
|
||||||
if _certificate, _error := tls.X509KeyPair ([]byte (DefaultTlsCertificatePublic), []byte (DefaultTlsCertificatePrivate)); _error == nil {
|
var _https2Listener net.Listener
|
||||||
_httpsServer.TLSConfig.Certificates = append (_httpsServer.TLSConfig.Certificates, _certificate)
|
if _bindTls2 != "" {
|
||||||
|
if _listener_0, _error := reuseport.Listen ("tcp4", _bindTls2); _error == nil {
|
||||||
|
_https2Listener = _listener_0
|
||||||
} else {
|
} else {
|
||||||
AbortError (_error, "[98ba6d23] failed parsing TLS certificate!")
|
AbortError (_error, "[63567445] failed creating HTTPS+2 listener!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1159,9 +1187,13 @@ func main_0 () (error) {
|
||||||
if _httpsListener != nil {
|
if _httpsListener != nil {
|
||||||
_server.httpsServer = _httpsServer
|
_server.httpsServer = _httpsServer
|
||||||
}
|
}
|
||||||
|
if _https2Listener != nil {
|
||||||
|
_server.https2Server = _https2Server
|
||||||
|
}
|
||||||
|
|
||||||
_httpServer = nil
|
_httpServer = nil
|
||||||
_httpsServer = nil
|
_httpsServer = nil
|
||||||
|
_https2Server = nil
|
||||||
|
|
||||||
|
|
||||||
var _waiter sync.WaitGroup
|
var _waiter sync.WaitGroup
|
||||||
|
@ -1187,13 +1219,29 @@ func main_0 () (error) {
|
||||||
go func () () {
|
go func () () {
|
||||||
defer _waiter.Done ()
|
defer _waiter.Done ()
|
||||||
if !_quiet {
|
if !_quiet {
|
||||||
log.Printf ("[ii] [46ec2e41] starting HTTPS server...\n")
|
log.Printf ("[ii] [83cb1f6f] starting HTTPS server...\n")
|
||||||
}
|
}
|
||||||
if _error := _server.httpsServer.ServeTLS (_httpsListener, "", ""); (_error != nil) && (_error != http.ErrServerClosed) {
|
if _error := _server.httpsServer.Serve (tls.NewListener (_httpsListener, _tlsConfig)); _error != nil {
|
||||||
|
AbortError (_error, "[b2d50852] failed executing server!")
|
||||||
|
}
|
||||||
|
if !_quiet {
|
||||||
|
log.Printf ("[ii] [ee4180b7] stopped HTTPS server;\n")
|
||||||
|
}
|
||||||
|
} ()
|
||||||
|
}
|
||||||
|
|
||||||
|
if _server.https2Server != nil {
|
||||||
|
_waiter.Add (1)
|
||||||
|
go func () () {
|
||||||
|
defer _waiter.Done ()
|
||||||
|
if !_quiet {
|
||||||
|
log.Printf ("[ii] [46ec2e41] starting HTTPS+2 server...\n")
|
||||||
|
}
|
||||||
|
if _error := _server.https2Server.ServeTLS (_https2Listener, "", ""); (_error != nil) && (_error != http.ErrServerClosed) {
|
||||||
AbortError (_error, "[9f6d28f4] failed executing server!")
|
AbortError (_error, "[9f6d28f4] failed executing server!")
|
||||||
}
|
}
|
||||||
if !_quiet {
|
if !_quiet {
|
||||||
log.Printf ("[ii] [9a487770] stopped HTTPS server;\n")
|
log.Printf ("[ii] [9a487770] stopped HTTPS+2 server;\n")
|
||||||
}
|
}
|
||||||
} ()
|
} ()
|
||||||
}
|
}
|
||||||
|
@ -1209,23 +1257,40 @@ func main_0 () (error) {
|
||||||
log.Printf ("[ii] [691cb695] shutingdown (1)...\n")
|
log.Printf ("[ii] [691cb695] shutingdown (1)...\n")
|
||||||
}
|
}
|
||||||
if _server.httpServer != nil {
|
if _server.httpServer != nil {
|
||||||
|
_waiter.Add (1)
|
||||||
|
go func () () {
|
||||||
|
defer _waiter.Done ()
|
||||||
if !_quiet {
|
if !_quiet {
|
||||||
log.Printf ("[ii] [8eea3f63] stopping HTTP server...\n")
|
log.Printf ("[ii] [8eea3f63] stopping HTTP server...\n")
|
||||||
}
|
}
|
||||||
_server.httpServer.Shutdown ()
|
_server.httpServer.Shutdown ()
|
||||||
|
} ()
|
||||||
}
|
}
|
||||||
if _server.httpsServer != nil {
|
if _server.httpsServer != nil {
|
||||||
|
_waiter.Add (1)
|
||||||
|
go func () () {
|
||||||
|
defer _waiter.Done ()
|
||||||
if !_quiet {
|
if !_quiet {
|
||||||
log.Printf ("[ii] [9ae5a25b] stopping HTTPS server...\n")
|
log.Printf ("[ii] [ff651007] stopping HTTPS server...\n")
|
||||||
}
|
}
|
||||||
_server.httpsServer.Close ()
|
_server.httpsServer.Shutdown ()
|
||||||
|
} ()
|
||||||
|
}
|
||||||
|
if _server.https2Server != nil {
|
||||||
|
_waiter.Add (1)
|
||||||
|
go func () () {
|
||||||
|
defer _waiter.Done ()
|
||||||
|
if !_quiet {
|
||||||
|
log.Printf ("[ii] [9ae5a25b] stopping HTTPS+2 server...\n")
|
||||||
|
}
|
||||||
|
_server.https2Server.Shutdown (context.TODO ())
|
||||||
|
} ()
|
||||||
}
|
}
|
||||||
} ()
|
} ()
|
||||||
}
|
}
|
||||||
|
|
||||||
_waiter.Wait ()
|
_waiter.Wait ()
|
||||||
|
|
||||||
|
|
||||||
if !_quiet {
|
if !_quiet {
|
||||||
defer log.Printf ("[ii] [a49175db] done!\n")
|
defer log.Printf ("[ii] [a49175db] done!\n")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue