package main import ( "context" "flag" "log" "net" "github.com/knusbaum/go9p" "storrent/client" "storrent/dht" "storrent/fs" "storrent/utp" ) func main() { addr := flag.String("addr", ":5640", "9P listen address") dir := flag.String("dir", "./download", "download directory") udpPort := flag.Int("port", 6881, "UDP port (DHT + uTP)") btPort := flag.Int("bt", 0, "BT listen port (TCP)") bootstrap := flag.String("bootstrap", "router.bittorrent.com:6881", "DHT bootstrap node") flag.Parse() conn, err := net.ListenUDP("udp", &net.UDPAddr{Port: *udpPort}) if err != nil { log.Fatal(err) } dhtCh := make(chan utp.Packet, 64) sock := utp.New(conn, dhtCh) dht := dht.New(conn, dhtCh) sock.Start() if err := dht.Bootstrap(context.Background(), *bootstrap); err != nil { log.Fatal(err) } m, err := client.NewManager(*dir, dht, *btPort, sock) if err != nil { log.Fatal(err) } go m.Run() if err := go9p.Serve(*addr, fs.New(m).Server()); err != nil { log.Fatal(err) } }