func OutboundHandlerManagerFromSpace(space app.Space) OutboundHandlerManager { app := space.GetApplication((*OutboundHandlerManager)(nil)) if app == nil { return nil } return app.(OutboundHandlerManager) }
func NewDefaultDispatcher(space app.Space) *DefaultDispatcher { d := &DefaultDispatcher{} space.InitializeApplication(func() error { return d.Initialize(space) }) return d }
func FromSpace(space app.Space) *Router { app := space.GetApplication((*Router)(nil)) if app == nil { return nil } return app.(*Router) }
func (this *ServerFactory) Create(space app.Space, rawConfig interface{}, meta *proxy.InboundHandlerMeta) (proxy.InboundHandler, error) { if !space.HasApp(dispatcher.APP_ID) { return nil, common.ErrBadConfiguration } return NewServer( rawConfig.(*ServerConfig), space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher), meta), nil }
func (this *Factory) Create(space app.Space, rawConfig interface{}, meta *proxy.InboundHandlerMeta) (proxy.InboundHandler, error) { if !space.HasApp(dispatcher.APP_ID) { return nil, common.ErrBadConfiguration } config := rawConfig.(*Config) allowedClients := vmess.NewTimedUserValidator(protocol.DefaultIDHash) for _, user := range config.AllowedUsers { allowedClients.Add(user) } handler := &VMessInboundHandler{ packetDispatcher: space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher), clients: allowedClients, detours: config.DetourConfig, usersByEmail: NewUserByEmail(config.AllowedUsers, config.Defaults), meta: meta, } if space.HasApp(proxyman.APP_ID_INBOUND_MANAGER) { handler.inboundHandlerManager = space.GetApp(proxyman.APP_ID_INBOUND_MANAGER).(proxyman.InboundHandlerManager) } return handler, nil }
// Private: Used by app.Space only. func (v *DefaultDispatcher) Initialize(space app.Space) error { if !space.HasApp(proxyman.APP_ID_OUTBOUND_MANAGER) { return errors.New("DefaultDispatcher: OutboundHandlerManager is not found in the space.") } v.ohm = space.GetApp(proxyman.APP_ID_OUTBOUND_MANAGER).(proxyman.OutboundHandlerManager) if space.HasApp(router.APP_ID) { v.router = space.GetApp(router.APP_ID).(*router.Router) } return nil }
// Private: Used by app.Space only. func (this *DefaultDispatcher) Initialize(space app.Space) error { if !space.HasApp(proxyman.APP_ID_OUTBOUND_MANAGER) { log.Error("DefaultDispatcher: OutboundHandlerManager is not found in the space.") return app.ErrMissingApplication } this.ohm = space.GetApp(proxyman.APP_ID_OUTBOUND_MANAGER).(proxyman.OutboundHandlerManager) if space.HasApp(router.APP_ID) { this.router = space.GetApp(router.APP_ID).(router.Router) } return nil }
func NewCacheServer(space app.Space, config *Config) *CacheServer { server := &CacheServer{ records: make(map[string]*DomainRecord), servers: make([]NameServer, len(config.NameServers)), hosts: config.GetInternalHosts(), } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { log.Error("DNS: Dispatcher is not found in the space.") return app.ErrMissingApplication } dispatcher := space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) for idx, destPB := range config.NameServers { address := destPB.Address.AsAddress() if address.Family().IsDomain() && address.Domain() == "localhost" { server.servers[idx] = &LocalNameServer{} } else { dest := destPB.AsDestination() if dest.Network == v2net.Network_Unknown { dest.Network = v2net.Network_UDP } if dest.Network == v2net.Network_UDP { server.servers[idx] = NewUDPNameServer(dest, dispatcher) } } } if len(config.NameServers) == 0 { server.servers = append(server.servers, &LocalNameServer{}) } return nil }) return server }
func NewCacheServer(space app.Space, config *Config) *CacheServer { server := &CacheServer{ records: make(map[string]*DomainRecord), servers: make([]NameServer, len(config.NameServers)), hosts: config.Hosts, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { log.Error("DNS: Dispatcher is not found in the space.") return app.ErrMissingApplication } dispatcher := space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) for idx, ns := range config.NameServers { if ns.Address().Family().IsDomain() && ns.Address().Domain() == "localhost" { server.servers[idx] = &LocalNameServer{} } else { server.servers[idx] = NewUDPNameServer(ns, dispatcher) } } if len(config.NameServers) == 0 { server.servers = append(server.servers, &LocalNameServer{}) } return nil }) return server }
func NewRouter(config *Config, space app.Space) *Router { r := &Router{ domainStrategy: config.DomainStrategy, //cache: NewRoutingTable(), rules: make([]Rule, len(config.Rule)), } space.InitializeApplication(func() error { for idx, rule := range config.Rule { r.rules[idx].Tag = rule.Tag cond, err := rule.BuildCondition() if err != nil { return err } r.rules[idx].Condition = cond } if !space.HasApp(dns.APP_ID) { log.Error("Router: DNS is not found in the space.") return app.ErrMissingApplication } r.dnsServer = space.GetApp(dns.APP_ID).(dns.Server) return nil }) return r }
func NewServer(config *ServerConfig, space app.Space, meta *proxy.InboundHandlerMeta) (*Server, error) { if config.GetUser() == nil { return nil, protocol.ErrUserMissing } rawAccount, err := config.User.GetTypedAccount() if err != nil { return nil, errors.New("Shadowsocks|Server: Failed to get user account: " + err.Error()) } account := rawAccount.(*ShadowsocksAccount) s := &Server{ config: config, meta: meta, user: config.GetUser(), account: account, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { return app.ErrMissingApplication } s.packetDispatcher = space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) return nil }) return s, nil }
func NewOutboundProxy(space app.Space) *OutboundProxy { proxy := new(OutboundProxy) space.InitializeApplication(func() error { if !space.HasApp(proxyman.APP_ID_OUTBOUND_MANAGER) { return errors.New("Proxy: Outbound handler manager not found.") } proxy.outboundManager = space.GetApp(proxyman.APP_ID_OUTBOUND_MANAGER).(proxyman.OutboundHandlerManager) return nil }) return proxy }
// NewServer creates a new Server object. func NewServer(config *ServerConfig, space app.Space, meta *proxy.InboundHandlerMeta) *Server { s := &Server{ config: config, meta: meta, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { return errors.New("Socks|Server: Dispatcher is not found in the space.") } s.packetDispatcher = space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) return nil }) return s }
func NewRouter(config *RouterRuleConfig, space app.Space) *Router { r := &Router{ config: config, cache: NewRoutingTable(), } space.InitializeApplication(func() error { if !space.HasApp(dns.APP_ID) { log.Error("DNS: Router is not found in the space.") return app.ErrMissingApplication } r.dnsServer = space.GetApp(dns.APP_ID).(dns.Server) return nil }) return r }
func NewDokodemoDoor(config *Config, space app.Space, meta *proxy.InboundHandlerMeta) *DokodemoDoor { d := &DokodemoDoor{ config: config, address: config.GetPredefinedAddress(), port: v2net.Port(config.Port), meta: meta, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { return errors.New("Dokodemo: Dispatcher is not found in the space.") } d.packetDispatcher = space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) return nil }) return d }
func NewDokodemoDoor(config *Config, space app.Space, meta *proxy.InboundHandlerMeta) *DokodemoDoor { d := &DokodemoDoor{ config: config, address: config.Address, port: config.Port, meta: meta, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { log.Error("Dokodemo: Dispatcher is not found in the space.") return app.ErrMissingApplication } d.packetDispatcher = space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) return nil }) return d }
func NewFreedomConnection(config *Config, space app.Space, meta *proxy.OutboundHandlerMeta) *FreedomConnection { f := &FreedomConnection{ domainStrategy: config.DomainStrategy, timeout: config.Timeout, meta: meta, } space.InitializeApplication(func() error { if config.DomainStrategy == Config_USE_IP { if !space.HasApp(dns.APP_ID) { log.Error("Freedom: DNS server is not found in the space.") return app.ErrMissingApplication } f.dns = space.GetApp(dns.APP_ID).(dns.Server) } return nil }) return f }
func FromSpace(space app.Space) Interface { if app := space.GetApplication((*Interface)(nil)); app != nil { return app.(Interface) } return nil }