func Main() { // parse options opts, err := ParseArgs() if err != nil { fmt.Println(err) os.Exit(1) } // set up logging log.LogTo(opts.logto) // read configuration file config, err := LoadConfiguration(opts) if err != nil { fmt.Println(err) os.Exit(1) } // seed random number generator seed, err := util.RandomSeed() if err != nil { fmt.Printf("Couldn't securely seed the random number generator!") os.Exit(1) } rand.Seed(seed) NewController().Run(config) }
func Main() { // parse options opts := parseArgs() // init logging log.LogTo(opts.logto) tunnels = NewTunnelManager(opts.domain) go proxyListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.proxyPort}, opts.domain) go controlListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.tunnelPort}, opts.domain) go httpListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.publicPort}) // wait forever done := make(chan int) <-done }
func Main() { // parse options opts = parseArgs() // init logging log.LogTo(opts.logto) // seed random number generator seed, err := util.RandomSeed() if err != nil { panic(err) } rand.Seed(seed) // init tunnel/control registry registryCacheFile := os.Getenv("REGISTRY_CACHE_FILE") tunnelRegistry = NewTunnelRegistry(registryCacheSize, registryCacheFile) controlRegistry = NewControlRegistry() // start listeners listeners = make(map[string]*conn.Listener) // load tls configuration //remove tls config // tlsConfig, err := LoadTLSConfig(opts.tlsCrt, opts.tlsKey) // if err != nil { // panic(err) // } // listen for http if opts.httpAddr != "" { listeners["http"] = startHttpListener(opts.httpAddr, nil) } // listen for https // set listen https None // if opts.httpsAddr != "" { // listeners["https"] = startHttpListener(opts.httpsAddr, tlsConfig) // } // ngrok clients tunnelListener(opts.tunnelAddr, nil) }
func Main() { // parse options opts := parseArgs() domain = opts.domain // init logging log.LogTo(opts.logto) // init tunnel registry registryCacheFile := os.Getenv("REGISTRY_CACHE_FILE") tunnels = NewTunnelRegistry(registryCacheSize, registryCacheFile) go proxyListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.proxyPort}, opts.domain) go controlListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.tunnelPort}, opts.domain) go httpListener(&net.TCPAddr{IP: net.ParseIP("0.0.0.0"), Port: opts.publicPort}) // wait forever done := make(chan int) <-done }
func Main() { // parse options opts := parseArgs() // set up logging log.LogTo(opts.logto) // set up auth token if opts.authtoken == "" { opts.authtoken = LoadAuthToken() } // init client state s := &State{ status: "connecting", // unique client id id: util.RandIdOrPanic(8), // command-line options opts: opts, // metrics metrics: NewClientMetrics(), } switch opts.protocol { case "http": s.protocol = proto.NewHttp() case "tcp": s.protocol = proto.NewTcp() } // init ui ctl := ui.NewController() if opts.webport != -1 { web.NewWebView(ctl, s, opts.webport) } if opts.logto != "stdout" { term.New(ctl, s) } go reconnectingControl(s, ctl) go autoUpdate(s, ctl, opts.authtoken) quitMessage := "" ctl.Wait.Add(1) go func() { defer ctl.Wait.Done() for { select { case obj := <-ctl.Cmds: switch cmd := obj.(type) { case ui.CmdQuit: quitMessage = cmd.Message ctl.DoShutdown() return case ui.CmdRequest: go func() { var localConn conn.Conn localConn, err := conn.Dial(s.opts.localaddr, "prv", nil) if err != nil { log.Warn("Failed to open private leg %s: %v", s.opts.localaddr, err) return } //defer localConn.Close() localConn = s.protocol.WrapConn(localConn) localConn.Write(cmd.Payload) ioutil.ReadAll(localConn) }() } } } }() ctl.Wait.Wait() fmt.Println(quitMessage) }