les: implement new client pool (#19745)
This commit is contained in:
33
les/peer.go
33
les/peer.go
@ -21,6 +21,7 @@ import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"math/rand"
|
||||
"net"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
@ -33,6 +34,7 @@ import (
|
||||
"github.com/ethereum/go-ethereum/les/flowcontrol"
|
||||
"github.com/ethereum/go-ethereum/light"
|
||||
"github.com/ethereum/go-ethereum/p2p"
|
||||
"github.com/ethereum/go-ethereum/p2p/enode"
|
||||
"github.com/ethereum/go-ethereum/params"
|
||||
"github.com/ethereum/go-ethereum/rlp"
|
||||
)
|
||||
@ -105,10 +107,11 @@ type peer struct {
|
||||
updateTime mclock.AbsTime
|
||||
frozen uint32 // 1 if client is in frozen state
|
||||
|
||||
fcClient *flowcontrol.ClientNode // nil if the peer is server only
|
||||
fcServer *flowcontrol.ServerNode // nil if the peer is client only
|
||||
fcParams flowcontrol.ServerParams
|
||||
fcCosts requestCostTable
|
||||
fcClient *flowcontrol.ClientNode // nil if the peer is server only
|
||||
fcServer *flowcontrol.ServerNode // nil if the peer is client only
|
||||
fcParams flowcontrol.ServerParams
|
||||
fcCosts requestCostTable
|
||||
balanceTracker *balanceTracker // set by clientPool.connect, used and removed by ProtocolManager.handle
|
||||
|
||||
trusted bool
|
||||
onlyAnnounce bool
|
||||
@ -122,12 +125,32 @@ func newPeer(version int, network uint64, trusted bool, p *p2p.Peer, rw p2p.MsgR
|
||||
rw: rw,
|
||||
version: version,
|
||||
network: network,
|
||||
id: fmt.Sprintf("%x", p.ID().Bytes()),
|
||||
id: peerIdToString(p.ID()),
|
||||
trusted: trusted,
|
||||
errCh: make(chan error, 1),
|
||||
}
|
||||
}
|
||||
|
||||
// peerIdToString converts enode.ID to a string form
|
||||
func peerIdToString(id enode.ID) string {
|
||||
return fmt.Sprintf("%x", id.Bytes())
|
||||
}
|
||||
|
||||
// freeClientId returns a string identifier for the peer. Multiple peers with the
|
||||
// same identifier can not be connected in free mode simultaneously.
|
||||
func (p *peer) freeClientId() string {
|
||||
if addr, ok := p.RemoteAddr().(*net.TCPAddr); ok {
|
||||
if addr.IP.IsLoopback() {
|
||||
// using peer id instead of loopback ip address allows multiple free
|
||||
// connections from local machine to own server
|
||||
return p.id
|
||||
} else {
|
||||
return addr.IP.String()
|
||||
}
|
||||
}
|
||||
return p.id
|
||||
}
|
||||
|
||||
// rejectUpdate returns true if a parameter update has to be rejected because
|
||||
// the size and/or rate of updates exceed the capacity limitation
|
||||
func (p *peer) rejectUpdate(size uint64) bool {
|
||||
|
Reference in New Issue
Block a user