mirror of
https://github.com/duanhf2012/origin.git
synced 2026-02-03 22:45:13 +08:00
新增http
This commit is contained in:
82
network/http_server.go
Normal file
82
network/http_server.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"github.com/duanhf2012/origin/log"
|
||||
"net/http"
|
||||
"time"
|
||||
)
|
||||
|
||||
var Default_MaxHeaderBytes 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 {
|
||||
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 [%s]-[%s] file is fail:%s", caFile.Certfile, caFile.Keyfile, err.Error())
|
||||
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: Default_MaxHeaderBytes,
|
||||
TLSConfig: tlsConfig,
|
||||
}
|
||||
|
||||
var err error
|
||||
if len(tlsCaList) > 0 {
|
||||
err = slf.httpServer.ListenAndServeTLS("", "")
|
||||
} else {
|
||||
err = slf.httpServer.ListenAndServe()
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Fatal("Listen for address %s failure:%+v.",slf.listenAddr,err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
func (slf *HttpServer) SetHttps(caFile []CAFile) {
|
||||
slf.caFileList = caFile
|
||||
}
|
||||
@@ -97,7 +97,7 @@ func (p *MsgParser) Read(conn *TCPConn) ([]byte, error) {
|
||||
} else if msgLen < p.minMsgLen {
|
||||
return nil, errors.New("message too short")
|
||||
}
|
||||
|
||||
|
||||
msgLen -= 2
|
||||
// data
|
||||
msgData := make([]byte, msgLen)
|
||||
|
||||
Reference in New Issue
Block a user