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
|
||||
}
|
||||
|
||||
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) {
|
||||
p.wg.Add(len(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
|
||||
// if Peer doesn't support Spec, it returns nil
|
||||
func ClonePeer(p *Peer, spec *Spec) *Peer {
|
||||
rw, err := p.Peer.GetRW(spec.Name, spec.Version)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &Peer{
|
||||
Peer: p.Peer,
|
||||
rw: p.rw,
|
||||
rw: rw,
|
||||
spec: spec,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue