func TestListenHTTP(t *testing.T) { px = proxy.NewProxy() go func(t *testing.T) { if err := px.Start(listenHTTPAddr); err != nil { t.Fatal(err) } }(t) time.Sleep(time.Millisecond * 100) }
// Parses flags and initializes Hyperfox tool. func main() { var err error var sslEnabled bool // Banner. log.Printf("Hyperfox v%s // https://hyperfox.org\n", version) log.Printf("By José Carlos Nieto.\n\n") // Parsing command line flags. flag.Parse() // Opening database. if err = dbsetup(); err != nil { log.Fatalf("db: %q", err) } defer sess.Close() // Is SSL enabled? if *flagSSLPort > 0 && *flagSSLCertFile != "" { sslEnabled = true } // User requested SSL mode. if sslEnabled { if *flagSSLCertFile == "" { flag.Usage() log.Fatal(ErrMissingSSLCert) } if *flagSSLKeyFile == "" { flag.Usage() log.Fatal(ErrMissingSSLKey) } os.Setenv(proxy.EnvSSLCert, *flagSSLCertFile) os.Setenv(proxy.EnvSSLKey, *flagSSLKeyFile) } // Creatig proxy. p := proxy.NewProxy() // Attaching logger. p.AddLogger(logger.Stdout{}) // Attaching capture tool. res := make(chan capture.Response, 256) p.AddBodyWriteCloser(capture.New(res)) // Saving captured data with a goroutine. go func() { for { select { case r := <-res: if _, err := col.Append(r); err != nil { log.Printf(ErrDatabaseError.Error(), err) } } } }() if err = startServices(); err != nil { log.Fatal("startServices:", err) } fmt.Println("") cerr := make(chan error) // Starting proxy servers. go func() { if err := p.Start(fmt.Sprintf("%s:%d", *flagAddress, *flagPort)); err != nil { cerr <- err } }() if sslEnabled { go func() { if err := p.StartTLS(fmt.Sprintf("%s:%d", *flagAddress, *flagSSLPort)); err != nil { cerr <- err } }() } err = <-cerr log.Fatalf(ErrBindFailed.Error(), err) }