public void SetBitField(PeerMessage message) { for (int i = message.rawBytesOffset; i < message.GetMsgContents().Length; i++) { byte mask = 0b10000000; byte curByte = message.GetMsgContents()[i]; for (int bit = 7; bit >= 0; bit--) { if ((i - message.rawBytesOffset) * 8 + (7 - bit) >= peersPieces.Count) { break; } peersPieces.Set((i - message.rawBytesOffset) * 8 + (7 - bit), (curByte & mask) != 0); mask >>= 1; } } }
public async Task <int> PeerHandshakeAsync(byte[] infoHash, string peerID, CancellationTokenSource cancellationToken) { await connectionClient.ConnectAsync(endPoint.Address, endPoint.Port).ConfigureAwait(false); if (cancellationToken.IsCancellationRequested) { return(-1); } var handshakeMessage = new PeerMessage(infoHash, peerID); await connectionClient.GetStream().WriteAsync(handshakeMessage.GetMsgContents(), 0, handshakeMessage.GetMsgContents().Length, cancellationToken.Token).ConfigureAwait(false); var message = await RecieveHandshakeMessageAsync(cancellationToken).ConfigureAwait(false); if (message == null || message.messageType != PeerMessageType.handshake) { return(-1); } // setting the timer for two minutes activityTimer = new Timer(TimerCallback, null, TIMEOUT * 1000, TIMEOUT * 1000); return(0); }
public void SendPeerMessage(PeerMessage message) { ResetTimer(); connectionClient.GetStream().Write(message.GetMsgContents(), 0, message.GetMsgContents().Length); }