cl.websocketTrackers = websocketTrackers{
PeerId: cl.peerID,
Logger: cl.logger,
- GetAnnounceRequest: func(event tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest {
+ GetAnnounceRequest: func(event tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error) {
cl.lock()
defer cl.unlock()
- return cl.torrents[infoHash].announceRequest(event)
+ t, ok := cl.torrents[infoHash]
+ if !ok {
+ return tracker.AnnounceRequest{}, errors.New("torrent not tracked by client")
+ }
+ return t.announceRequest(event), nil
},
OnConn: func(dc datachannel.ReadWriteCloser, dcc webtorrent.DataChannelContext) {
cl.lock()
// Client represents the webtorrent client
type TrackerClient struct {
Url string
- GetAnnounceRequest func(_ tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest
+ GetAnnounceRequest func(_ tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error)
PeerId [20]byte
OnConn onDataChannelOpen
Logger log.Logger
return fmt.Errorf("creating offer: %w", err)
}
- request := tc.GetAnnounceRequest(event, infoHash)
+ request, err := tc.GetAnnounceRequest(event, infoHash)
+ if err != nil {
+ return fmt.Errorf("getting announce parameters: %w", err)
+ }
req := AnnounceRequest{
Numwant: 1, // If higher we need to create equal amount of offers.
type websocketTrackers struct {
PeerId [20]byte
Logger log.Logger
- GetAnnounceRequest func(event tracker.AnnounceEvent, infoHash [20]byte) tracker.AnnounceRequest
+ GetAnnounceRequest func(event tracker.AnnounceEvent, infoHash [20]byte) (tracker.AnnounceRequest, error)
OnConn func(datachannel.ReadWriteCloser, webtorrent.DataChannelContext)
mu sync.Mutex
clients map[string]*refCountedWebtorrentTrackerClient