From 39217ab5ef10b8684e1377a6bd61ff38b00150b1 Mon Sep 17 00:00:00 2001 From: Kleissner Date: Sun, 17 Oct 2021 16:55:31 +0200 Subject: [PATCH] Untangle connection parameters from msgEncodeTraverseSetAddress --- Command Traverse.go | 17 ++++++++++++++++- Message Encoding.go | 19 +++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/Command Traverse.go b/Command Traverse.go index 8396d35..cae129f 100644 --- a/Command Traverse.go +++ b/Command Traverse.go @@ -8,6 +8,7 @@ package core import ( "math/rand" + "net" "time" "github.com/PeernetOfficial/core/protocol" @@ -43,7 +44,21 @@ func (peer *PeerInfo) cmdTraverseForward(msg *MessageTraverse) { return } - if err := msgEncodeTraverseSetAddress(msg.Payload, connectionIPv4, connectionIPv6); err != nil { + // get the individual fields + var IPv4, IPv6 net.IP + var PortIPv4, PortIPv4ReportedExternal, PortIPv6, PortIPv6ReportedExternal uint16 + if connectionIPv4 != nil { + IPv4 = connectionIPv4.Address.IP + PortIPv4 = uint16(connectionIPv4.Address.Port) + PortIPv4ReportedExternal = connectionIPv4.PortExternal + } + if connectionIPv6 != nil { + IPv6 = connectionIPv6.Address.IP + PortIPv6 = uint16(connectionIPv6.Address.Port) + PortIPv6ReportedExternal = connectionIPv6.PortExternal + } + + if err := msgEncodeTraverseSetAddress(msg.Payload, IPv4, PortIPv4, PortIPv4ReportedExternal, IPv6, PortIPv6, PortIPv6ReportedExternal); err != nil { return } diff --git a/Message Encoding.go b/Message Encoding.go index 41b3cb9..ef3b9e5 100644 --- a/Message Encoding.go +++ b/Message Encoding.go @@ -912,8 +912,7 @@ func msgEncodeTraverse(senderPrivateKey *btcec.PrivateKey, embeddedPacketRaw []b } // msgEncodeTraverseSetAddress sets the IP and Port -//func msgEncodeTraverseSetAddress(raw []byte, IPv4 net.IP, PortIPv4, PortIPv4ReportedExternal uint16, IPv6 net.IP, PortIPv6, PortIPv6ReportedExternal uint16) (err error) { -func msgEncodeTraverseSetAddress(raw []byte, connectionIPv4, connectionIPv6 *Connection) (err error) { +func msgEncodeTraverseSetAddress(raw []byte, IPv4 net.IP, PortIPv4, PortIPv4ReportedExternal uint16, IPv6 net.IP, PortIPv6, PortIPv6ReportedExternal uint16) (err error) { if isPacketSizeExceed(len(raw), 0) { return errors.New("traverse encode 2: embedded packet too big") } else if len(raw) < traversePayloadHeaderSize { @@ -926,17 +925,17 @@ func msgEncodeTraverseSetAddress(raw []byte, connectionIPv4, connectionIPv6 *Con } // IPv4 - if connectionIPv4 != nil && connectionIPv4.IsIPv4() { - copy(raw[76+sizePacketEmbed+65:76+sizePacketEmbed+65+4], connectionIPv4.Address.IP.To4()) - binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+4:76+sizePacketEmbed+65+4+2], uint16(connectionIPv4.Address.Port)) - binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+6:76+sizePacketEmbed+65+6+2], connectionIPv4.PortExternal) + if IPv4 != nil && IsIPv4(IPv4) { + copy(raw[76+sizePacketEmbed+65:76+sizePacketEmbed+65+4], IPv4.To4()) + binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+4:76+sizePacketEmbed+65+4+2], PortIPv4) + binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+6:76+sizePacketEmbed+65+6+2], PortIPv4ReportedExternal) } // IPv6 - if connectionIPv6 != nil && connectionIPv6.IsIPv6() { - copy(raw[76+sizePacketEmbed+65+8:76+sizePacketEmbed+65+8+16], connectionIPv6.Address.IP.To16()) - binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+24:76+sizePacketEmbed+65+24+2], uint16(connectionIPv6.Address.Port)) - binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+26:76+sizePacketEmbed+65+26+2], connectionIPv6.PortExternal) + if IPv6 != nil && IsIPv6(IPv6) { + copy(raw[76+sizePacketEmbed+65+8:76+sizePacketEmbed+65+8+16], IPv6.To16()) + binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+24:76+sizePacketEmbed+65+24+2], PortIPv6) + binary.LittleEndian.PutUint16(raw[76+sizePacketEmbed+65+26:76+sizePacketEmbed+65+26+2], PortIPv6ReportedExternal) } return nil