async void ConnectionReceived(object?sender, PeerConnectionEventArgs e) { await ClientEngine.MainLoop; var peer = new Peer("", e.Connection.Uri, EncryptionTypes.All); try { if (Engine.ConnectionManager.ShouldBanPeer(peer)) { e.Connection.Dispose(); return; } if (!e.Connection.IsIncoming) { var manager = Engine.Torrents.FirstOrDefault(t => t.InfoHashes.Contains(e.InfoHash !)) !; var id = new PeerId(peer, e.Connection, new BitField(manager.Bitfield.Length).SetAll(false)); id.LastMessageSent.Restart(); id.LastMessageReceived.Restart(); Engine.ConnectionManager.ProcessNewOutgoingConnection(manager, id); return; } logger.Info(e.Connection, "ConnectionReceived"); var supportedEncryptions = EncryptionTypes.GetSupportedEncryption(peer.AllowedEncryption, Engine.Settings.AllowedEncryption); EncryptorFactory.EncryptorResult result = await EncryptorFactory.CheckIncomingConnectionAsync(e.Connection, supportedEncryptions, SKeys, Engine.Factories); if (!await HandleHandshake(peer, e.Connection, result.Handshake !, result.Decryptor, result.Encryptor)) { e.Connection.Dispose(); } } catch { e.Connection.Dispose(); } }
async void ConnectionReceived(object sender, NewConnectionEventArgs e) { await ClientEngine.MainLoop; try { if (Engine.ConnectionManager.ShouldBanPeer(e.Peer)) { e.Connection.Dispose(); return; } if (!e.Connection.IsIncoming) { var id = new PeerId(e.Peer, e.Connection, e.TorrentManager.Bitfield?.Clone().SetAll(false)); id.LastMessageSent.Restart(); id.LastMessageReceived.Restart(); Engine.ConnectionManager.ProcessNewOutgoingConnection(e.TorrentManager, id); return; } logger.Info(e.Connection, "ConnectionReceived"); var supportedEncryptions = EncryptionTypes.GetSupportedEncryption(e.Peer.AllowedEncryption, Engine.Settings.AllowedEncryption); EncryptorFactory.EncryptorResult result = await EncryptorFactory.CheckIncomingConnectionAsync(e.Connection, supportedEncryptions, SKeys); if (!await HandleHandshake(e.Peer, e.Connection, result.Handshake, result.Decryptor, result.Encryptor)) { e.Connection.Dispose(); } } catch { e.Connection.Dispose(); } }
public void GetSupported() { var result = EncryptionTypes.GetSupportedEncryption( new[] { EncryptionType.RC4Full, EncryptionType.PlainText }, new[] { EncryptionType.PlainText }); Assert.AreEqual(EncryptionType.PlainText, result.Single()); result = EncryptionTypes.GetSupportedEncryption( new[] { EncryptionType.PlainText }, new[] { EncryptionType.RC4Full, EncryptionType.PlainText }); Assert.AreEqual(EncryptionType.PlainText, result.Single()); result = EncryptionTypes.GetSupportedEncryption( new[] { EncryptionType.PlainText, EncryptionType.RC4Full, EncryptionType.RC4Header }, new[] { EncryptionType.RC4Full, EncryptionType.PlainText }); Assert.AreEqual(EncryptionType.RC4Full, result.First()); Assert.AreEqual(EncryptionType.PlainText, result.Last()); }