private void StartNodeServer() { var logs = new StringBuilder(); logs.AppendLine("Node listening on:"); foreach (NodeServerEndpoint listen in this.ConnectionSettings.Bind) { NetworkPeerConnectionParameters cloneParameters = this.Parameters.Clone(); NetworkPeerServer server = this.NetworkPeerFactory.CreateNetworkPeerServer(listen.Endpoint, this.ConnectionSettings.ExternalEndpoint, this.Parameters.Version); this.Servers.Add(server); var cmb = (cloneParameters.TemplateBehaviors.Single(x => x is IConnectionManagerBehavior) as ConnectionManagerBehavior); cmb.Whitelisted = listen.Whitelisted; server.InboundNetworkPeerConnectionParameters = cloneParameters; try { server.Listen(); } catch (SocketException e) { this.logger.LogCritical("Unable to listen on port {0} (you can change the port using '-port=[number]'). Error message: {1}", listen.Endpoint.Port, e.Message); throw e; } logs.Append(listen.Endpoint.Address + ":" + listen.Endpoint.Port); if (listen.Whitelisted) logs.Append(" (whitelisted)"); logs.AppendLine(); } this.logger.LogInformation(logs.ToString()); }
public void Validate_AllowClientConnection_State(bool inIBD, bool isWhiteListed, bool closeClient) { // Arrange var networkPeerFactory = new Mock <INetworkPeerFactory>(); networkPeerFactory.Setup(npf => npf.CreateConnectedNetworkPeerAsync(It.IsAny <IPEndPoint>(), It.IsAny <NetworkPeerConnectionParameters>(), It.IsAny <NetworkPeerDisposer>())).Returns(Task.FromResult(new Mock <INetworkPeer>().Object)); var initialBlockDownloadState = new Mock <IInitialBlockDownloadState>(); initialBlockDownloadState.Setup(i => i.IsInitialBlockDownload()).Returns(inIBD); var nodeSettings = new NodeSettings(KnownNetworks.RegTest); var connectionManagerSettings = new ConnectionManagerSettings(nodeSettings); var endpointAddNode = new IPEndPoint(IPAddress.Parse("::ffff:192.168.0.1"), 80); var asyncProvider = this.CreateAsyncProvider(); var peerAddressManager = new Mock <IPeerAddressManager>(); peerAddressManager.Setup(pam => pam.FindPeersByIp(It.IsAny <IPEndPoint>())).Returns(new List <PeerAddress>()); var networkPeerServer = new NetworkPeerServer(this.Network, endpointAddNode, endpointAddNode, ProtocolVersion.PROTOCOL_VERSION, this.extendedLoggerFactory, networkPeerFactory.Object, initialBlockDownloadState.Object, connectionManagerSettings, asyncProvider, peerAddressManager.Object, DateTimeProvider.Default); // Mimic external client const int portNumber = 80; var client = new TcpClient("www.stratisplatform.com", portNumber); var ipandport = client.Client.RemoteEndPoint.ToString(); var ip = ipandport.Replace(ipandport.Substring(ipandport.IndexOf(':')), ""); var endpointDiscovered = new IPEndPoint(IPAddress.Parse(ip), portNumber); // Include the external client as a NodeServerEndpoint. connectionManagerSettings.Bind.Add(new NodeServerEndpoint(endpointDiscovered, isWhiteListed)); // Act var result = networkPeerServer.InvokeMethod("AllowClientConnection", client); // Assert Assert.True((inIBD && !isWhiteListed) == closeClient); this.testOutput.WriteLine( $"In IBD : {inIBD.ToString()}, " + $"Is White Listed : {isWhiteListed.ToString()}, " + $"Close Client : {result.ToString()}"); }
public void Validate_AllowClientConnection_State(bool inIBD, bool isWhiteListed, bool closeClient) { // Arrange var networkPeerFactory = new Mock <INetworkPeerFactory>(); networkPeerFactory.Setup(npf => npf.CreateConnectedNetworkPeerAsync(It.IsAny <IPEndPoint>(), It.IsAny <NetworkPeerConnectionParameters>(), It.IsAny <NetworkPeerDisposer>())).Returns(Task.FromResult(new Mock <INetworkPeer>().Object)); var initialBlockDownloadState = new Mock <IInitialBlockDownloadState>(); initialBlockDownloadState.Setup(i => i.IsInitialBlockDownload()).Returns(inIBD); var nodeSettings = new NodeSettings(KnownNetworks.RegTest); var connectionManagerSettings = new ConnectionManagerSettings(nodeSettings); var endpointAddNode = new IPEndPoint(IPAddress.Parse("::ffff:192.168.0.1"), 80); var asyncProvider = this.CreateAsyncProvider(); var peerAddressManager = new Mock <IPeerAddressManager>(); peerAddressManager.Setup(pam => pam.FindPeersByIp(It.IsAny <IPEndPoint>())).Returns(new List <PeerAddress>()); var networkPeerServer = new NetworkPeerServer(this.Network, endpointAddNode, endpointAddNode, ProtocolVersion.PROTOCOL_VERSION, this.extendedLoggerFactory, networkPeerFactory.Object, initialBlockDownloadState.Object, connectionManagerSettings, asyncProvider, peerAddressManager.Object, DateTimeProvider.Default); // Mimic external client const int portNumber = 80; var client = new TcpClient("www.stratisplatform.com", portNumber); string ip = string.Empty; var ipandport = client.Client.RemoteEndPoint.ToString(); if (client.Client.RemoteEndPoint.AddressFamily == AddressFamily.InterNetwork) { ip = ipandport.Replace(ipandport[ipandport.IndexOf(':')..], "");