public async ValueTask <bool> ProcessMessageAsync(HandshakeMessage noiseMessage, CancellationToken cancellation) { if (PeerContext.HandshakeComplete) { logger.LogDebug("Receiving version while already handshaked, disconnect."); throw new ProtocolViolationException("Peer already handshaked, disconnecting because of protocol violation."); } switch (_handshakeActNumber) { case 1: // ActOne responder { logger.LogDebug("Handshake ActOne received."); await SendMessageAsync(Handshake(noiseMessage.Payload), cancellation).ConfigureAwait(false); _handshakeActNumber += 2; // jump to act3 logger.LogDebug("Handshake ActTwo sent."); break; } case 2: // ActTwo both { logger.LogDebug("Handshake ActTwo received."); await SendMessageAsync(Handshake(noiseMessage.Payload), cancellation).ConfigureAwait(false); PeerContext.OnHandshakeCompleted(); _handshakeActNumber++; logger.LogDebug("Handshake ActThree sent."); break; } case 3: // ActThree Responder { logger.LogDebug("Handshake ActThree received."); _ = Handshake(noiseMessage.Payload); _handshakeActNumber++; logger.LogDebug("Handshake Init sent."); PeerContext.OnHandshakeCompleted(); await SendMessageAsync(CreateInitMessage(), cancellation).ConfigureAwait(false); PeerContext.OnInitMessageCompleted(); break; } } // will prevent to handle noise messages to other Processors return(false); }
public async ValueTask <bool> ProcessMessageAsync(InitMessage message, CancellationToken cancellation) { logger.LogDebug("Handshake Init received."); if (PeerContext.InitComplete) { return(true); } // validate init message PeerContext.OnInitMessageCompleted(); await SendMessageAsync(CreateInitMessage(), cancellation).ConfigureAwait(false); return(true);// new ValueTask<bool>(true); }