Update wss

This commit is contained in:
idk
2020-09-12 13:26:34 -04:00
parent b12e5c05db
commit 7fb34f0cd1
4 changed files with 98 additions and 22 deletions

1
go.mod
View File

@ -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

2
go.sum
View File

@ -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=

View File

@ -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, "<!DOCTYPE html>")
fmt.Fprintf(w, "<html>")
fmt.Fprintf(w, " <body>")
fmt.Fprintf(w, " <h1>Rhizome Open Tracker:</h1>")
fmt.Fprintf(w, " <ul>")
fmt.Fprintf(w, " <li>")
fmt.Fprintf(w, " <span>Base32 URL: </span>")
fmt.Fprintf(w, " <a href=\"http://%s\"/>%s</a>", ln.Addr().(i2pkeys.I2PAddr).Base32(), ln.Addr().(i2pkeys.I2PAddr).Base32())
fmt.Fprintf(w, " </li>")
fmt.Fprintf(w, " <li>")
fmt.Fprintf(w, " <span>Address Helper: </span>")
fmt.Fprintf(w, " <a href=\"http://%s.%s.i2p/?i2paddresshelper=%s\"/>%s.%s</a>", ln.Addr().(i2pkeys.I2PAddr).Base32()[0:5], "rhz-ot", ln.Addr(), ln.Addr().(i2pkeys.I2PAddr).Base32()[0:5], "rhz-ot.i2p")
fmt.Fprintf(w, " </li>")
fmt.Fprintf(w, " </ul>")
fmt.Fprintf(w, "</body>")
fmt.Fprintf(w, "</html>")
}
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
}

View File

@ -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 ... ")
}