|
|
@@ -21,7 +21,6 @@ import (
|
|
|
"errors"
|
|
|
"fmt"
|
|
|
"net"
|
|
|
- "regexp"
|
|
|
"sync"
|
|
|
"time"
|
|
|
|
|
|
@@ -40,8 +39,6 @@ const (
|
|
|
bzzHandshakeTimeout = 3000 * time.Millisecond
|
|
|
)
|
|
|
|
|
|
-var regexpEnodeIP = regexp.MustCompile("@(.+):([0-9]+)")
|
|
|
-
|
|
|
// BzzSpec is the spec of the generic swarm handshake
|
|
|
var BzzSpec = &protocols.Spec{
|
|
|
Name: "bzz",
|
|
|
@@ -217,26 +214,10 @@ func (b *Bzz) performHandshake(p *protocols.Peer, handshake *HandshakeMsg) error
|
|
|
return err
|
|
|
}
|
|
|
handshake.peerAddr = rsh.(*HandshakeMsg).Addr
|
|
|
- sanitizeEnodeRemote(p.RemoteAddr(), handshake.peerAddr)
|
|
|
handshake.LightNode = rsh.(*HandshakeMsg).LightNode
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-// the remote enode string may advertise arbitrary host information (e.g. localhost)
|
|
|
-// this method ensures that the addr of the peer will be the one
|
|
|
-// applicable on the interface the connection came in on
|
|
|
-// it modifies the passed bzzaddr in place, and returns the same pointer
|
|
|
-func sanitizeEnodeRemote(paddr net.Addr, baddr *BzzAddr) {
|
|
|
- hsSubmatch := regexpEnodeIP.FindSubmatch(baddr.UAddr)
|
|
|
- ip, _, err := net.SplitHostPort(paddr.String())
|
|
|
- // since we expect nothing else than ipv4 here, a panic on missing submatch is desired
|
|
|
- if err == nil && string(hsSubmatch[1]) != ip {
|
|
|
- remoteStr := fmt.Sprintf("@%s:%s", ip, string(hsSubmatch[2]))
|
|
|
- log.Debug("rewrote peer uaddr host/port", "addr", baddr)
|
|
|
- baddr.UAddr = regexpEnodeIP.ReplaceAll(baddr.UAddr, []byte(remoteStr))
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
// runBzz is the p2p protocol run function for the bzz base protocol
|
|
|
// that negotiates the bzz handshake
|
|
|
func (b *Bzz) runBzz(p *p2p.Peer, rw p2p.MsgReadWriter) error {
|
|
|
@@ -343,7 +324,7 @@ func (b *Bzz) GetOrCreateHandshake(peerID enode.ID) (*HandshakeMsg, bool) {
|
|
|
init: make(chan bool, 1),
|
|
|
done: make(chan struct{}),
|
|
|
}
|
|
|
- // when handshake is first created for a remote peer
|
|
|
+ // when handhsake is first created for a remote peer
|
|
|
// it is initialised with the init
|
|
|
handshake.init <- true
|
|
|
b.handshakes[peerID] = handshake
|