handshakesTimeout = 20 * time.Second
pruneInterval = 10 * time.Second
+
+ metadataExtendedId = iota + 1 // 0 is reserved for deleting keys
+ pexExtendedId
+
+ extendedHandshakeClientVersion = "go.torrent dev 20140825"
)
// Currently doesn't really queue, but should in the future.
ExtendedPayload: func() []byte {
d := map[string]interface{}{
"m": map[string]int{
- "ut_metadata": 1,
- "ut_pex": 2,
+ "ut_metadata": metadataExtendedId,
},
- "v": "go.torrent dev 20140825", // Just the date
+ "v": extendedHandshakeClientVersion,
// No upload queue is implemented yet.
"reqq": func() int {
if me.noUpload {
}(),
"e": 1, // Awwww yeah
}
+ if !me.config.DisablePEX {
+ d["ut_pex"] = pexExtendedId
+ }
if torrent.metadataSizeKnown() {
d["metadata_size"] = torrent.metadataSize()
}
if _, ok := c.PeerExtensionIDs["ut_metadata"]; ok {
me.requestPendingMetadata(t, c)
}
- case 1:
+ case metadataExtendedId:
err = me.gotMetadataExtensionMsg(msg.ExtendedPayload, t, c)
if err != nil {
err = fmt.Errorf("error handling metadata extension message: %s", err)
}
- case 2:
+ case pexExtendedId:
+ if me.config.DisablePEX {
+ break
+ }
var pexMsg peerExchangeMessage
err := bencode.Unmarshal(msg.ExtendedPayload, &pexMsg)
if err != nil {
strings.HasPrefix(string(c.PeerID[:]), "-XL0012-") {
return nil
}
- // log.Printf("peer extension map: %#v", c.PeerExtensionIDs)
}
case pp.Port:
if me.dHT == nil {
ListenAddr string `long:"listen-addr" value-name:"HOST:PORT"`
// Don't announce to trackers. This only leaves DHT to discover peers.
DisableTrackers bool `long:"disable-trackers"`
+ DisablePEX bool `long:"disable-pex"`
// Don't create a DHT.
NoDHT bool `long:"disable-dht"`
// Overrides the default DHT configuration.