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  }