mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-30 05:56:54 -05:00
Parse config just once
This commit is contained in:
parent
338300248c
commit
ec83281d18
8
point.go
8
point.go
@ -64,7 +64,8 @@ type InboundConnectionHandler interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type OutboundConnectionHandlerFactory interface {
|
type OutboundConnectionHandlerFactory interface {
|
||||||
Create(VP *Point, config []byte, firstPacket v2net.Packet) (OutboundConnectionHandler, error)
|
Initialize(config []byte) error
|
||||||
|
Create(VP *Point, firstPacket v2net.Packet) (OutboundConnectionHandler, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type OutboundConnectionHandler interface {
|
type OutboundConnectionHandler interface {
|
||||||
@ -77,6 +78,9 @@ func (vp *Point) Start() error {
|
|||||||
if vp.port <= 0 {
|
if vp.port <= 0 {
|
||||||
return log.Error("Invalid port %d", vp.port)
|
return log.Error("Invalid port %d", vp.port)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vp.ochFactory.Initialize(vp.ochConfig)
|
||||||
|
|
||||||
inboundConnectionHandler, err := vp.ichFactory.Create(vp, vp.ichConfig)
|
inboundConnectionHandler, err := vp.ichFactory.Create(vp, vp.ichConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -88,7 +92,7 @@ func (vp *Point) Start() error {
|
|||||||
func (p *Point) DispatchToOutbound(packet v2net.Packet) InboundRay {
|
func (p *Point) DispatchToOutbound(packet v2net.Packet) InboundRay {
|
||||||
ray := NewRay()
|
ray := NewRay()
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
och, _ := p.ochFactory.Create(p, p.ochConfig, packet)
|
och, _ := p.ochFactory.Create(p, packet)
|
||||||
_ = och.Start(ray)
|
_ = och.Start(ray)
|
||||||
return ray
|
return ray
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,11 @@ import (
|
|||||||
type FreedomFactory struct {
|
type FreedomFactory struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (factory FreedomFactory) Create(vp *core.Point, config []byte, firstPacket v2net.Packet) (core.OutboundConnectionHandler, error) {
|
func (factory FreedomFactory) Initialize(config []byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (factory FreedomFactory) Create(vp *core.Point, firstPacket v2net.Packet) (core.OutboundConnectionHandler, error) {
|
||||||
return NewFreedomConnection(firstPacket), nil
|
return NewFreedomConnection(firstPacket), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,18 +183,25 @@ func handleResponse(conn *net.TCPConn, request *protocol.VMessRequest, output ch
|
|||||||
}
|
}
|
||||||
|
|
||||||
type VMessOutboundHandlerFactory struct {
|
type VMessOutboundHandlerFactory struct {
|
||||||
|
servers []VNextServer
|
||||||
}
|
}
|
||||||
|
|
||||||
func (factory *VMessOutboundHandlerFactory) Create(vp *core.Point, rawConfig []byte, firstPacket v2net.Packet) (core.OutboundConnectionHandler, error) {
|
func (factory *VMessOutboundHandlerFactory) Initialize(rawConfig []byte) error {
|
||||||
config, err := loadOutboundConfig(rawConfig)
|
config, err := loadOutboundConfig(rawConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(log.Error("Failed to load VMess outbound config: %v", err))
|
panic(log.Error("Failed to load VMess outbound config: %v", err))
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
servers := make([]VNextServer, 0, len(config.VNextList))
|
servers := make([]VNextServer, 0, len(config.VNextList))
|
||||||
for _, server := range config.VNextList {
|
for _, server := range config.VNextList {
|
||||||
servers = append(servers, server.ToVNextServer())
|
servers = append(servers, server.ToVNextServer())
|
||||||
}
|
}
|
||||||
return NewVMessOutboundHandler(vp, servers, firstPacket), nil
|
factory.servers = servers
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (factory *VMessOutboundHandlerFactory) Create(vp *core.Point, firstPacket v2net.Packet) (core.OutboundConnectionHandler, error) {
|
||||||
|
return NewVMessOutboundHandler(vp, factory.servers, firstPacket), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -32,7 +32,11 @@ func (handler *OutboundConnectionHandler) Start(ray core.OutboundRay) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (handler *OutboundConnectionHandler) Create(point *core.Point, config []byte, packet v2net.Packet) (core.OutboundConnectionHandler, error) {
|
func (handler *OutboundConnectionHandler) Initialize(config []byte) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (handler *OutboundConnectionHandler) Create(point *core.Point, packet v2net.Packet) (core.OutboundConnectionHandler, error) {
|
||||||
handler.Destination = packet.Destination()
|
handler.Destination = packet.Destination()
|
||||||
return handler, nil
|
return handler, nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user