github.com/ava-labs/avalanchego@v1.11.11/network/p2p/gossip/message.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package gossip 5 6 import ( 7 "google.golang.org/protobuf/proto" 8 9 "github.com/ava-labs/avalanchego/ids" 10 "github.com/ava-labs/avalanchego/proto/pb/sdk" 11 "github.com/ava-labs/avalanchego/utils/bloom" 12 ) 13 14 func MarshalAppRequest(filter, salt []byte) ([]byte, error) { 15 request := &sdk.PullGossipRequest{ 16 Filter: filter, 17 Salt: salt, 18 } 19 return proto.Marshal(request) 20 } 21 22 func ParseAppRequest(bytes []byte) (*bloom.ReadFilter, ids.ID, error) { 23 request := &sdk.PullGossipRequest{} 24 if err := proto.Unmarshal(bytes, request); err != nil { 25 return nil, ids.Empty, err 26 } 27 28 salt, err := ids.ToID(request.Salt) 29 if err != nil { 30 return nil, ids.Empty, err 31 } 32 33 filter, err := bloom.Parse(request.Filter) 34 return filter, salt, err 35 } 36 37 func MarshalAppResponse(gossip [][]byte) ([]byte, error) { 38 return proto.Marshal(&sdk.PullGossipResponse{ 39 Gossip: gossip, 40 }) 41 } 42 43 func ParseAppResponse(bytes []byte) ([][]byte, error) { 44 response := &sdk.PullGossipResponse{} 45 err := proto.Unmarshal(bytes, response) 46 return response.Gossip, err 47 } 48 49 func MarshalAppGossip(gossip [][]byte) ([]byte, error) { 50 return proto.Marshal(&sdk.PushGossip{ 51 Gossip: gossip, 52 }) 53 } 54 55 func ParseAppGossip(bytes []byte) ([][]byte, error) { 56 msg := &sdk.PushGossip{} 57 err := proto.Unmarshal(bytes, msg) 58 return msg.Gossip, err 59 }