github.com/defanghe/fabric@v2.1.1+incompatible/gossip/comm/msg.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package comm
     8  
     9  import (
    10  	proto "github.com/hyperledger/fabric-protos-go/gossip"
    11  	"github.com/hyperledger/fabric/gossip/protoext"
    12  	"github.com/pkg/errors"
    13  )
    14  
    15  // ReceivedMessageImpl is an implementation of ReceivedMessage
    16  type ReceivedMessageImpl struct {
    17  	*protoext.SignedGossipMessage
    18  	conn     *connection
    19  	connInfo *protoext.ConnectionInfo
    20  }
    21  
    22  // GetSourceEnvelope Returns the Envelope the ReceivedMessage was
    23  // constructed with
    24  func (m *ReceivedMessageImpl) GetSourceEnvelope() *proto.Envelope {
    25  	return m.Envelope
    26  }
    27  
    28  // Respond sends a msg to the source that sent the ReceivedMessageImpl
    29  func (m *ReceivedMessageImpl) Respond(msg *proto.GossipMessage) {
    30  	sMsg, err := protoext.NoopSign(msg)
    31  	if err != nil {
    32  		err = errors.WithStack(err)
    33  		m.conn.logger.Errorf("Failed creating SignedGossipMessage: %+v", err)
    34  		return
    35  	}
    36  	m.conn.send(sMsg, func(e error) {}, blockingSend)
    37  }
    38  
    39  // GetGossipMessage returns the inner GossipMessage
    40  func (m *ReceivedMessageImpl) GetGossipMessage() *protoext.SignedGossipMessage {
    41  	return m.SignedGossipMessage
    42  }
    43  
    44  // GetConnectionInfo returns information about the remote peer
    45  // that send the message
    46  func (m *ReceivedMessageImpl) GetConnectionInfo() *protoext.ConnectionInfo {
    47  	return m.connInfo
    48  }
    49  
    50  // Ack returns to the sender an acknowledgement for the message
    51  func (m *ReceivedMessageImpl) Ack(err error) {
    52  	ackMsg := &proto.GossipMessage{
    53  		Nonce: m.GetGossipMessage().Nonce,
    54  		Content: &proto.GossipMessage_Ack{
    55  			Ack: &proto.Acknowledgement{},
    56  		},
    57  	}
    58  	if err != nil {
    59  		ackMsg.GetAck().Error = err.Error()
    60  	}
    61  	m.Respond(ackMsg)
    62  }