client.go | 8 ++++++-- webtorrent/tracker_client.go | 7 +++++-- wstracker.go | 2 +- diff --git a/client.go b/client.go index 5ca405a58e7c01fc67fe62408d90ed55c50dc2d1..735d58cad063f8e8c75332d87cd9d030af34742a 100644 --- a/client.go +++ b/client.go @@ -247,10 +247,14 @@ 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() diff --git a/webtorrent/tracker_client.go b/webtorrent/tracker_client.go index c2052b99510305938e095264279c654e793c49b2..5e56ca23c5ab18a871d5d54c498f6e96bd4e6dca 100644 --- a/webtorrent/tracker_client.go +++ b/webtorrent/tracker_client.go @@ -24,7 +24,7 @@ // 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 @@ -135,7 +135,10 @@ if err != nil { 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. diff --git a/wstracker.go b/wstracker.go index 8c71e514d067af12ca8a8e7a826e7d635316f045..4e83ca5fe790c793d8497e271997f83282ca6ade 100644 --- a/wstracker.go +++ b/wstracker.go @@ -33,7 +33,7 @@ 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