github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/p2p/sender.go (about)

     1  package p2p
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/libp2p/go-libp2p-core/network"
     7  	"github.com/libp2p/go-libp2p-core/peer"
     8  	"github.com/libp2p/go-libp2p-core/protocol"
     9  	"github.com/prysmaticlabs/prysm/shared/traceutil"
    10  	"go.opencensus.io/trace"
    11  )
    12  
    13  // Send a message to a specific peer. The returned stream may be used for reading, but has been
    14  // closed for writing.
    15  //
    16  // When done, the caller must Close or Reset on the stream.
    17  func (s *Service) Send(ctx context.Context, message interface{}, baseTopic string, pid peer.ID) (network.Stream, error) {
    18  	ctx, span := trace.StartSpan(ctx, "p2p.Send")
    19  	defer span.End()
    20  	if err := VerifyTopicMapping(baseTopic, message); err != nil {
    21  		return nil, err
    22  	}
    23  	topic := baseTopic + s.Encoding().ProtocolSuffix()
    24  	span.AddAttributes(trace.StringAttribute("topic", topic))
    25  
    26  	// Apply max dial timeout when opening a new stream.
    27  	ctx, cancel := context.WithTimeout(ctx, maxDialTimeout)
    28  	defer cancel()
    29  
    30  	stream, err := s.host.NewStream(ctx, pid, protocol.ID(topic))
    31  	if err != nil {
    32  		traceutil.AnnotateError(span, err)
    33  		return nil, err
    34  	}
    35  	// do not encode anything if we are sending a metadata request
    36  	if baseTopic != RPCMetaDataTopicV1 {
    37  		if _, err := s.Encoding().EncodeWithMaxLength(stream, message); err != nil {
    38  			traceutil.AnnotateError(span, err)
    39  			_err := stream.Reset()
    40  			_ = _err
    41  			return nil, err
    42  		}
    43  	}
    44  
    45  	// Close stream for writing.
    46  	if err := stream.CloseWrite(); err != nil {
    47  		traceutil.AnnotateError(span, err)
    48  		_err := stream.Reset()
    49  		_ = _err
    50  		return nil, err
    51  	}
    52  
    53  	return stream, nil
    54  }