From 7fb34f0cd1b0bca195c4e3bb1b76f5e1488df161 Mon Sep 17 00:00:00 2001 From: idk Date: Sat, 12 Sep 2020 13:26:34 -0400 Subject: [PATCH] Update wss --- go.mod | 1 + go.sum | 2 ++ serve.go | 77 ++++++++++++++++++++++++++++++++++++++++++++----- tracker/main.go | 40 ++++++++++++++++--------- 4 files changed, 98 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index d2c14c8..23c3231 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.14 require ( github.com/eyedeekay/sam3 v0.32.3 github.com/gorilla/websocket v1.4.2 + github.com/i19/autorestart v0.0.0-20170310073050-8641672e67c3 github.com/justinas/alice v1.2.0 github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537 github.com/zeebo/bencode v1.0.0 // indirect diff --git a/go.sum b/go.sum index e6392f5..b12cc9d 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ github.com/eyedeekay/sam3 v0.32.3 h1:PW1vQoo2H7c3Q4l2DngJqpSdsdJprMCk9NOkUHtcdmM github.com/eyedeekay/sam3 v0.32.3/go.mod h1:qRA9KIIVxbrHlkj+ZB+OoxFGFgdKeGp1vSgPw26eOVU= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/i19/autorestart v0.0.0-20170310073050-8641672e67c3 h1:ewK4Mie80CJTl9eI2mplgVaAWhexBLdrVV78aryaDnA= +github.com/i19/autorestart v0.0.0-20170310073050-8641672e67c3/go.mod h1:lJt/bdNMMTvHTj0CHfC1HFbnxrYkmUTrpPw0Euldqe0= github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= github.com/vvampirius/retracker v0.0.0-20171226134001-fdbec17ad537 h1:tzwfH/icuZbxYWB2YL94pB+TsgYDtV++E5OAtVok//k= diff --git a/serve.go b/serve.go index 28364fc..adec706 100644 --- a/serve.go +++ b/serve.go @@ -1,12 +1,15 @@ package samcore import ( - "net/http" - //"fmt" + "fmt" + "io/ioutil" "log" + "net" + "net/http" "github.com/gorilla/websocket" "github.com/justinas/alice" + // "github.com/vvampirius/retracker/bittorrent/tracker" "github.com/vvampirius/retracker/core/common" Receiver "github.com/vvampirius/retracker/core/receiver" Storage "github.com/vvampirius/retracker/core/storage" @@ -18,6 +21,12 @@ import ( "os" ) +var ( + ln net.Listener + // storage *Announce + core Core +) + var upgrader = websocket.Upgrader{ ReadBufferSize: 4096, WriteBufferSize: 4096, @@ -76,37 +85,89 @@ func wsMiddleware(next http.Handler) http.Handler { return } for { - messageType, p, err := conn.ReadMessage() + messageType, _, err := conn.ReadMessage() if err != nil { log.Println(err) return } - if err := conn.WriteMessage(messageType, p); err != nil { - log.Println(err) - return + + //xrealip := r.Header.Get(`X-Real-IP`) + xi2pdest := r.Header.Get(`X-I2p-Dest-Base64`) + compact := r.URL.Query().Get(`compact`) + /* + if self.Logger != nil { + self.Logger.Printf("%s %s %s %s\n", r.RemoteAddr, xrealip, r.RequestURI, r.UserAgent()) + } + */ + rr := core.Receiver.Announce.ProcessAnnounce( + xi2pdest, + r.URL.Query().Get(`info_hash`), + r.URL.Query().Get(`peer_id`), + r.URL.Query().Get(`port`), + r.URL.Query().Get(`uploaded`), + r.URL.Query().Get(`downloaded`), + r.URL.Query().Get(`left`), + r.URL.Query().Get(`ip`), + r.URL.Query().Get(`numwant`), + r.URL.Query().Get(`event`), + compact, + ) + if d, err := rr.Bencode(); err == nil { + fmt.Fprint(w, d) + if err := conn.WriteMessage(messageType, []byte(d)); err != nil { + log.Println(err) + return + } + } else { + //self.Logger.Println(err.Error()) } + } }) } +func homeHandler(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Content-Type", "text/html") + fmt.Fprintf(w, "") + fmt.Fprintf(w, "") + fmt.Fprintf(w, " ") + fmt.Fprintf(w, "

Rhizome Open Tracker:

") + fmt.Fprintf(w, " ") + fmt.Fprintf(w, "") + fmt.Fprintf(w, "") +} + func New(config *common.Config) (*Core, error) { storage := Storage.New(config) - core := Core{ + core = Core{ Config: config, Storage: storage, Receiver: Receiver.New(config, storage), } - ln, err := Sammy() + var err error + ln, err = Sammy() if err != nil { return nil, err } + defer ln.Close() ws := alice.New(wsMiddleware) + http.HandleFunc("/", homeHandler) http.Handle("/announce", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) http.Handle("/a", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) http.Handle("/ws/announce", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) http.Handle("/ws/a", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) http.Handle("/announce/ws", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) http.Handle("/a/ws", ws.Then(http.HandlerFunc(core.Receiver.Announce.HttpHandler))) + ioutil.WriteFile("keys.base32.txt", []byte(ln.Addr().(i2pkeys.I2PAddr).Base32()), 0644) if err := http.Serve(ln, nil); err != nil { // set listen port return nil, err } diff --git a/tracker/main.go b/tracker/main.go index 482f3c5..c04a51d 100644 --- a/tracker/main.go +++ b/tracker/main.go @@ -3,17 +3,16 @@ package main import ( "flag" "fmt" - Core "github.com/eyedeekay/tracker" - "github.com/vvampirius/retracker/core/common" "os" "syscall" + "time" + + Core "github.com/eyedeekay/tracker" + "github.com/i19/autorestart" + "github.com/vvampirius/retracker/core/common" ) -const VERSION = 0.2 - -func PrintRepo() { - fmt.Fprintln(os.Stderr, "\n# https://github.com/vvampirius/retracker") -} +var config common.Config func main() { flag.Usage = func() { @@ -21,10 +20,8 @@ func main() { flag.PrintDefaults() PrintRepo() } - listen := flag.String("l", ":80", "Listen address:port") - age := flag.Float64("a", 180, "Keep 'n' minutes peer in memory") + age := flag.Float64("a", 1800, "Keep 'n' minutes peer in memory") debug := flag.Bool("d", false, "Debug mode") - xrealip := flag.Bool("x", false, "Get RemoteAddr from X-Real-IP header") ver := flag.Bool("v", false, "Show version") flag.Parse() @@ -34,12 +31,27 @@ func main() { syscall.Exit(0) } - config := common.Config{ - Listen: *listen, + config = common.Config{ + Listen: "127.0.0.1:80", Debug: *debug, Age: *age, - XRealIP: *xrealip, + XRealIP: false, } - Core.New(&config) + autorestart.Run(worker) +} + +const VERSION = 0.2 + +func PrintRepo() { + fmt.Fprintln(os.Stderr, "\n# https://github.com/vvampirius/retracker") +} + +func worker() { + Core.New(&config) + for i := 0; i <= 10; i++ { + time.Sleep(time.Second) + fmt.Println(i) + } + panic("Panicing ... ") }