Documentation ¶
Overview ¶
Standard use involves creating a Server, and calling Announce on it with the details of your local torrent client and infohash of interest.
Index ¶
- func NodeIdSecure(id string, ip net.IP) bool
- func SecureNodeId(id []byte, ip net.IP)
- type Addr
- type Announce
- type Peer
- type PeersValues
- type Server
- func (s *Server) AddNode(ni krpc.NodeInfo)
- func (s *Server) Addr() net.Addr
- func (s *Server) Announce(infoHash string, port int, impliedPort bool) (*Announce, error)
- func (s *Server) Close()
- func (s *Server) ID() string
- func (s *Server) IPBlocklist() iplist.Ranger
- func (s *Server) Nodes() (nis []krpc.NodeInfo)
- func (s *Server) NumNodes() int
- func (s *Server) Ping(node *net.UDPAddr) (*Transaction, error)
- func (s *Server) SetIPBlockList(list iplist.Ranger)
- func (s *Server) Stats() (ss ServerStats)
- func (s *Server) String() string
- type ServerConfig
- type ServerStats
- type Transaction
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NodeIdSecure ¶
Returns whether the node ID is considered secure. The id is the 20 raw bytes. http://www.libtorrent.org/dht_sec.html
func SecureNodeId ¶
Makes a node ID secure, in-place. The ID is 20 raw bytes. http://www.libtorrent.org/dht_sec.html
Types ¶
type Addr ¶
Used internally to refer to node network addresses. String() is called a lot, and so can be optimized. Network() is not exposed, so that the interface does not satisfy net.Addr, as the underlying type must be passed to any OS-level function that take net.Addr.
type Announce ¶
type Announce struct { Peers chan PeersValues // contains filtered or unexported fields }
Maintains state for an ongoing Announce operation. An Announce is started by calling Server.Announce.
func (*Announce) NumContacted ¶
Returns the number of distinct remote addresses the announce has queried.
type PeersValues ¶
type PeersValues struct { Peers []Peer // Peers given in get_peers response. krpc.NodeInfo // The node that gave the response. }
Corresponds to the "values" key in a get_peers KRPC response. A list of peers that a node has reported as being in the swarm for a queried info hash.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
A Server defines parameters for a DHT node server that is able to send queries, and respond to the ones from the network. Each node has a globally unique identifier known as the "node ID." Node IDs are chosen at random from the same 160-bit space as BitTorrent infohashes and define the behaviour of the node. Zero valued Server does not have a valid ID and thus is unable to function properly. Use `NewServer(nil)` to initialize a default node.
func NewServer ¶
func NewServer(c *ServerConfig) (s *Server, err error)
NewServer initializes a new DHT node server.
func (*Server) Addr ¶
Addr returns the listen address for the server. Packets arriving to this address are processed by the server (unless aliens are involved).
func (*Server) Announce ¶
This is kind of the main thing you want to do with DHT. It traverses the graph toward nodes that store peers for the infohash, streaming them to the caller, and announcing the local node to each node if allowed and specified.
func (*Server) Close ¶
func (s *Server) Close()
Stops the server network activity. This is all that's required to clean-up a Server.
func (*Server) ID ¶
ID returns the 20-byte server ID. This is the ID used to communicate with the DHT network.
func (*Server) IPBlocklist ¶
func (*Server) Ping ¶
func (s *Server) Ping(node *net.UDPAddr) (*Transaction, error)
Sends a ping query to the address given.
func (*Server) SetIPBlockList ¶
Packets to and from any address matching a range in the list are dropped.
func (*Server) Stats ¶
func (s *Server) Stats() (ss ServerStats)
Stats returns statistics for the server.
type ServerConfig ¶
type ServerConfig struct { // Listen address. Used if Conn is nil. Addr string // Set NodeId Manually. Caller must ensure that, if NodeId does not // conform to DHT Security Extensions, that NoSecurity is also set. This // should be given as a HEX string. NodeIdHex string Conn net.PacketConn // Don't respond to queries from other nodes. Passive bool // DHT Bootstrap nodes BootstrapNodes []string // Disable bootstrapping from global servers even if given no BootstrapNodes. // This creates a solitary node that awaits other nodes; it's only useful if // you're creating your own DHT and want to avoid accidental crossover, without // spoofing a bootstrap node and filling your logs with connection errors. NoDefaultBootstrap bool // Disable the DHT security extension: // http://www.libtorrent.org/dht_sec.html. NoSecurity bool // Initial IP blocklist to use. Applied before serving and bootstrapping // begins. IPBlocklist iplist.Ranger // Used to secure the server's ID. Defaults to the Conn's LocalAddr(). PublicIP net.IP OnQuery func(*krpc.Msg, net.Addr) bool }
ServerConfig allows to set up a configuration of the `Server` instance to be created with NewServer
type ServerStats ¶
type ServerStats struct { // Count of nodes in the node table that responded to our last query or // haven't yet been queried. GoodNodes int // Count of nodes in the node table. Nodes int // Transactions awaiting a response. OutstandingTransactions int // Individual announce_peer requests that got a success response. ConfirmedAnnounces int // Nodes that have been blocked. BadNodes uint }
ServerStats instance is returned by Server.Stats() and stores Server metrics
type Transaction ¶
type Transaction struct {
// contains filtered or unexported fields
}
Transaction keeps track of a message exchange between nodes, such as a query message and a response message.
func (*Transaction) SetResponseHandler ¶
func (t *Transaction) SetResponseHandler(f func(krpc.Msg, bool))
SetResponseHandler sets up a function to be called when the query response is available.