mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-03 22:45:13 +08:00
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
package network
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"errors"
|
|
"github.com/duanhf2012/origin/log"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
var DefaultMaxHeaderBytes int = 1<<20
|
|
|
|
type CAFile struct {
|
|
CertFile string
|
|
Keyfile string
|
|
}
|
|
|
|
type HttpServer struct {
|
|
listenAddr string
|
|
readTimeout time.Duration
|
|
writeTimeout time.Duration
|
|
|
|
handler http.Handler
|
|
caFileList []CAFile
|
|
|
|
httpServer *http.Server
|
|
}
|
|
|
|
func (slf *HttpServer) Init(listenAddr string, handler http.Handler, readTimeout time.Duration, writeTimeout time.Duration) {
|
|
slf.listenAddr = listenAddr
|
|
slf.handler = handler
|
|
slf.readTimeout = readTimeout
|
|
slf.writeTimeout = writeTimeout
|
|
}
|
|
|
|
func (slf *HttpServer) Start() {
|
|
go slf.startListen()
|
|
}
|
|
|
|
func (slf *HttpServer) startListen() error {
|
|
if slf.httpServer != nil {
|
|
return errors.New("Duplicate start not allowed")
|
|
}
|
|
|
|
var tlsCaList []tls.Certificate
|
|
var tlsConfig *tls.Config
|
|
for _, caFile := range slf.caFileList {
|
|
cer, err := tls.LoadX509KeyPair(caFile.CertFile, caFile.Keyfile)
|
|
if err != nil {
|
|
log.Fatal("Load CA file is fail",log.String("error",err.Error()),log.String("certFile",caFile.CertFile),log.String("keyFile",caFile.Keyfile))
|
|
return err
|
|
}
|
|
tlsCaList = append(tlsCaList, cer)
|
|
}
|
|
|
|
if len(tlsCaList) > 0 {
|
|
tlsConfig = &tls.Config{Certificates: tlsCaList}
|
|
}
|
|
|
|
slf.httpServer = &http.Server{
|
|
Addr: slf.listenAddr,
|
|
Handler: slf.handler,
|
|
ReadTimeout: slf.readTimeout,
|
|
WriteTimeout: slf.writeTimeout,
|
|
MaxHeaderBytes: DefaultMaxHeaderBytes,
|
|
TLSConfig: tlsConfig,
|
|
}
|
|
|
|
var err error
|
|
if len(tlsCaList) > 0 {
|
|
err = slf.httpServer.ListenAndServeTLS("", "")
|
|
} else {
|
|
err = slf.httpServer.ListenAndServe()
|
|
}
|
|
|
|
if err != nil {
|
|
log.Fatal("Listen failure",log.String("error",err.Error()),log.String("addr:",slf.listenAddr))
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
|
|
func (slf *HttpServer) SetCAFile(caFile []CAFile) {
|
|
slf.caFileList = caFile
|
|
}
|