"crypto/rand"
"encoding/json"
"fmt"
- "github.com/anacrolix/generics"
- "go.opentelemetry.io/otel/trace"
+ "net/http"
"sync"
"time"
+ g "github.com/anacrolix/generics"
"github.com/anacrolix/log"
-
- "github.com/anacrolix/torrent/tracker"
"github.com/gorilla/websocket"
"github.com/pion/datachannel"
"github.com/pion/webrtc/v3"
+ "go.opentelemetry.io/otel/trace"
+
+ "github.com/anacrolix/torrent/tracker"
)
type TrackerClientStats struct {
closed bool
stats TrackerClientStats
pingTicker *time.Ticker
+
+ WebsocketTrackerHttpHeader func() http.Header
+ ICEServers []string
}
func (me *TrackerClient) Stats() TrackerClientStats {
tc.mu.Lock()
tc.stats.Dials++
tc.mu.Unlock()
- c, _, err := tc.Dialer.Dial(tc.Url, nil)
+
+ var header http.Header
+ if tc.WebsocketTrackerHttpHeader != nil {
+ header = tc.WebsocketTrackerHttpHeader()
+ }
+
+ c, _, err := tc.Dialer.Dial(tc.Url, header)
if err != nil {
return fmt.Errorf("dialing tracker: %w", err)
}
return fmt.Errorf("creating offer: %w", err)
}
- err = tc.announce(event, infoHash, []outboundOffer{{
- offerId: offerIDBinary,
- outboundOfferValue: outboundOfferValue{
- originalOffer: offer,
- peerConnection: pc,
- infoHash: infoHash,
- dataChannel: dc,
- }},
+ err = tc.announce(event, infoHash, []outboundOffer{
+ {
+ offerId: offerIDBinary,
+ outboundOfferValue: outboundOfferValue{
+ originalOffer: offer,
+ peerConnection: pc,
+ infoHash: infoHash,
+ dataChannel: dc,
+ },
+ },
})
if err != nil {
dc.Close()
return fmt.Errorf("write AnnounceRequest: %w", err)
}
for _, offer := range offers {
- generics.MakeMapIfNilAndSet(&tc.outboundOffers, offer.offerId, offer.outboundOfferValue)
+ g.MakeMapIfNilAndSet(&tc.outboundOffers, offer.offerId, offer.outboundOfferValue)
}
return nil
}