mirror of https://github.com/cbeuw/Cloak
Refactor server transport
This commit is contained in:
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)
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ 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) 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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,8 +16,6 @@ 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) 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…
Reference in New Issue