Update wss
This commit is contained in:
1
go.mod
1
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
|
||||
|
2
go.sum
2
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=
|
||||
|
77
serve.go
77
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, "<!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
|
||||
}
|
||||
|
@ -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 ... ")
|
||||
}
|
||||
|
Reference in New Issue
Block a user