50 lines
995 B
Go
50 lines
995 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
|
|
"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")
|
|
dhtPort := flag.Int("dht", 6881, "DHT port")
|
|
btPort := flag.Int("bt", 0, "BT listen port")
|
|
utpPort := flag.Int("utp", 6882, "uTP port")
|
|
bootstrap := flag.String("bootstrap", "router.bittorrent.com:6881", "DHT bootstrap node")
|
|
flag.Parse()
|
|
|
|
d, err := dht.New(*dhtPort)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
if err := d.Bootstrap(context.Background(), *bootstrap); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
utpSock, err := utp.New(fmt.Sprintf(":%d", *utpPort))
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
utpSock.Start()
|
|
|
|
m, err := client.NewManager(*dir, d, *btPort, utpSock)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
go m.Run()
|
|
|
|
if err := go9p.Serve(*addr, fs.New(m).Server()); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|