mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-20 02:42:27 +00:00
p2p: get rw for running spec
This commit is contained in:
parent
0697704f5f
commit
5b2adc135f
2 changed files with 17 additions and 1 deletions
11
p2p/peer.go
11
p2p/peer.go
|
|
@ -345,6 +345,17 @@ outer:
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *Peer) GetRW(name string, version uint) (MsgReadWriter, error) {
|
||||||
|
for _, proto := range p.running {
|
||||||
|
if proto.Name == name && proto.Version == version {
|
||||||
|
var rw MsgReadWriter = proto
|
||||||
|
return rw, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, errors.New("not found")
|
||||||
|
}
|
||||||
|
|
||||||
func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error) {
|
func (p *Peer) startProtocols(writeStart <-chan struct{}, writeErr chan<- error) {
|
||||||
p.wg.Add(len(p.running))
|
p.wg.Add(len(p.running))
|
||||||
for _, proto := range p.running {
|
for _, proto := range p.running {
|
||||||
|
|
|
||||||
|
|
@ -223,10 +223,15 @@ func NewPeer(p *p2p.Peer, rw p2p.MsgReadWriter, spec *Spec) *Peer {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClonePeer constructs a peer object with an arbitrary Spec, based on an existing Peer
|
// ClonePeer constructs a peer object with an arbitrary Spec, based on an existing Peer
|
||||||
|
// if Peer doesn't support Spec, it returns nil
|
||||||
func ClonePeer(p *Peer, spec *Spec) *Peer {
|
func ClonePeer(p *Peer, spec *Spec) *Peer {
|
||||||
|
rw, err := p.Peer.GetRW(spec.Name, spec.Version)
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
return &Peer{
|
return &Peer{
|
||||||
Peer: p.Peer,
|
Peer: p.Peer,
|
||||||
rw: p.rw,
|
rw: rw,
|
||||||
spec: spec,
|
spec: spec,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue