Merge pull request #1161 from nspcc-dev/neo3/protocol/cmd_not_found

network: update CMDUncknown
This commit is contained in:
Roman Khimov 2020-07-16 09:49:16 +03:00 committed by GitHub
commit 58f23422ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 7 deletions

View file

@ -12,7 +12,7 @@ import (
"github.com/nspcc-dev/neo-go/pkg/network/payload"
)
//go:generate stringer -type=CommandType
//go:generate stringer -type=CommandType -output=message_string.go
// CompressionMinSize is the lower bound to apply compression.
const CompressionMinSize = 1024
@ -68,7 +68,7 @@ const (
CMDInv CommandType = 0x27
CMDGetData CommandType = 0x28
CMDGetBlockData CommandType = 0x29
CMDUnknown CommandType = 0x2a
CMDNotFound CommandType = 0x2a
CMDTX = CommandType(payload.TXType)
CMDBlock = CommandType(payload.BlockType)
CMDConsensus = CommandType(payload.ConsensusType)

View file

@ -1,4 +1,4 @@
// Code generated by "stringer -type=CommandType"; DO NOT EDIT.
// Code generated by "stringer -type=CommandType -output=message_string.go"; DO NOT EDIT.
package network
@ -21,7 +21,7 @@ func _() {
_ = x[CMDInv-39]
_ = x[CMDGetData-40]
_ = x[CMDGetBlockData-41]
_ = x[CMDUnknown-42]
_ = x[CMDNotFound-42]
_ = x[CMDTX-43]
_ = x[CMDBlock-44]
_ = x[CMDConsensus-45]
@ -39,7 +39,7 @@ const (
_CommandType_name_2 = "CMDPingCMDPong"
_CommandType_name_3 = "CMDGetHeadersCMDHeaders"
_CommandType_name_4 = "CMDGetBlocksCMDMempool"
_CommandType_name_5 = "CMDInvCMDGetDataCMDGetBlockDataCMDUnknownCMDTXCMDBlockCMDConsensus"
_CommandType_name_5 = "CMDInvCMDGetDataCMDGetBlockDataCMDNotFoundCMDTXCMDBlockCMDConsensus"
_CommandType_name_6 = "CMDRejectCMDFilterLoadCMDFilterAddCMDFilterClear"
_CommandType_name_7 = "CMDMerkleBlock"
_CommandType_name_8 = "CMDAlert"
@ -51,7 +51,7 @@ var (
_CommandType_index_2 = [...]uint8{0, 7, 14}
_CommandType_index_3 = [...]uint8{0, 13, 23}
_CommandType_index_4 = [...]uint8{0, 12, 22}
_CommandType_index_5 = [...]uint8{0, 6, 16, 31, 41, 46, 54, 66}
_CommandType_index_5 = [...]uint8{0, 6, 16, 31, 42, 47, 55, 67}
_CommandType_index_6 = [...]uint8{0, 9, 22, 34, 48}
)

View file

@ -57,7 +57,7 @@ func NewInventory(typ InventoryType, hashes []util.Uint256) *Inventory {
// DecodeBinary implements Serializable interface.
func (p *Inventory) DecodeBinary(br *io.BinReader) {
p.Type = InventoryType(br.ReadB())
br.ReadArray(&p.Hashes)
br.ReadArray(&p.Hashes, MaxHashesCount)
}
// EncodeBinary implements Serializable interface.

View file

@ -538,6 +538,7 @@ func (s *Server) handleMempoolCmd(p Peer) error {
// handleInvCmd processes the received inventory.
func (s *Server) handleGetDataCmd(p Peer, inv *payload.Inventory) error {
var notFound []util.Uint256
for _, hash := range inv.Hashes {
var msg *Message
@ -546,11 +547,15 @@ func (s *Server) handleGetDataCmd(p Peer, inv *payload.Inventory) error {
tx, _, err := s.chain.GetTransaction(hash)
if err == nil {
msg = NewMessage(CMDTX, tx)
} else {
notFound = append(notFound, hash)
}
case payload.BlockType:
b, err := s.chain.GetBlock(hash)
if err == nil {
msg = NewMessage(CMDBlock, b)
} else {
notFound = append(notFound, hash)
}
case payload.ConsensusType:
if cp := s.consensus.GetPayload(hash); cp != nil {
@ -571,6 +576,9 @@ func (s *Server) handleGetDataCmd(p Peer, inv *payload.Inventory) error {
}
}
}
if len(notFound) != 0 {
return p.EnqueueP2PMessage(NewMessage(CMDNotFound, payload.NewInventory(inv.Type, notFound)))
}
return nil
}