err = errors.New("no ips")
return
}
+ me.t.cl.rLock()
+ defer me.t.cl.rUnlock()
+ if me.t.cl.closed.IsSet() {
+ err = errors.New("client is closed")
+ return
+ }
for _, ip = range ips {
if me.t.cl.ipIsBlocked(ip) {
continue
// Return how long to wait before trying again. For most errors, we return 5
// minutes, a relatively quick turn around for DNS changes.
func (me *trackerScraper) announce(ctx context.Context, event tracker.AnnounceEvent) (ret trackerAnnounceResult) {
-
defer func() {
ret.Completed = time.Now()
}()
defer cancel()
me.t.logger.WithDefaultLevel(log.Debug).Printf("announcing to %q: %#v", me.u.String(), req)
res, err := tracker.Announce{
- Context: ctx,
- HTTPProxy: me.t.cl.config.HTTPProxy,
- UserAgent: me.t.cl.config.HTTPUserAgent,
- TrackerUrl: me.trackerUrl(ip),
- Request: req,
- HostHeader: me.u.Host,
- ServerName: me.u.Hostname(),
- UdpNetwork: me.u.Scheme,
- ClientIp4: krpc.NodeAddr{IP: me.t.cl.config.PublicIp4},
- ClientIp6: krpc.NodeAddr{IP: me.t.cl.config.PublicIp6},
+ Context: ctx,
+ HttpProxy: me.t.cl.config.HTTPProxy,
+ HttpRequestDirector: me.t.cl.config.HttpRequestDirector,
+ DialContext: me.t.cl.config.TrackerDialContext,
+ ListenPacket: me.t.cl.config.TrackerListenPacket,
+ UserAgent: me.t.cl.config.HTTPUserAgent,
+ TrackerUrl: me.trackerUrl(ip),
+ Request: req,
+ HostHeader: me.u.Host,
+ ServerName: me.u.Hostname(),
+ UdpNetwork: me.u.Scheme,
+ ClientIp4: krpc.NodeAddr{IP: me.t.cl.config.PublicIp4},
+ ClientIp6: krpc.NodeAddr{IP: me.t.cl.config.PublicIp6},
+ Logger: me.t.logger,
}.Do()
me.t.logger.WithDefaultLevel(log.Debug).Printf("announce to %q returned %#v: %v", me.u.String(), res, err)
if err != nil {
}
func (me *trackerScraper) Run() {
-
defer me.announceStopped()
ctx, cancel := context.WithCancel(context.Background())