import (
"crypto"
"expvar"
+
+ pp "github.com/anacrolix/torrent/peer_protocol"
)
const (
pieceHash = crypto.SHA1
- maxRequests = 250 // Maximum pending requests we allow peers to send us.
defaultChunkSize = 0x4000 // 16KiB
- // These are our extended message IDs. Peers will use these values to
- // select which extension a message is intended for.
+ // Arbitrary maximum of "metadata_size" (see https://www.bittorrent.org/beps/bep_0009.html)
+ // libtorrent-rasterbar uses 4MiB at last check. TODO: Add links to values used by other
+ // implementations here. I saw 14143527 in the metainfo for
+ // 3597f16e239aeb8f8524a1a1c4e4725a0a96b470. Large values for legitimate torrents should be
+ // recorded here for consideration.
+ maxMetadataSize uint32 = 16 * 1024 * 1024
+)
+
+// These are our extended message IDs. Peers will use these values to
+// select which extension a message is intended for.
+const (
metadataExtendedId = iota + 1 // 0 is reserved for deleting keys
pexExtendedId
+ utHolepunchExtendedId
)
-func defaultPeerExtensionBytes() peerExtensionBytes {
- return newPeerExtensionBytes(ExtensionBitDHT, ExtensionBitExtended, ExtensionBitFast)
+func defaultPeerExtensionBytes() PeerExtensionBits {
+ return pp.NewPeerExtensionBytes(pp.ExtensionBitDht, pp.ExtensionBitLtep, pp.ExtensionBitFast)
+}
+
+func init() {
+ torrent.Set("peers supporting extension", &peersSupportingExtension)
+ torrent.Set("chunks received", &chunksReceived)
}
// I could move a lot of these counters to their own file, but I suspect they
// may be attached to a Client someday.
var (
- unwantedChunksReceived = expvar.NewInt("chunksReceivedUnwanted")
- unexpectedChunksReceived = expvar.NewInt("chunksReceivedUnexpected")
- chunksReceived = expvar.NewInt("chunksReceived")
-
- torrent = expvar.NewMap("torrent")
-
- peersAddedBySource = expvar.NewMap("peersAddedBySource")
-
- uploadChunksPosted = expvar.NewInt("uploadChunksPosted")
+ torrent = expvar.NewMap("torrent")
+ peersSupportingExtension expvar.Map
+ chunksReceived expvar.Map
pieceHashedCorrect = expvar.NewInt("pieceHashedCorrect")
pieceHashedNotCorrect = expvar.NewInt("pieceHashedNotCorrect")
- unsuccessfulDials = expvar.NewInt("dialSuccessful")
- successfulDials = expvar.NewInt("dialUnsuccessful")
-
- acceptUTP = expvar.NewInt("acceptUTP")
- acceptTCP = expvar.NewInt("acceptTCP")
- acceptReject = expvar.NewInt("acceptReject")
-
- peerExtensions = expvar.NewMap("peerExtensions")
completedHandshakeConnectionFlags = expvar.NewMap("completedHandshakeConnectionFlags")
// Count of connections to peer with same client ID.
- connsToSelf = expvar.NewInt("connsToSelf")
- // Number of completed connections to a client we're already connected with.
- duplicateClientConns = expvar.NewInt("duplicateClientConns")
- receivedKeepalives = expvar.NewInt("receivedKeepalives")
- supportedExtensionMessages = expvar.NewMap("supportedExtensionMessages")
- postedKeepalives = expvar.NewInt("postedKeepalives")
+ connsToSelf = expvar.NewInt("connsToSelf")
+ receivedKeepalives = expvar.NewInt("receivedKeepalives")
// Requests received for pieces we don't have.
requestsReceivedForMissingPieces = expvar.NewInt("requestsReceivedForMissingPieces")
requestedChunkLengths = expvar.NewMap("requestedChunkLengths")
messageTypesReceived = expvar.NewMap("messageTypesReceived")
- messageTypesSent = expvar.NewMap("messageTypesSent")
- messageTypesPosted = expvar.NewMap("messageTypesPosted")
// Track the effectiveness of Torrent.connPieceInclinationPool.
pieceInclinationsReused = expvar.NewInt("pieceInclinationsReused")
pieceInclinationsNew = expvar.NewInt("pieceInclinationsNew")
pieceInclinationsPut = expvar.NewInt("pieceInclinationsPut")
- fillBufferSentCancels = expvar.NewInt("fillBufferSentCancels")
- fillBufferSentRequests = expvar.NewInt("fillBufferSentRequests")
- numFillBuffers = expvar.NewInt("numFillBuffers")
+ concurrentChunkWrites = expvar.NewInt("torrentConcurrentChunkWrites")
)