1
0
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:
V2Ray 2015-09-22 18:11:55 +02:00
parent 338300248c
commit ec83281d18
4 changed files with 25 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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