private void RemovePeerFromDictionaries(PeerData peer, string reason) { if (peer != null) { if (PeersTx.ContainsKey(peer.SubnetworkIP)) { PeersTx.Remove(peer.SubnetworkIP); } if (PeersRxSupport.ContainsKey(peer.GetSupportEndpoint())) { PeersRxSupport.Remove(peer.GetSupportEndpoint()); } if (PeersRxTransmission.ContainsKey(peer.GetSupportEndpoint())) { PeersRxTransmission.Remove(peer.GetTransmissionEndpoint()); } OnPeerListChanged(this, new PeerListChangedEventArgs(PeersRxSupport.Values.ToArray())); if (reason != null) { Logger.Instance.LogMsg("Usunięto użytkownika (" + reason + "): " + peer.ToString()); } else { Logger.Instance.LogMsg("Usunięto użytkownika: " + peer.ToString()); } } }
private void AddPeerToDictionaries(PeerData peer) { if (peer != null) { PeersTx.Add(peer.SubnetworkIP, peer); PeersRxSupport.Add(peer.GetSupportEndpoint(), peer); PeersRxTransmission.Add(peer.GetTransmissionEndpoint(), peer); OnPeerListChanged(this, new PeerListChangedEventArgs(PeersRxSupport.Values.ToArray())); Logger.Instance.LogMsg("Dodano użytkownika: " + peer.ToString()); } }
private Task InitiateNewUser(PeerData peer, uint subnetworkIP) { return(Task.Run(() => { // pakiet dla nowego użytkownika UdpNewPeerPacket packet = new UdpNewPeerPacket( peer.Name, subnetworkIP, true, PeersRxSupport.Values.ToArray(), CurrentSubnetwork ); byte[] data = GetSerializedBytes <UdpNewPeerPacket>(packet); ReceivedConfirmation = new ManualResetEvent(false); NewPeer = peer; int retryCounter = 0; while (retryCounter++ < ConnectionRetries && !CancelToken.IsCancellationRequested) { UdpSupport.Send(data, data.Length, peer.GetSupportEndpoint()); if (ReceivedConfirmation.WaitOne(2000)) { break; } } NewPeer = null; if (retryCounter > ConnectionRetries) { throw new NewClientNotReachedException("Czas wywołania minął!", null); } if (!CancelToken.IsCancellationRequested) { return; } // pakiet dla pozostałych packet = new UdpNewPeerPacket( null, 0, false, new PeerData[1] { peer }, null ); Broadcast <UdpNewPeerPacket>(packet); })); }
private void NegotiateKey(PeerData peer, UdpKeyNegotiationPacket packet) { if (!peer.KeyExchangeInProgress) { UdpKeyNegotiationPacket negoPacket = new UdpKeyNegotiationPacket( KeyExchange.GetKeyMaterial(), KeyExchange.GetDSASignature() ); SendPacket <UdpKeyNegotiationPacket>(negoPacket, peer.GetSupportEndpoint()); } if (packet != null) { Encryption.DeleteKeyIfInStore(peer.KeyIndex); peer.KeyIndex = Encryption.AddKeyToStore( KeyExchange.GetDerivedKey(packet.KeyMaterial, packet.DSASignature, peer.PublicKey) ); peer.KeyExchangeInProgress = false; } else { peer.KeyExchangeInProgress = true; } }