Refactor server transport

pull/110/head
Andy Wang 4 years ago
parent 7bfae8accd
commit 693544659f

@ -73,7 +73,7 @@ func dispatchConnection(conn net.Conn, sta *server.State) {
var sessionKey [32]byte
util.CryptoRandRead(sessionKey[:])
obfuscator, err := mux.MakeObfuscator(ci.EncryptionMethod, sessionKey, ci.Transport.HasRecordLayer())
obfuscator, err := mux.MakeObfuscator(ci.EncryptionMethod, sessionKey)
if err != nil {
log.Error(err)
goWeb()
@ -93,7 +93,6 @@ func dispatchConnection(conn net.Conn, sta *server.State) {
seshConfig := mux.SessionConfig{
Obfuscator: obfuscator,
Valve: nil,
UnitRead: ci.Transport.UnitReadFunc(),
}
sesh := mux.MakeSession(0, seshConfig)
sesh.AddConnection(preparedConn)
@ -125,7 +124,6 @@ func dispatchConnection(conn net.Conn, sta *server.State) {
seshConfig := mux.SessionConfig{
Obfuscator: obfuscator,
Valve: nil,
UnitRead: ci.Transport.UnitReadFunc(),
Unordered: ci.Unordered,
}
sesh, existing, err := user.GetSession(ci.SessionId, seshConfig)

@ -15,9 +15,7 @@ type TLS struct{}
var ErrBadClientHello = errors.New("non (or malformed) ClientHello")
func (TLS) String() string { return "TLS" }
func (TLS) HasRecordLayer() bool { return true }
func (TLS) UnitReadFunc() func(net.Conn, []byte) (int, error) { return util.ReadTLS }
func (TLS) String() string { return "TLS" }
func (TLS) processFirstPacket(clientHello []byte, privateKey crypto.PrivateKey) (fragments authFragments, respond Responder, err error) {
ch, err := parseClientHello(clientHello)
@ -40,18 +38,18 @@ func (TLS) processFirstPacket(clientHello []byte, privateKey crypto.PrivateKey)
func (TLS) makeResponder(clientHelloSessionId []byte, sharedSecret [32]byte) Responder {
respond := func(originalConn net.Conn, sessionKey [32]byte) (preparedConn net.Conn, err error) {
preparedConn = originalConn
reply, err := composeReply(clientHelloSessionId, sharedSecret, sessionKey)
if err != nil {
err = fmt.Errorf("failed to compose TLS reply: %v", err)
return
}
_, err = preparedConn.Write(reply)
_, err = originalConn.Write(reply)
if err != nil {
err = fmt.Errorf("failed to write TLS reply: %v", err)
go preparedConn.Close()
go originalConn.Close()
return
}
preparedConn = &util.TLSConn{Conn: originalConn}
return
}
return respond

@ -8,8 +8,6 @@ import (
type Responder = func(originalConn net.Conn, sessionKey [32]byte) (preparedConn net.Conn, err error)
type Transport interface {
HasRecordLayer() bool
UnitReadFunc() func(net.Conn, []byte) (int, error)
processFirstPacket(reqPacket []byte, privateKey crypto.PrivateKey) (authFragments, Responder, error)
}

@ -15,9 +15,7 @@ import (
type WebSocket struct{}
func (WebSocket) String() string { return "WebSocket" }
func (WebSocket) HasRecordLayer() bool { return false }
func (WebSocket) UnitReadFunc() func(net.Conn, []byte) (int, error) { return util.ReadWebSocket }
func (WebSocket) String() string { return "WebSocket" }
func (WebSocket) processFirstPacket(reqPacket []byte, privateKey crypto.PrivateKey) (fragments authFragments, respond Responder, err error) {
var req *http.Request

@ -4,7 +4,6 @@ import (
"errors"
"github.com/gorilla/websocket"
"io"
"net"
"sync"
"time"
)
@ -75,8 +74,3 @@ func (ws *WebSocketConn) SetDeadline(t time.Time) error {
}
return nil
}
// ws unit reader
func ReadWebSocket(conn net.Conn, buffer []byte) (n int, err error) {
return conn.Read(buffer)
}

Loading…
Cancel
Save