// Command ptxclient implements a pluggable transports CLI client. This command // is only meant for testing and is not production ready. package main import ( "flag" "fmt" "os" "os/signal" "github.com/apex/log" "github.com/ooni/probe-cli/v3/internal/ptx" ) func main() { mode := flag.String("m", "snowflake", "one of snowflake and obfs4") verbose := flag.Bool("v", false, "enable verbose mode") flag.Parse() if *verbose { log.SetLevel(log.DebugLevel) } var dialer ptx.PTDialer switch *mode { case "snowflake": dialer = &ptx.SnowflakeDialer{} case "obfs4": dialer = ptx.DefaultTestingOBFS4Bridge() default: fmt.Fprintf(os.Stderr, "unknown pluggable transport: %s\n", *mode) os.Exit(1) } listener := &ptx.Listener{ PTDialer: dialer, Logger: log.Log, } if err := listener.Start(); err != nil { log.WithError(err).Fatal("listener.Start failed") } sigch := make(chan os.Signal, 1) signal.Notify(sigch, os.Interrupt) <-sigch listener.Stop() }