Since streams were multiplexed over connections, this wouldn't have
caused file descriptor/socket leaks; however, it would have definitely
caused memory leak (for the stream data structures).
This is because we are introducing more and more parallel P2P concepts
(libp2p peer versus our own peer, for example). Explicit tagging makes
it easier for untrained eyes to understand which side the code refers
to: If it's prefixed with libp2p_, it's libp2p; if not, it's our p2p.
While we are at this, apply the std → 3rd-party → local import grouping,
and also rename multiaddr to ma (the upstream canonical name of
go-multiaddr) in the affected files.
Mostly fixes error handling, but there are a few functional changes:
* ReadMessageContent() returns an error upon SetReadDeadline() failures.
* hostv2 SendMessage() returns an error upon write failures.
This is a move-only refactor, intended to bubble the Host interface
(which is the main p2p interface) to the top. It also has the effect of
reducing name stutter (host.Host → p2p.Host).
This is mainly for hostv2 libp2p support.
addPeer will add new peer into the peerstore.
NewHost function add Identity support for libp2p after generating
keypair. The PeerID is generated from the public key, will be used to
find the right PeerInfo for libp2p communication.
Signed-off-by: Leo Chen <leo@harmony.one>
In p2p library, I added a channel notification mechansim when it failed
to send messages after retries. The failed p2p.Peer will be notified to
caller via the channel. Then the leader knows which peer is offline and
adds to an offline list.
Before another consensus is started, the ledaer will check the offline
list and remove the node from the validator list. Leader will have to
broadcast the Pong message to all validators to sync the public key
list.
Signed-off-by: Leo Chen <leo@harmony.one>