added the initial version of the (t *Torrent) KnownSwarm() function
This commit is contained in:
parent
260806a6f2
commit
f87b732959
39
torrent.go
39
torrent.go
@ -11,6 +11,7 @@ import (
|
||||
"math/rand"
|
||||
"net"
|
||||
"os"
|
||||
"strconv"
|
||||
"sync"
|
||||
"text/tabwriter"
|
||||
"time"
|
||||
@ -122,6 +123,44 @@ func (t *Torrent) Closed() <-chan struct{} {
|
||||
return t.closed.LockedChan(&t.cl.mu)
|
||||
}
|
||||
|
||||
// KnownSwarm returns the known subset of the peers in the Torrent's swarm, including active,
|
||||
// pending, and half-open peers.
|
||||
func (t *Torrent) KnownSwarm() (ks []Peer) {
|
||||
// Add pending peers to the list
|
||||
for _, peer := range t.peers {
|
||||
ks = append(ks, peer)
|
||||
}
|
||||
|
||||
// Add active peers to the list
|
||||
for conn := range t.conns {
|
||||
host, portString, err := net.SplitHostPort(conn.remoteAddr().String())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ip := net.ParseIP(host)
|
||||
port, err := strconv.Atoi(portString)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
ks = append(ks, Peer{
|
||||
Id: conn.PeerID,
|
||||
IP: ip,
|
||||
Port: port,
|
||||
Source: conn.Discovery,
|
||||
// TODO: the connection can be unencrypted due to our (or the peer's) preference,
|
||||
// but the remote peer might support the encryption. Find a better way to query
|
||||
// that information, if possible.
|
||||
SupportsEncryption: conn.encrypted,
|
||||
})
|
||||
}
|
||||
|
||||
// TODO: how can we add half-open peers?
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
func (t *Torrent) setChunkSize(size pp.Integer) {
|
||||
t.chunkSize = size
|
||||
t.chunkPool = &sync.Pool{
|
||||
|
Loading…
x
Reference in New Issue
Block a user