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 NewDefaultDispatcher(space app.Space) *DefaultDispatcher { d := &DefaultDispatcher{} space.InitializeApplication(func() error { return d.Initialize(space) }) return d }
// 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 }