新增http

This commit is contained in:
duanhf2012
2020-04-05 17:33:21 +08:00
parent 50d8c41b56
commit bedb715c6d
5 changed files with 658 additions and 1 deletions

82
network/http_server.go Normal file
View 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
}

View File

@@ -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)