Exemple #1
0
 public void HandleResponseObserver(IMessage messageDto,
                                    IChannelHandlerContext channelHandlerContext,
                                    PeerId senderPeerIdentifier,
                                    ICorrelationId correlationId)
 {
     throw new NotImplementedException();
 }
        /// <summary>
        ///     Processes a GetNeighbourResponse item from stream.
        /// </summary>
        /// <param name="peerNeighborsRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerId"></param>
        /// <param name="correlationId"></param>
        /// <returns></returns>
        protected override PeerNeighborsResponse HandleRequest(PeerNeighborsRequest peerNeighborsRequest,
                                                               IChannelHandlerContext channelHandlerContext,
                                                               PeerId senderPeerId,
                                                               ICorrelationId correlationId)
        {
            Guard.Argument(peerNeighborsRequest, nameof(peerNeighborsRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();

            Logger.Debug("PeerNeighborsRequest Message Received");

            var activePeersList = _repository
                                  .FindAll(new Specification <Peer>(p => !p.IsAwolPeer))
                                  .Take(Constants.NumberOfRandomPeers) // 😂
                                  .ToList();

            Guard.Argument(activePeersList).MinCount(1);

            var peerNeighborsResponseMessage = new PeerNeighborsResponse();

            for (var i = 0; i < Constants.NumberOfRandomPeers; i++)
            {
                peerNeighborsResponseMessage.Peers.Add(activePeersList.RandomElement().PeerId);
            }

            return(peerNeighborsResponseMessage);
        }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="signMessageRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerIdentifier"></param>
        /// <param name="correlationId"></param>
        protected override void HandleResponse(SignMessageResponse signMessageRequest,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerIdentifier,
                                               ICorrelationId correlationId)
        {
            Guard.Argument(signMessageRequest, nameof(signMessageRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();
            Logger.Debug(@"sign message response");

            try
            {
                var decodeResult = MultiBase.Decode(signMessageRequest.OriginalMessage.ToByteArray().ToString());

                Guard.Argument(decodeResult, nameof(decodeResult)).NotNull("The sign message response cannot be null.");

                var originalMessage = decodeResult.ToHexString();

                Guard.Argument(originalMessage, nameof(originalMessage)).NotNull();

                _output.WriteLine(
                    $@"Signature: {signMessageRequest.Signature.ToByteArray().ToBase32()} " +
                    $@"Public Key: {signMessageRequest.PublicKey.ToByteArray().ToBase32()} Original Message: {originalMessage}");
            }
            catch (Exception ex)
            {
                Logger.Error(ex,
                             "Failed to handle SignMessageResponseHandler after receiving message {0}", signMessageRequest);
                _output.WriteLine(ex.Message);
            }
            finally
            {
                Logger.Information("Press Enter to continue ...");
            }
        }
 protected override void HandleResponse(TransferFileBytesRequest message,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     _fileTransferFactory.DownloadChunk(message);
 }
Exemple #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="addFileToDfsResponse"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerIdentifier"></param>
        /// <param name="correlationId"></param>
        protected override void HandleResponse(AddFileToDfsResponse addFileToDfsResponse,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerIdentifier,
                                               ICorrelationId correlationId)
        {
            Guard.Argument(addFileToDfsResponse, nameof(addFileToDfsResponse)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();

            // @TODO return int not byte
            // var responseCode = Enumeration.Parse<FileTransferResponseCodes>(deserialised.ResponseCode[0].ToString());

            var responseCode = (FileTransferResponseCodeTypes)addFileToDfsResponse.ResponseCode[0];

            if (responseCode == FileTransferResponseCodeTypes.Successful)
            {
                _rpcFileTransferFactory.FileTransferAsync(correlationId, CancellationToken.None)
                .ConfigureAwait(false);
            }
            else
            {
                var fileTransferInformation = _rpcFileTransferFactory.GetFileTransferInformation(correlationId);
                if (fileTransferInformation != null)
                {
                    _rpcFileTransferFactory.Remove(fileTransferInformation, true);
                }
            }
        }
Exemple #6
0
        public void Init()
        {
            _testScheduler      = new TestScheduler();
            _correlationManager = Substitute.For <IPeerMessageCorrelationManager>();
            _gossipManager      = Substitute.For <IBroadcastManager>();
            _keySigner          = Substitute.For <FakeKeySigner>();

            var peerSettings = Substitute.For <IPeerSettings>();

            peerSettings.NetworkType.Returns(NetworkType.Devnet);
            var peerValidator = Substitute.For <IPeerIdValidator>();

            peerValidator.ValidatePeerIdFormat(Arg.Any <PeerId>()).Returns(true);

            _factory = new TestPeerServerChannelFactory(
                _correlationManager,
                _gossipManager,
                _keySigner,
                peerValidator,
                peerSettings,
                _testScheduler);
            _senderId      = PeerIdHelper.GetPeerId("sender");
            _correlationId = CorrelationId.GenerateCorrelationId();
            _signature     = ByteUtil.GenerateRandomByteArray(new FfiWrapper().SignatureLength);
            _keySigner.Verify(Arg.Any <ISignature>(), Arg.Any <byte[]>(), default)
            .ReturnsForAnyArgs(true);
        }
 /// <summary>
 ///     Processes a GetNeighbourResponse item from stream.
 /// </summary>
 /// <param name="messageDto"></param>
 /// <param name="channelHandlerContext"></param>
 /// <param name="senderPeerId"></param>
 /// <param name="correlationId"></param>
 protected override void HandleResponse(PeerNeighborsResponse messageDto,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerId,
                                        ICorrelationId correlationId)
 {
     ResponseMessageSubject.OnNext(new PeerClientMessageDto(messageDto, senderPeerId, correlationId));
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="getFileFromDfsResponse"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerIdentifier"></param>
        /// <param name="correlationId"></param>
        protected override void HandleResponse(GetFileFromDfsResponse getFileFromDfsResponse,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerIdentifier,
                                               ICorrelationId correlationId)
        {
            Guard.Argument(getFileFromDfsResponse, nameof(getFileFromDfsResponse)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();

            var responseCode = (FileTransferResponseCodeTypes)getFileFromDfsResponse.ResponseCode[0];

            var fileTransferInformation = _fileTransferFactory.GetFileTransferInformation(correlationId);

            if (fileTransferInformation == null)
            {
                return;
            }

            if (responseCode == FileTransferResponseCodeTypes.Successful)
            {
                fileTransferInformation.SetLength(getFileFromDfsResponse.FileSize);

                var ctx = new CancellationTokenSource();
                _fileTransferFactory.FileTransferAsync(fileTransferInformation.CorrelationId, CancellationToken.None)?.ContinueWith(task =>
                {
                    File.Move(fileTransferInformation.TempPath, fileTransferInformation.FileOutputPath);
                }, ctx.Token, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
            }
            else
            {
                fileTransferInformation.Expire();
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="removePeerRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerId"></param>
        /// <param name="correlationId"></param>
        /// <returns></returns>
        protected override RemovePeerResponse HandleRequest(RemovePeerRequest removePeerRequest,
                                                            IChannelHandlerContext channelHandlerContext,
                                                            PeerId senderPeerId,
                                                            ICorrelationId correlationId)
        {
            Guard.Argument(removePeerRequest, nameof(removePeerRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();
            Logger.Debug("Received message of type RemovePeerRequest");

            uint peerDeletedCount = 0;

            var publicKeyIsEmpty = removePeerRequest.PublicKey.IsEmpty;

            var peersToDelete = _peerRepository.FindAll(new Specification <Peer>(peer =>
                                                                                 peer.PeerId.Ip.SequenceEqual(removePeerRequest.PeerIp) &&
                                                                                 (publicKeyIsEmpty || peer.PeerId.PublicKey.SequenceEqual(removePeerRequest.PublicKey.ToByteArray())))).ToArray();

            foreach (var peerToDelete in peersToDelete)
            {
                _peerRepository.Delete(peerToDelete);
                peerDeletedCount += 1;
            }

            return(new RemovePeerResponse
            {
                DeletedCount = peerDeletedCount
            });
        }
Exemple #10
0
        /// <summary>
        /// </summary>
        /// <param name="getMempoolRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerId"></param>
        /// <param name="correlationId"></param>
        /// <returns></returns>
        protected override GetMempoolResponse HandleRequest(GetMempoolRequest getMempoolRequest,
                                                            IChannelHandlerContext channelHandlerContext,
                                                            PeerId senderPeerId,
                                                            ICorrelationId correlationId)
        {
            Guard.Argument(getMempoolRequest, nameof(getMempoolRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();
            Logger.Debug("GetMempoolRequestHandler starting ...");

            try
            {
                Logger.Debug("Received GetMempoolRequest message with content {0}", getMempoolRequest);

                var mempoolTransactions = _mempool.Service.GetAll()
                                          .Select(x => x.ToProtoBuff <PublicEntryDao, PublicEntry>(_mappingProvider));

                return(new GetMempoolResponse
                {
                    Transactions = { mempoolTransactions }
                });
            }
            catch (Exception ex)
            {
                Logger.Error(ex,
                             "Failed to handle GetInfoRequest after receiving message {0}", getMempoolRequest);
                return(new GetMempoolResponse());
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="signMessageRequest"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerId"></param>
        /// <param name="correlationId"></param>
        /// <returns></returns>
        protected override SignMessageResponse HandleRequest(SignMessageRequest signMessageRequest,
                                                             IChannelHandlerContext channelHandlerContext,
                                                             PeerId senderPeerId,
                                                             ICorrelationId correlationId)
        {
            Guard.Argument(signMessageRequest, nameof(signMessageRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();
            Logger.Debug("received message of type SignMessageRequest");

            var decodedMessage = signMessageRequest.Message.ToByteArray();
            var signingContext = signMessageRequest.SigningContext;

            var signature = _keySigner.Sign(decodedMessage, signingContext);

            var publicKey = _keySigner.CryptoContext.GetPublicKeyFromBytes(signature.PublicKeyBytes);

            Guard.Argument(signature).NotNull("Failed to sign message. The signature cannot be null.");

            Guard.Argument(publicKey).NotNull("Failed to get the public key. Public key cannot be null.");

            Logger.Debug("message content is {0}", signMessageRequest.Message);

            return(new SignMessageResponse
            {
                OriginalMessage = signMessageRequest.Message,
                PublicKey = signature.PublicKeyBytes.ToByteString(),
                Signature = signature.SignatureBytes.ToByteString()
            });
        }
        /// <summary>
        ///     Handle the request for GetPeerInfo
        /// </summary>
        /// <param name="getPeerInfoRequest">The request</param>
        /// <param name="channelHandlerContext">The channel handler context</param>
        /// <param name="senderPeerId">The sender peer identifier</param>
        /// <param name="correlationId">The correlationId</param>
        /// <returns>The GetPeerInfoResponse</returns>
        protected override GetPeerInfoResponse HandleRequest(GetPeerInfoRequest getPeerInfoRequest,
                                                             IChannelHandlerContext channelHandlerContext,
                                                             PeerId senderPeerId,
                                                             ICorrelationId correlationId)
        {
            Guard.Argument(getPeerInfoRequest, nameof(getPeerInfoRequest)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();
            Logger.Debug("received message of type GetPeerInfoRequest");

            var ip = getPeerInfoRequest.Ip;

            var peerInfo = _peerRepository.GetPeersByIpAndPublicKey(ip, getPeerInfoRequest.PublicKey)
                           .Select(x =>
                                   new PeerInfo
            {
                PeerId        = x.PeerId,
                Reputation    = x.Reputation,
                IsBlacklisted = x.BlackListed,
                IsUnreachable = x.IsAwolPeer,
                InactiveFor   = x.InactiveFor.ToDuration(),
                LastSeen      = x.LastSeen.ToTimestamp(),
                Modified      = x.Modified?.ToTimestamp(),
                Created       = x.Created.ToTimestamp()
            }).ToList();

            var response = new GetPeerInfoResponse();

            response.PeerInfo.AddRange(peerInfo);
            return(response);
        }
 /// <inheritdoc />
 public T GetFileTransferInformation(ICorrelationId key)
 {
     lock (_lockObject)
     {
         return(!_pendingFileTransfers.ContainsKey(key.Id) ? default : _pendingFileTransfers[key.Id]);
     }
 }
 protected override void HandleResponse(SetPeerDataFolderResponse setPeerDataFolderResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     //Overriden code
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="getFileFromDfsResponse"></param>
        /// <param name="channelHandlerContext"></param>
        /// <param name="senderPeerIdentifier"></param>
        /// <param name="correlationId"></param>
        protected override void HandleResponse(GetFileFromDfsResponse getFileFromDfsResponse,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerIdentifier,
                                               ICorrelationId correlationId)
        {
            Guard.Argument(getFileFromDfsResponse, nameof(getFileFromDfsResponse)).NotNull();
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();

            // @TODO return int not byte
            // var responseCode = Enumeration.Parse<FileTransferResponseCodes>(deserialised.ResponseCode[0].ToString());

            var responseCode = (FileTransferResponseCodeTypes)getFileFromDfsResponse.ResponseCode[0];

            var fileTransferInformation = _fileTransferFactory.GetFileTransferInformation(correlationId);

            if (fileTransferInformation == null)
            {
                return;
            }

            if (responseCode == FileTransferResponseCodeTypes.Successful)
            {
                fileTransferInformation.SetLength(getFileFromDfsResponse.FileSize);

                _fileTransferFactory.FileTransferAsync(fileTransferInformation.CorrelationId, CancellationToken.None).ContinueWith(task =>
                {
                    File.Move(fileTransferInformation.TempPath, fileTransferInformation.FileOutputPath);
                }).ConfigureAwait(false);
            }
            else
            {
                fileTransferInformation.Expire();
            }
        }
        /// <summary>
        /// Creates a new instance of <see cref="IReceivedMessageInternal"/>
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="messageId">The message identifier.</param>
        /// <param name="correlationId">The correlation identifier.</param>
        /// <returns></returns>
        public IReceivedMessageInternal Create(IMessage message, IMessageId messageId, ICorrelationId correlationId) 
        {
            Guard.NotNull(() => messageId, messageId);
            Guard.NotNull(() => message, message);
            Guard.NotNull(() => correlationId, correlationId);

            return new ReceivedMessageInternal(message, messageId, correlationId);
        }
Exemple #17
0
 public static ProtocolMessage ToSignedProtocolMessage(this IMessage proto,
                                                       PeerId senderId,
                                                       ISignature signature          = default,
                                                       SigningContext signingContext = default,
                                                       ICorrelationId correlationId  = default)
 {
     return(ToSignedProtocolMessage(proto, senderId, signature?.SignatureBytes, signingContext, correlationId));
 }
 public PeerClientMessageDto(IMessage message, PeerId sender, ICorrelationId correlationId)
 {
     Guard.Argument(message, nameof(message))
     .Require(message.GetType().Namespace.Contains("IPPN"));
     Message       = message;
     Sender        = sender;
     CorrelationId = correlationId;
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="SentMessage"/> class.
        /// </summary>
        /// <param name="messageId">The identifier.</param>
        /// <param name="correlationId">The correlation identifier.</param>
        public SentMessage(IMessageId messageId, ICorrelationId correlationId)
        {
            //NOTE - null messageID's are allowed, as this indicates a failure by the transport to send
            Guard.NotNull(() => correlationId, correlationId);

            MessageId = messageId;
            CorrelationId = correlationId;
        }
Exemple #20
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SentMessage"/> class.
        /// </summary>
        /// <param name="messageId">The identifier.</param>
        /// <param name="correlationId">The correlation identifier.</param>
        public SentMessage(IMessageId messageId, ICorrelationId correlationId)
        {
            //NOTE - null messageID's are allowed, as this indicates a failure by the transport to send
            Guard.NotNull(() => correlationId, correlationId);

            MessageId     = messageId;
            CorrelationId = correlationId;
        }
Exemple #21
0
 protected override void HandleResponse(PingResponse pingResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerId,
                                        ICorrelationId correlationId)
 {
     ResponseMessageSubject.OnNext(new PeerClientMessageDto(pingResponse, senderPeerId, correlationId));
     _peerChallenger.ChallengeResponseMessageStreamer.OnNext(new PeerChallengerResponse(senderPeerId));
 }
 /// <summary>
 /// Stub Handle Response
 /// </summary>
 /// <param name="testResponse"></param>
 /// <param name="channelHandlerContext"></param>
 /// <param name="senderPeerIdentifier"></param>
 /// <param name="correlationId"></param>
 protected override void HandleResponse(VersionResponse testResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     /* Empty method as this is a Stub class for testing base */
     throw new NotSupportedException();
 }
Exemple #23
0
 public Neighbour(PeerId peerId,
                  NeighbourStateTypes stateTypes            = default,
                  ICorrelationId discoveryPingCorrelationId = default)
 {
     PeerId     = peerId;
     StateTypes = stateTypes ?? NeighbourStateTypes.NotContacted;
     DiscoveryPingCorrelationId = discoveryPingCorrelationId;
 }
        /// <summary>Ensures the key exists.</summary>
        /// <param name="guid">The unique identifier.</param>
        /// <returns></returns>
        /// <exception cref="System.InvalidOperationException">The specified key does not exist inside the factory.</exception>
        protected bool EnsureKeyExists(ICorrelationId guid)
        {
            if (GetFileTransferInformation(guid) == null)
            {
                throw new InvalidOperationException("The specified key does not exist inside the factory.");
            }

            return(true);
        }
Exemple #25
0
 private ProtocolMessage GenerateProtocolMessage(ICorrelationId correlationId = null)
 {
     return(new AddFileToDfsRequest
     {
         Node = "node1",
         FileName = "Test.dat",
         FileSize = 10000
     }.ToProtocolMessage(_senderIdentifier, correlationId));
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="verifyMessageResponse"></param>
 /// <param name="channelHandlerContext"></param>
 /// <param name="senderPeerIdentifier"></param>
 /// <param name="correlationId"></param>
 protected override void HandleResponse(VerifyMessageResponse verifyMessageResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     Guard.Argument(verifyMessageResponse, nameof(verifyMessageResponse)).NotNull();
     Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
     Guard.Argument(senderPeerIdentifier, nameof(senderPeerIdentifier)).NotNull();
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="versionResponse"></param>
 /// <param name="channelHandlerContext"></param>
 /// <param name="senderPeerIdentifier"></param>
 /// <param name="correlationId"></param>
 protected override void HandleResponse(VersionResponse versionResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     Guard.Argument(versionResponse, nameof(versionResponse)).NotNull("The VersionResponse cannot be null")
     .Require(d => d.Version != null,
              d => $"{nameof(versionResponse)} must have a valid Version.");
 }
 /// <summary>
 /// </summary>
 /// <param name="getMempoolResponse"></param>
 /// <param name="channelHandlerContext"></param>
 /// <param name="senderPeerIdentifier"></param>
 /// <param name="correlationId"></param>
 protected override void HandleResponse(GetMempoolResponse getMempoolResponse,
                                        IChannelHandlerContext channelHandlerContext,
                                        PeerId senderPeerIdentifier,
                                        ICorrelationId correlationId)
 {
     Guard.Argument(getMempoolResponse, nameof(getMempoolResponse))
     .NotNull("The GetMempoolResponse cannot be null")
     .Require(d => d.Transactions != null,
              d => $"{nameof(getMempoolResponse)} must have a valid Mempool.");
 }
        protected override void HandleResponse(DeltaHistoryResponse deltaHeightResponse,
                                               IChannelHandlerContext channelHandlerContext,
                                               PeerId senderPeerId,
                                               ICorrelationId correlationId)
        {
            ResponseMessageSubject.OnNext(new PeerClientMessageDto(deltaHeightResponse, senderPeerId, correlationId));

            //_deltaHistoryRequest.DeltaHistoryResponseMessageStreamer
            //   .OnNext(new PeerDeltaHistoryResponse(senderPeerId, deltaHeightResponse.Result));
        }
 /// <summary>Removes the specified unique identifier.</summary>
 /// <param name="key">The unique identifier.</param>
 private void Remove(ICorrelationId key)
 {
     lock (_lockObject)
     {
         if (_pendingFileTransfers.ContainsKey(key.Id))
         {
             _pendingFileTransfers.Remove(key.Id);
         }
     }
 }
Exemple #31
0
        public void HandleResponseObserver(IMessage message,
                                           IChannelHandlerContext channelHandlerContext,
                                           PeerId senderPeerId,
                                           ICorrelationId correlationId)
        {
            Guard.Argument(channelHandlerContext, nameof(channelHandlerContext)).NotNull();
            Guard.Argument(senderPeerId, nameof(senderPeerId)).NotNull();
            Guard.Argument(message, nameof(message)).NotNull("The message cannot be null");

            HandleResponse((TProto)message, channelHandlerContext, senderPeerId, correlationId);
        }
        protected override BroadcastRawTransactionResponse HandleRequest(BroadcastRawTransactionRequest messageDto,
                                                                         IChannelHandlerContext channelHandlerContext,
                                                                         PeerId senderPeerId,
                                                                         ICorrelationId correlationId)
        {
            var responseCode = _transactionReceivedEvent.OnTransactionReceived(messageDto.Transaction.ToProtocolMessage(senderPeerId, correlationId));

            return(new BroadcastRawTransactionResponse {
                ResponseCode = responseCode
            });
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="IReceivedMessage{T}" /> class.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="messageId">The message identifier.</param>
        /// <param name="correlationId">The correlation identifier.</param>
        public ReceivedMessageInternal(IMessage message, IMessageId messageId, ICorrelationId correlationId)
        {
            Guard.NotNull(() => message, message);
            Guard.NotNull(() => messageId, messageId);
            Guard.NotNull(() => correlationId, correlationId);

            Body = message.Body;
            MesssageId = messageId;
            CorrelationId = correlationId;
            Headers = new ReadOnlyDictionary<string, object>(message.Headers.ToDictionary(entry => entry.Key,
                                               entry => entry.Value));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageException"/> class.
 /// </summary>
 /// <param name="messageId">The message identifier.</param>
 /// <param name="correlationId">The correlation identifier.</param>
 /// <param name="messagePayload">The raw message payload.</param>
 /// <param name="headerPayload">The raw header payload.</param>
 /// <param name="format">The format.</param>
 /// <param name="args">The arguments.</param>
 public PoisonMessageException(IMessageId messageId, ICorrelationId correlationId, byte[] messagePayload, byte[] headerPayload, string format, params object[] args)
     : base(string.Format(format, args), messageId, correlationId)
 {
     MessagePayload = messagePayload;
     HeaderPayload = headerPayload;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageException"/> class.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="inner">The inner.</param>
 /// <param name="messageId">The message identifier.</param>
 /// <param name="correlationId">The correlation identifier.</param>
 /// <param name="messagePayload">The raw message payload.</param>
 /// <param name="headerPayload">The raw header payload.</param>
 public PoisonMessageException(string message, Exception inner, IMessageId messageId, ICorrelationId correlationId, byte[] messagePayload, byte[] headerPayload)
     : base(message, inner, messageId, correlationId)
 {
     MessagePayload = messagePayload;
     HeaderPayload = headerPayload;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageException"/> class.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="inner">The inner.</param>
 /// <param name="messageId">The message identifier.</param>
 /// <param name="correlationId">The correlation identifier.</param>
 public MessageException(string message, Exception inner, IMessageId messageId, ICorrelationId correlationId)
     : base(message, inner)
 {
     MessageId = messageId;
     CorrelationId = correlationId;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageException"/> class.
 /// </summary>
 /// <param name="messageId">The message identifier.</param>
 /// <param name="correlationId">The correlation identifier.</param>
 /// <param name="format">The format.</param>
 /// <param name="args">The arguments.</param>
 public MessageException(IMessageId messageId, ICorrelationId correlationId, string format, params object[] args)
     : base(string.Format(format, args))
 {
     MessageId = messageId;
     CorrelationId = correlationId;
 }