]> Sergey Matveev's repositories - btrtrc.git/blob - tracker/tracker.go
Implementing UDP tracker in its own module
[btrtrc.git] / tracker / tracker.go
1 package tracker
2
3 import (
4         "net"
5         "net/url"
6 )
7
8 type AnnounceRequest struct {
9         InfoHash   [20]byte
10         PeerId     [20]byte
11         Downloaded int64
12         Left       int64
13         Uploaded   int64
14         Event      AnnounceEvent
15         IPAddress  int32
16         Key        int32
17         NumWant    int32
18         Port       int16
19 }
20
21 type AnnounceResponse struct {
22         Interval int32
23         Leechers int32
24         Seeders  int32
25         Peers    []Peer
26 }
27
28 type AnnounceEvent int32
29
30 type Peer struct {
31         IP   net.IP
32         Port int
33 }
34
35 const (
36         None AnnounceEvent = iota
37 )
38
39 type Client interface {
40         Announce(*AnnounceRequest) (AnnounceResponse, error)
41 }
42
43 var schemes = make(map[string]func(*url.URL) Client)
44
45 func RegisterClientScheme(scheme string, newFunc func(*url.URL) Client) {
46 }
47
48 func New(url *url.URL) Client {
49         return schemes[url.Scheme](url)
50 }