/// <summary> /// for both coordinatorServer and userPeer /// accepts connection, adds peer and/or stream to lists, responds with 'accepted' /// </summary> void ProcessReceivedHello_SetupRequestFromNewPeer(PeerHelloPacket helloPacket, IPEndPoint remoteEndpoint, SocketWithReceiver socket, PeerId localPeerIdForResponse, uint requestReceivedTimestamp32) { if (_localPeer.Configuration.RoleAsCoordinator) { if (_connectedPeers.Count > LocalLogicConfiguration.CoordinatorPeer_MaxConnectedPeersToAccept) { _localPeer.SysAdminFeedbackChannel.OnReachedMaxConnectedPeersAtThisCoordinatorServer(); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_tryLater, null, socket, remoteEndpoint); return; } } else if (_localPeer.Configuration.RoleAsSharedPassive) { if (_connectedPeers.Count > LocalLogicConfiguration.SharedPeer_MaxConnectedPeersToAccept) { _localPeer.SysAdminFeedbackChannel.OnReachedMaxConnectedPeersAtThisSharedPeer(); _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: _connectedPeers.Count={_connectedPeers.Count} > LocalLogicConfiguration.SharedPeer_MaxConnectedPeersToAccept"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); return; } } else if (_localPeer.Configuration.RoleAsUser) { if (_connectedPeers.Count > LocalLogicConfiguration.UserPeer_MaxConnectedPeersToAccept) { _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: _connectedPeers.Count={_connectedPeers.Count} > LocalLogicConfiguration.UserPeer_MaxConnectedPeersToAccept"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); return; } if (!RemoteVersionIsAcceptableForNewConnection(helloPacket)) { _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: old version"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); return; } } if (!_connectedPeers.TryGetValue(helloPacket.FromPeerId, out var peer)) { peer = new ConnectedPeer(_localPeer, helloPacket.FromPeerId, ConnectedPeerType.fromPeerAccepted, remoteEndpoint.Address); _localPeer.WriteToLog(LogModules.Hello, $"accepted initial hello from peer {peer}"); lock (_connectedPeers) _connectedPeers.Add(helloPacket.FromPeerId, peer); } if (peer.Streams.Count > LocalLogicConfiguration.ConnectedPeerMaxStreamsCount) { _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: peer.Streams.Count={peer.Streams.Count} > LocalLogicConfiguration.ConnectedPeerMaxStreamsCount"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); } else { var stream = peer.TryAddStream(socket, remoteEndpoint, helloPacket.StreamId); // _localPeer.WriteToLog(LogModules.Hello, $"created new stream {stream} from new peer {peer}"); var responseCpuDelayMs = (ushort)Math.Round(TimeSpan.FromTicks(unchecked (_localPeer.Time32 - requestReceivedTimestamp32)).TotalMilliseconds); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.accepted, localPeerIdForResponse, socket, remoteEndpoint, responseCpuDelayMs, _localPeer.Configuration.RoleAsUser); } }
/// <summary> /// for both coordinatorServer and userPeer /// accepts connection, adds peer and/or stream to lists, responds with 'accepted' /// </summary> void ProcessReceivedHello_SetupRequestFromNewPeer(PeerHelloPacket helloPacket, IPEndPoint remoteEndpoint, SocketWithReceiver socket, PeerId localPeerIdForResponse) { if (_localPeer.Configuration.RoleAsCoordinator) { if (_connectedPeers.Count > LocalLogicConfiguration.CoordinatorPeer_MaxConnectedPeersToAccept) { _localPeer.SysAdminFeedbackChannel.OnReachedMaxConnectedPeersAtThisCoordinatorServer(); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_tryLater, null, socket, remoteEndpoint); return; } } else if (_localPeer.Configuration.RoleAsSharedPassive) { if (_connectedPeers.Count > LocalLogicConfiguration.SharedPeer_MaxConnectedPeersToAccept) { _localPeer.SysAdminFeedbackChannel.OnReachedMaxConnectedPeersAtThisSharedPeer(); _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: _connectedPeers.Count={_connectedPeers.Count} > LocalLogicConfiguration.SharedPeer_MaxConnectedPeersToAccept"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); return; } } else if (_localPeer.Configuration.RoleAsUser) { if (_connectedPeers.Count > LocalLogicConfiguration.UserPeer_MaxConnectedPeersToAccept) { _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: _connectedPeers.Count={_connectedPeers.Count} > LocalLogicConfiguration.UserPeer_MaxConnectedPeersToAccept"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); return; } } if (!_connectedPeers.TryGetValue(helloPacket.FromPeerId, out var peer)) { peer = new ConnectedPeer(_localPeer, helloPacket.FromPeerId) { Type = ConnectedPeerType.fromPeerAccepted }; lock (_connectedPeers) _connectedPeers.Add(helloPacket.FromPeerId, peer); } if (peer.Streams.Count > LocalLogicConfiguration.ConnectedPeerMaxStreamsCount) { _localPeer.WriteToLog(LogModules.Hello, $"rejecting request from {remoteEndpoint}: peer.Streams.Count={peer.Streams.Count} > LocalLogicConfiguration.ConnectedPeerMaxStreamsCount"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.rejected_dontTryLater, null, socket, remoteEndpoint); } else { var stream = peer.TryAddStream(socket, remoteEndpoint, helloPacket.StreamId); _localPeer.WriteToLog(LogModules.Hello, $"created new stream {stream} from new peer {peer}"); PeerHelloPacket.Respond(helloPacket, PeerHelloRequestStatus.accepted, localPeerIdForResponse, socket, remoteEndpoint, _localPeer.Configuration.RoleAsUser); } }