1
0
mirror of https://github.com/v2fly/v2ray-core.git synced 2024-06-28 18:25:23 +00:00
This commit is contained in:
Darien Raymond 2017-04-09 14:49:40 +02:00
parent 277a08d8a7
commit 0e01e9e9ca
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
4 changed files with 27 additions and 17 deletions

View File

@ -13,6 +13,7 @@ type Server interface {
Get(domain string) []net.IP Get(domain string) []net.IP
} }
// FromSpace fetches a DNS server from context.
func FromSpace(space app.Space) Server { func FromSpace(space app.Space) Server {
app := space.GetApplication((*Server)(nil)) app := space.GetApplication((*Server)(nil))
if app == nil { if app == nil {

View File

@ -9,18 +9,19 @@ import (
"v2ray.com/core/common" "v2ray.com/core/common"
) )
type DefaultInboundHandlerManager struct { // Manager is to manage all inbound handlers.
type Manager struct {
handlers []proxyman.InboundHandler handlers []proxyman.InboundHandler
taggedHandlers map[string]proxyman.InboundHandler taggedHandlers map[string]proxyman.InboundHandler
} }
func New(ctx context.Context, config *proxyman.InboundConfig) (*DefaultInboundHandlerManager, error) { func New(ctx context.Context, config *proxyman.InboundConfig) (*Manager, error) {
return &DefaultInboundHandlerManager{ return &Manager{
taggedHandlers: make(map[string]proxyman.InboundHandler), taggedHandlers: make(map[string]proxyman.InboundHandler),
}, nil }, nil
} }
func (m *DefaultInboundHandlerManager) AddHandler(ctx context.Context, config *proxyman.InboundHandlerConfig) error { func (m *Manager) AddHandler(ctx context.Context, config *proxyman.InboundHandlerConfig) error {
rawReceiverSettings, err := config.ReceiverSettings.GetInstance() rawReceiverSettings, err := config.ReceiverSettings.GetInstance()
if err != nil { if err != nil {
return err return err
@ -61,7 +62,7 @@ func (m *DefaultInboundHandlerManager) AddHandler(ctx context.Context, config *p
return nil return nil
} }
func (m *DefaultInboundHandlerManager) GetHandler(ctx context.Context, tag string) (proxyman.InboundHandler, error) { func (m *Manager) GetHandler(ctx context.Context, tag string) (proxyman.InboundHandler, error) {
handler, found := m.taggedHandlers[tag] handler, found := m.taggedHandlers[tag]
if !found { if !found {
return nil, newError("handler not found: ", tag) return nil, newError("handler not found: ", tag)
@ -69,7 +70,7 @@ func (m *DefaultInboundHandlerManager) GetHandler(ctx context.Context, tag strin
return handler, nil return handler, nil
} }
func (m *DefaultInboundHandlerManager) Start() error { func (m *Manager) Start() error {
for _, handler := range m.handlers { for _, handler := range m.handlers {
if err := handler.Start(); err != nil { if err := handler.Start(); err != nil {
return err return err
@ -78,13 +79,13 @@ func (m *DefaultInboundHandlerManager) Start() error {
return nil return nil
} }
func (m *DefaultInboundHandlerManager) Close() { func (m *Manager) Close() {
for _, handler := range m.handlers { for _, handler := range m.handlers {
handler.Close() handler.Close()
} }
} }
func (m *DefaultInboundHandlerManager) Interface() interface{} { func (m *Manager) Interface() interface{} {
return (*proxyman.InboundHandlerManager)(nil) return (*proxyman.InboundHandlerManager)(nil)
} }

View File

@ -10,27 +10,32 @@ import (
"v2ray.com/core/common" "v2ray.com/core/common"
) )
type DefaultOutboundHandlerManager struct { // Manager is to manage all outbound handlers.
type Manager struct {
sync.RWMutex sync.RWMutex
defaultHandler *Handler defaultHandler *Handler
taggedHandler map[string]*Handler taggedHandler map[string]*Handler
} }
func New(ctx context.Context, config *proxyman.OutboundConfig) (*DefaultOutboundHandlerManager, error) { // New creates a new Manager.
return &DefaultOutboundHandlerManager{ func New(ctx context.Context, config *proxyman.OutboundConfig) (*Manager, error) {
return &Manager{
taggedHandler: make(map[string]*Handler), taggedHandler: make(map[string]*Handler),
}, nil }, nil
} }
func (*DefaultOutboundHandlerManager) Interface() interface{} { // Interface implements Application.Interface.
func (*Manager) Interface() interface{} {
return (*proxyman.OutboundHandlerManager)(nil) return (*proxyman.OutboundHandlerManager)(nil)
} }
func (*DefaultOutboundHandlerManager) Start() error { return nil } // Start implements Application.Start
func (*Manager) Start() error { return nil }
func (*DefaultOutboundHandlerManager) Close() {} // Close implements Application.Close
func (*Manager) Close() {}
func (v *DefaultOutboundHandlerManager) GetDefaultHandler() proxyman.OutboundHandler { func (v *Manager) GetDefaultHandler() proxyman.OutboundHandler {
v.RLock() v.RLock()
defer v.RUnlock() defer v.RUnlock()
if v.defaultHandler == nil { if v.defaultHandler == nil {
@ -39,7 +44,7 @@ func (v *DefaultOutboundHandlerManager) GetDefaultHandler() proxyman.OutboundHan
return v.defaultHandler return v.defaultHandler
} }
func (v *DefaultOutboundHandlerManager) GetHandler(tag string) proxyman.OutboundHandler { func (v *Manager) GetHandler(tag string) proxyman.OutboundHandler {
v.RLock() v.RLock()
defer v.RUnlock() defer v.RUnlock()
if handler, found := v.taggedHandler[tag]; found { if handler, found := v.taggedHandler[tag]; found {
@ -48,7 +53,7 @@ func (v *DefaultOutboundHandlerManager) GetHandler(tag string) proxyman.Outbound
return nil return nil
} }
func (v *DefaultOutboundHandlerManager) AddHandler(ctx context.Context, config *proxyman.OutboundHandlerConfig) error { func (v *Manager) AddHandler(ctx context.Context, config *proxyman.OutboundHandlerConfig) error {
v.Lock() v.Lock()
defer v.Unlock() defer v.Unlock()

View File

@ -16,10 +16,12 @@ import (
"v2ray.com/core/transport/ray" "v2ray.com/core/transport/ray"
) )
// Client is a Socks5 client.
type Client struct { type Client struct {
serverPicker protocol.ServerPicker serverPicker protocol.ServerPicker
} }
// NewClient create a new Socks5 client based on the given config.
func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) { func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) {
serverList := protocol.NewServerList() serverList := protocol.NewServerList()
for _, rec := range config.Server { for _, rec := range config.Server {
@ -32,6 +34,7 @@ func NewClient(ctx context.Context, config *ClientConfig) (*Client, error) {
return client, nil return client, nil
} }
// Process implements proxy.Outbound.Process.
func (c *Client) Process(ctx context.Context, ray ray.OutboundRay, dialer proxy.Dialer) error { func (c *Client) Process(ctx context.Context, ray ray.OutboundRay, dialer proxy.Dialer) error {
destination, ok := proxy.TargetFromContext(ctx) destination, ok := proxy.TargetFromContext(ctx)
if !ok { if !ok {