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.ErrorMissingApplication } dispatcher := space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher) for idx, ns := range config.NameServers { if ns.Address().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 (this *Factory) Create(space app.Space, rawConfig interface{}, meta *proxy.InboundHandlerMeta) (proxy.InboundHandler, error) { if !space.HasApp(dispatcher.APP_ID) { return nil, internal.ErrBadConfiguration } config := rawConfig.(*Config) allowedClients := protocol.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 }
func (this *ServerFactory) Create(space app.Space, rawConfig interface{}, meta *proxy.InboundHandlerMeta) (proxy.InboundHandler, error) { if !space.HasApp(dispatcher.APP_ID) { return nil, internal.ErrorBadConfiguration } return NewServer( rawConfig.(*Config), space.GetApp(dispatcher.APP_ID).(dispatcher.PacketDispatcher), meta), nil }
// @Private 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.ErrorMissingApplication } 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 }
// NewServer creates a new Server object. func NewServer(config *Config, space app.Space, meta *proxy.InboundHandlerMeta) *Server { s := &Server{ config: config, meta: meta, } space.InitializeApplication(func() error { if !space.HasApp(dispatcher.APP_ID) { log.Error("Socks|Server: Dispatcher is not found in the space.") return app.ErrMissingApplication } 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.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 == DomainStrategyUseIP { 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 }