forked from btcsuite/btcd
-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First round of address manager package refactor
These changes are a joint effort between myself and @dajohi. - Separate IP address range/network code into its own file - Group all of the RFC range declarations together - Introduces a new unexported function to simplify the range declarations - Add comments for all exported functions - Use consistent variable casing in refactored code - Add initial doc.go package overview - Bump serialize interval to 10 minutes - Correct GroupKey to perform as intended - Make AddLocalAddress return error instead of just a debug message - Add tests for AddLocalAddress - Add tests for GroupKey - Add tests for GetBestLocalAddress - Use time.Time to improve readability - Make address manager code golint clean - Misc cleanup - Add test coverage reporting
- Loading branch information
Showing
10 changed files
with
836 additions
and
453 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
#!/bin/sh | ||
|
||
# This script uses gocov to generate a test coverage report. | ||
# The gocov tool my be obtained with the following command: | ||
# go get github.com/axw/gocov/gocov | ||
# | ||
# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. | ||
|
||
# Check for gocov. | ||
type gocov >/dev/null 2>&1 | ||
if [ $? -ne 0 ]; then | ||
echo >&2 "This script requires the gocov tool." | ||
echo >&2 "You may obtain it with the following command:" | ||
echo >&2 "go get github.com/axw/gocov/gocov" | ||
exit 1 | ||
fi | ||
gocov test | gocov report |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// Copyright (c) 2014 Conformal Systems LLC. | ||
// Use of this source code is governed by an ISC | ||
// license that can be found in the LICENSE file. | ||
|
||
/* | ||
Package addrmgr implements concurrency safe Bitcoin address manager. | ||
Address Manager Overview | ||
In order maintain the peer-to-peer Bitcoin network, there needs to be a source | ||
of addresses to connect to as nodes come and go. The Bitcoin protocol provides | ||
a the getaddr and addr messages to allow peers to communicate known addresses | ||
with each other. However, there needs to a mechanism to store those results and | ||
select peers from them. It is also important to note that remote peers can't | ||
be trusted to send valid peers nor attempt to provide you with only peers they | ||
control with malicious intent. | ||
With that in mind, this package provides a concurrency safe address manager for | ||
caching and selecting peers in a non-determinstic manner. The general idea is | ||
the caller adds addresses to the address manager and notifies it when addresses | ||
are connected, known good, and attempted. The caller also requests addresses as | ||
it needs them. | ||
The address manager internally segregates the addresses into groups and | ||
non-deterministically selects groups in a cryptographically random manner. This | ||
reduce the chances multiple addresses from the same nets are selected which | ||
generally helps provide greater peer diversity, and perhaps more importantly, | ||
drastically reduces the chances an attacker is able to coerce your peer into | ||
only connecting to nodes they control. | ||
The address manager also understands routability and tor addresses and tries | ||
hard to only return routable addresses. In addition, it uses the information | ||
provided by the caller about connected, known good, and attempted addresses to | ||
periodically purge peers which no longer appear to be good peers as well as | ||
bias the selection toward known good peers. The general idea is to make a best | ||
effort at only providing usuable addresses. | ||
*/ | ||
package addrmgr |
Oops, something went wrong.