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 // Parsing command line flags. flag.Parse() // Opening database. if err = dbsetup(); err != nil { log.Fatalf("db: %q", err) } // Remember to close the database session. 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 filter(r.ContentType, r.URL) { fmt.Println(r.Method, r.URL, r.ContentType) } // if _, err := col.Append(r); err != nil { // log.Printf(ErrDatabaseError.Error(), err) // } } } }() 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) }