| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package torrent
- import (
- "net/netip"
- g "github.com/anacrolix/generics"
- )
- func setAdd[K comparable](m *map[K]struct{}, elem K) {
- g.MakeMapIfNilAndSet(m, elem, struct{}{})
- }
- type clientHolepunchAddrSets struct {
- undialableWithoutHolepunch map[netip.AddrPort]struct{}
- undialableWithoutHolepunchDialedAfterHolepunchConnect map[netip.AddrPort]struct{}
- dialableOnlyAfterHolepunch map[netip.AddrPort]struct{}
- dialedSuccessfullyAfterHolepunchConnect map[netip.AddrPort]struct{}
- probablyOnlyConnectedDueToHolepunch map[netip.AddrPort]struct{}
- accepted map[netip.AddrPort]struct{}
- }
- type ClientStats struct {
- ConnStats
- // Ongoing outgoing dial attempts. There may be more than one dial going on per peer address due
- // to hole-punch connect requests. The total may not match the sum of attempts for all Torrents
- // if a Torrent is dropped while there are outstanding dials.
- ActiveHalfOpenAttempts int
- NumPeersUndialableWithoutHolepunch int
- // Number of unique peer addresses that were dialed after receiving a holepunch connect message,
- // that have previously been undialable without any hole-punching attempts.
- NumPeersUndialableWithoutHolepunchDialedAfterHolepunchConnect int
- // Number of unique peer addresses that were successfully dialed and connected after a holepunch
- // connect message and previously failing to connect without holepunching.
- NumPeersDialableOnlyAfterHolepunch int
- NumPeersDialedSuccessfullyAfterHolepunchConnect int
- NumPeersProbablyOnlyConnectedDueToHolepunch int
- }
- func (cl *Client) statsLocked() (stats ClientStats) {
- stats.ConnStats = cl.connStats.Copy()
- stats.ActiveHalfOpenAttempts = cl.numHalfOpen
- stats.NumPeersUndialableWithoutHolepunch = len(cl.undialableWithoutHolepunch)
- stats.NumPeersUndialableWithoutHolepunchDialedAfterHolepunchConnect = len(cl.undialableWithoutHolepunchDialedAfterHolepunchConnect)
- stats.NumPeersDialableOnlyAfterHolepunch = len(cl.dialableOnlyAfterHolepunch)
- stats.NumPeersDialedSuccessfullyAfterHolepunchConnect = len(cl.dialedSuccessfullyAfterHolepunchConnect)
- stats.NumPeersProbablyOnlyConnectedDueToHolepunch = len(cl.probablyOnlyConnectedDueToHolepunch)
- return
- }
|