package main import ( "fmt" "net" "os" "github.com/spf13/pflag" "stuner/internal/stuner" ) func main() { targetIPv4 := pflag.String("target-ipv4", "127.0.0.1", "target server IPv4 address") port := pflag.Uint16("port", 9443, "target server port") enc := pflag.String("enc", "", "transport encryption acknowledgement; pass none") demoPipeline := pflag.Bool("demo-pipeline", false, "run local POSIX pipeline demo instead of TCP client") pflag.Parse() if *demoPipeline { stuner.RunClientPipelineDemo() return } if ip := net.ParseIP(*targetIPv4); ip == nil || ip.To4() == nil { fmt.Fprintf(os.Stderr, "invalid --target-ipv4: %s\n", *targetIPv4) os.Exit(2) } if !pflag.Lookup("enc").Changed { fmt.Fprintln(os.Stderr, stuner.NoTransportEncryptionMessage) panic(stuner.NoTransportEncryptionMessage) } encMode, err := stuner.ParseEncryptionMode(*enc) if err != nil { fmt.Fprintln(os.Stderr, err) panic(err) } if err := stuner.RunTCPClient(*targetIPv4, *port, encMode); err != nil { fmt.Fprintf(os.Stderr, "client: %v\n", err) os.Exit(1) } }