mirror of
https://github.com/v2ray/v2ray-core.git
synced 2026-11-13 14:44:15 +00:00
Refactor vmess internal struct for better readability
This commit is contained in:
1 parent
8a6b07ba61
commit
791ac780f0
7 files changed
+147
-229
No files matched your search
+18
-6
@@ -12,12 +12,14 @@ import (
|
||||
|
||||
type VMessInboundHandler struct {
|
||||
vPoint *core.VPoint
|
||||
clients *core.VUserSet
|
||||
accepting bool
|
||||
}
|
||||
|
||||
func NewVMessInboundHandler(vp *core.VPoint) *VMessInboundHandler {
|
||||
func NewVMessInboundHandler(vp *core.VPoint, clients *core.VUserSet) *VMessInboundHandler {
|
||||
handler := new(VMessInboundHandler)
|
||||
handler.vPoint = vp
|
||||
handler.clients = clients
|
||||
return handler
|
||||
}
|
||||
|
||||
@@ -45,7 +47,7 @@ func (handler *VMessInboundHandler) AcceptConnections(listener net.Listener) err
|
||||
|
||||
func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error {
|
||||
defer connection.Close()
|
||||
reader := vmessio.NewVMessRequestReader(handler.vPoint.UserSet)
|
||||
reader := vmessio.NewVMessRequestReader(handler.clients)
|
||||
|
||||
request, err := reader.Read(connection)
|
||||
if err != nil {
|
||||
@@ -55,8 +57,8 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error
|
||||
response := vmessio.NewVMessResponse(request)
|
||||
connection.Write(response[:])
|
||||
|
||||
requestKey := request.RequestKey()
|
||||
requestIV := request.RequestIV()
|
||||
requestKey := request.RequestKey[:]
|
||||
requestIV := request.RequestIV[:]
|
||||
responseKey := md5.Sum(requestKey)
|
||||
responseIV := md5.Sum(requestIV)
|
||||
|
||||
@@ -70,7 +72,7 @@ func (handler *VMessInboundHandler) HandleConnection(connection net.Conn) error
|
||||
return err
|
||||
}
|
||||
|
||||
ray := handler.vPoint.NewInboundConnectionAccepted(request.Destination())
|
||||
ray := handler.vPoint.NewInboundConnectionAccepted(request.Address)
|
||||
input := ray.InboundInput()
|
||||
output := ray.InboundOutput()
|
||||
finish := make(chan bool, 2)
|
||||
@@ -112,8 +114,18 @@ func (handler *VMessInboundHandler) waitForFinish(finish <-chan bool) {
|
||||
}
|
||||
|
||||
type VMessInboundHandlerFactory struct {
|
||||
allowedClients *core.VUserSet
|
||||
}
|
||||
|
||||
func NewVMessInboundHandlerFactory(clients []core.VUser) *VMessInboundHandlerFactory {
|
||||
factory := new(VMessInboundHandlerFactory)
|
||||
factory.allowedClients = core.NewVUserSet()
|
||||
for _, user := range clients {
|
||||
factory.allowedClients.AddUser(user)
|
||||
}
|
||||
return factory
|
||||
}
|
||||
|
||||
func (factory *VMessInboundHandlerFactory) Create(vp *core.VPoint) *VMessInboundHandler {
|
||||
return NewVMessInboundHandler(vp)
|
||||
return NewVMessInboundHandler(vp, factory.allowedClients)
|
||||
}
|
||||
+10
-20
@@ -45,23 +45,13 @@ func (handler *VMessOutboundHandler) Start(ray core.OutboundVRay) error {
|
||||
vNextAddress, vNextUser := handler.pickVNext()
|
||||
|
||||
request := new(vmessio.VMessRequest)
|
||||
request.SetVersion(vmessio.Version)
|
||||
copy(request.UserHash(), vNextUser.Id.Hash([]byte("ASK")))
|
||||
rand.Read(request.RequestIV())
|
||||
rand.Read(request.RequestKey())
|
||||
rand.Read(request.ResponseHeader())
|
||||
request.SetCommand(byte(0x01))
|
||||
request.SetPort(handler.dest.Port)
|
||||
|
||||
address := handler.dest
|
||||
switch {
|
||||
case address.IsIPv4():
|
||||
request.SetIPv4(address.IP)
|
||||
case address.IsIPv6():
|
||||
request.SetIPv6(address.IP)
|
||||
case address.IsDomain():
|
||||
request.SetDomain(address.Domain)
|
||||
}
|
||||
request.Version = vmessio.Version
|
||||
request.UserId = vNextUser.Id
|
||||
rand.Read(request.RequestIV[:])
|
||||
rand.Read(request.RequestKey[:])
|
||||
rand.Read(request.ResponseHeader[:])
|
||||
request.Command = byte(0x01)
|
||||
request.Address = handler.dest
|
||||
|
||||
conn, err := net.Dial("tcp", vNextAddress.String())
|
||||
if err != nil {
|
||||
@@ -69,11 +59,11 @@ func (handler *VMessOutboundHandler) Start(ray core.OutboundVRay) error {
|
||||
}
|
||||
defer conn.Close()
|
||||
|
||||
requestWriter := vmessio.NewVMessRequestWriter(handler.vPoint.UserSet)
|
||||
requestWriter := vmessio.NewVMessRequestWriter()
|
||||
requestWriter.Write(conn, request)
|
||||
|
||||
requestKey := request.RequestKey()
|
||||
requestIV := request.RequestIV()
|
||||
requestKey := request.RequestKey[:]
|
||||
requestIV := request.RequestIV[:]
|
||||
responseKey := md5.Sum(requestKey)
|
||||
responseIV := md5.Sum(requestIV)
|
||||
|
||||
|
||||
Reference in new issue
Block a user