// NewServer creates a new Server. The defaults are used if config is nil. func NewServer(cfg *ServerConfig) (*Server, error) { yamuxConfig := yamux.DefaultConfig() if cfg.YamuxConfig != nil { if err := yamux.VerifyConfig(cfg.YamuxConfig); err != nil { return nil, err } yamuxConfig = cfg.YamuxConfig } log := newLogger("tunnel-server", cfg.Debug) if cfg.Log != nil { log = cfg.Log } return &Server{ pending: make(map[string]chan net.Conn), sessions: make(map[string]*yamux.Session), onDisconnect: make(map[string]func() error), virtualHosts: newVirtualHosts(), controls: newControls(), yamuxConfig: yamuxConfig, log: log, }, nil }
// verify is used to verify the ClientConfig func (c *ClientConfig) verify() error { if c.ServerAddr == "" && c.FetchServerAddr == nil { return errors.New("neither ServerAddr nor FetchServerAddr is set") } if c.Identifier == "" && c.FetchIdentifier == nil { return errors.New("neither Identifier nor FetchIdentifier is set") } if c.YamuxConfig != nil { if err := yamux.VerifyConfig(c.YamuxConfig); err != nil { return err } } return nil }
// NewServer creates a new Server. The defaults are used if config is nil. func NewServer(cfg *ServerConfig) (*Server, error) { yamuxConfig := yamux.DefaultConfig() if cfg.YamuxConfig != nil { if err := yamux.VerifyConfig(cfg.YamuxConfig); err != nil { return nil, err } yamuxConfig = cfg.YamuxConfig } log := newLogger("tunnel-server", cfg.Debug) if cfg.Log != nil { log = cfg.Log } connCh := make(chan net.Conn) opts := &vaddrOptions{ connCh: connCh, log: log, } s := &Server{ pending: make(map[string]chan net.Conn), sessions: make(map[string]*yamux.Session), onConnectCallbacks: newCallbacks("OnConnect"), onDisconnectCallbacks: newCallbacks("OnDisconnect"), virtualHosts: newVirtualHosts(), virtualAddrs: newVirtualAddrs(opts), controls: newControls(), states: make(map[string]ClientState), stateCh: cfg.StateChanges, httpDirector: cfg.Director, yamuxConfig: yamuxConfig, connCh: connCh, log: log, } go s.serveTCP() return s, nil }
// verify is used to verify the ClientConfig func (c *ClientConfig) verify() error { if c.ServerAddr == "" && c.FetchServerAddr == nil { return errors.New("neither ServerAddr nor FetchServerAddr is set") } if c.Identifier == "" && c.FetchIdentifier == nil { return errors.New("neither Identifier nor FetchIdentifier is set") } if c.YamuxConfig != nil { if err := yamux.VerifyConfig(c.YamuxConfig); err != nil { return err } } if c.Proxy != nil && (c.LocalAddr != "" || c.FetchLocalAddr != nil) { return errors.New("both Proxy and LocalAddr or FetchLocalAddr are set") } return nil }