public ConnectionManager(
            IDateTimeProvider dateTimeProvider,
            ILoggerFactory loggerFactory,
            Network network,
            INetworkPeerFactory networkPeerFactory,
            NodeSettings nodeSettings,
            INodeLifetime nodeLifetime,
            NetworkPeerConnectionParameters parameters,
            IPeerAddressManager peerAddressManager,
            IEnumerable <IPeerConnector> peerConnectors,
            IPeerDiscovery peerDiscovery,
            ConnectionManagerSettings connectionSettings)
        {
            this.connectedPeers     = new NetworkPeerCollection();
            this.dateTimeProvider   = dateTimeProvider;
            this.loggerFactory      = loggerFactory;
            this.logger             = loggerFactory.CreateLogger(this.GetType().FullName);
            this.Network            = network;
            this.NetworkPeerFactory = networkPeerFactory;
            this.NodeSettings       = nodeSettings;
            this.nodeLifetime       = nodeLifetime;
            this.peerAddressManager = peerAddressManager;
            this.PeerConnectors     = peerConnectors;
            this.peerDiscovery      = peerDiscovery;
            this.ConnectionSettings = connectionSettings;
            this.Servers            = new List <NetworkPeerServer>();

            this.Parameters = parameters;
            this.Parameters.ConnectCancellation = this.nodeLifetime.ApplicationStopping;
            this.Parameters.UserAgent           = $"{this.NodeSettings.Agent}:{this.GetVersion()}";
            this.Parameters.Version             = this.NodeSettings.ProtocolVersion;
        }
Exemple #2
0
 public PeerService(IUdpServerEventLoopGroupFactory udpServerEventLoopGroupFactory,
                    IUdpServerChannelFactory serverChannelFactory,
                    IPeerDiscovery peerDiscovery,
                    IEnumerable <IP2PMessageObserver> messageHandlers,
                    IPeerSettings peerSettings,
                    ILogger logger,
                    IHealthChecker healthChecker)
     : base(serverChannelFactory, logger, udpServerEventLoopGroupFactory)
 {
     _messageHandlers = messageHandlers;
     _peerSettings    = peerSettings;
     _healthChecker   = healthChecker;
     Discovery        = peerDiscovery;
 }
Exemple #3
0
        public ConnectionManager(IDateTimeProvider dateTimeProvider,
                                 ILoggerFactory loggerFactory,
                                 Network network,
                                 INetworkPeerFactory networkPeerFactory,
                                 NodeSettings nodeSettings,
                                 INodeLifetime nodeLifetime,
                                 NetworkPeerConnectionParameters parameters,
                                 IPeerAddressManager peerAddressManager,
                                 IEnumerable <IPeerConnector> peerConnectors,
                                 IPeerDiscovery peerDiscovery,
                                 ISelfEndpointTracker selfEndpointTracker,
                                 ConnectionManagerSettings connectionSettings,
                                 IVersionProvider versionProvider,
                                 INodeStats nodeStats,
                                 IAsyncProvider asyncProvider)
        {
            this.connectedPeers      = new NetworkPeerCollection();
            this.dateTimeProvider    = dateTimeProvider;
            this.loggerFactory       = loggerFactory;
            this.logger              = loggerFactory.CreateLogger(GetType().FullName);
            this.Network             = network;
            this.NetworkPeerFactory  = networkPeerFactory;
            this.NodeSettings        = nodeSettings;
            this.nodeLifetime        = nodeLifetime;
            this.asyncProvider       = asyncProvider;
            this.peerAddressManager  = peerAddressManager;
            this.PeerConnectors      = peerConnectors;
            this.peerDiscovery       = peerDiscovery;
            this.ConnectionSettings  = connectionSettings;
            this.networkPeerDisposer = new NetworkPeerDisposer(this.loggerFactory, this.asyncProvider);
            this.Servers             = new List <NetworkPeerServer>();

            this.Parameters = parameters;
            this.Parameters.ConnectCancellation = this.nodeLifetime.ApplicationStopping;
            this.selfEndpointTracker            = selfEndpointTracker;
            this.versionProvider = versionProvider;
            this.ipRangeFilteringEndpointExclusions = new List <IPEndPoint>();
            this.connectedPeersQueue =
                asyncProvider.CreateAndRunAsyncDelegateDequeuer <INetworkPeer>(
                    $"{nameof(ConnectionManager)}-{nameof(this.connectedPeersQueue)}", OnPeerAdded);
            this.disconnectedPerfCounter = new PerformanceCounter();

            this.Parameters.UserAgent =
                $"{this.ConnectionSettings.Agent}:{versionProvider.GetVersion()} ({(int) this.NodeSettings.ProtocolVersion})";

            this.Parameters.Version = this.NodeSettings.ProtocolVersion;

            nodeStats.RegisterStats(AddComponentStats, StatsType.Component, GetType().Name, 1100);
        }
        public PeerServiceTests(ITestOutputHelper output) : base(output)
        {
            _pid    = PeerIdHelper.GetPeerId("im_a_key");
            _guid   = CorrelationId.GenerateCorrelationId();
            _logger = Substitute.For <ILogger>();

            _serverChannel = new EmbeddedObservableChannel($"Server:{CurrentTestName}");
            _udpServerServerChannelFactory = Substitute.For <IUdpServerChannelFactory>();

            _peerSettings = Substitute.For <IPeerSettings>();
            _peerSettings.BindAddress.Returns(IPAddress.Parse("127.0.0.1"));
            _peerSettings.Port.Returns(1234);

            _udpServerServerChannelFactory.BuildChannel(Arg.Any <IEventLoopGroupFactory>(), _peerSettings.BindAddress, _peerSettings.Port).Returns(_serverChannel);

            _peerDiscovery      = Substitute.For <IPeerDiscovery>();
            _p2PMessageHandlers = new List <IP2PMessageObserver>();
        }
Exemple #5
0
        public ConnectionManager(IDateTimeProvider dateTimeProvider,
                                 ILoggerFactory loggerFactory,
                                 Network network,
                                 INetworkPeerFactory networkPeerFactory,
                                 NodeSettings nodeSettings,
                                 INodeLifetime nodeLifetime,
                                 NetworkPeerConnectionParameters parameters,
                                 IPeerAddressManager peerAddressManager,
                                 IEnumerable <IPeerConnector> peerConnectors,
                                 IPeerDiscovery peerDiscovery,
                                 ISelfEndpointTracker selfEndpointTracker,
                                 ConnectionManagerSettings connectionSettings,
                                 IVersionProvider versionProvider,
                                 INodeStats nodeStats)
        {
            this.connectedPeers      = new NetworkPeerCollection();
            this.dateTimeProvider    = dateTimeProvider;
            this.loggerFactory       = loggerFactory;
            this.logger              = loggerFactory.CreateLogger("Impleum.Bitcoin.FullNode");
            this.Network             = network;
            this.NetworkPeerFactory  = networkPeerFactory;
            this.NodeSettings        = nodeSettings;
            this.nodeLifetime        = nodeLifetime;
            this.peerAddressManager  = peerAddressManager;
            this.PeerConnectors      = peerConnectors;
            this.peerDiscovery       = peerDiscovery;
            this.ConnectionSettings  = connectionSettings;
            this.networkPeerDisposer = new NetworkPeerDisposer(this.loggerFactory);
            this.Servers             = new List <NetworkPeerServer>();

            this.Parameters = parameters;
            this.Parameters.ConnectCancellation = this.nodeLifetime.ApplicationStopping;
            this.selfEndpointTracker            = selfEndpointTracker;
            this.versionProvider         = versionProvider;
            this.connectedPeersQueue     = new AsyncQueue <INetworkPeer>(this.OnPeerAdded);
            this.disconnectedPerfCounter = new PerformanceCounter();

            this.Parameters.UserAgent = $"{this.ConnectionSettings.Agent}:{versionProvider.GetVersion()} ({(int)this.NodeSettings.ProtocolVersion})";

            this.Parameters.Version = this.NodeSettings.ProtocolVersion;

            nodeStats.RegisterStats(this.AddComponentStats, StatsType.Component, 1100);
        }
        public ConnectionManager(IDateTimeProvider dateTimeProvider,
                                 ILoggerFactory loggerFactory,
                                 Network network,
                                 INetworkPeerFactory networkPeerFactory,
                                 NodeSettings nodeSettings,
                                 INodeLifetime nodeLifetime,
                                 NetworkPeerConnectionParameters parameters,
                                 IPeerAddressManager peerAddressManager,
                                 IEnumerable <IPeerConnector> peerConnectors,
                                 IPeerDiscovery peerDiscovery,
                                 ISelfEndpointTracker selfEndpointTracker,
                                 ConnectionManagerSettings connectionSettings,
                                 IVersionProvider versionProvider)
        {
            this.connectedPeers      = new NetworkPeerCollection();
            this.dateTimeProvider    = dateTimeProvider;
            this.loggerFactory       = loggerFactory;
            this.logger              = loggerFactory.CreateLogger(this.GetType().FullName);
            this.Network             = network;
            this.NetworkPeerFactory  = networkPeerFactory;
            this.NodeSettings        = nodeSettings;
            this.nodeLifetime        = nodeLifetime;
            this.peerAddressManager  = peerAddressManager;
            this.PeerConnectors      = peerConnectors;
            this.peerDiscovery       = peerDiscovery;
            this.ConnectionSettings  = connectionSettings;
            this.networkPeerDisposer = new NetworkPeerDisposer(this.loggerFactory);
            this.Servers             = new List <NetworkPeerServer>();

            this.Parameters = parameters;
            this.Parameters.ConnectCancellation = this.nodeLifetime.ApplicationStopping;
            this.selfEndpointTracker            = selfEndpointTracker;
            this.versionProvider = versionProvider;

            this.Parameters.UserAgent = $"{this.NodeSettings.Agent}:{versionProvider.GetVersion()}";

            this.Parameters.Version = this.NodeSettings.ProtocolVersion;

            this.downloads = new Dictionary <INetworkPeer, PerformanceSnapshot>();
        }
Exemple #7
0
 /// <summary>
 /// Add addresses from a discovery source to the list of potential peers to connect to.
 /// </summary>
 public void AddPeerDiscovery(IPeerDiscovery peerDiscovery)
 {
     _peerDiscoverers.Add(peerDiscovery);
 }
 /// <summary>
 /// Add addresses from a discovery source to the list of potential peers to connect to.
 /// </summary>
 public void AddPeerDiscovery(IPeerDiscovery peerDiscovery)
 {
     _peerDiscoverers.Add(peerDiscovery);
 }
Exemple #9
0
        void IPeerToUser.RegisterOnServer(EndPointInfo serverInfo)
        {
            ((IPeerToUser)this).UnregisterFromServer();

            string protocol = null;

            switch (serverInfo.Protocol)
            {
                case Protocol.HTTP:
                    protocol = "http";
                    break;
                //case Protocol.IPC:
                //    protocol = "ipc";
                //    break;
                case Protocol.TCP:
                    protocol = "tcp";
                    break;
            }

            string url = String.Concat(protocol, "://", serverInfo.Address, ":", serverInfo.Port, "/",
                serverInfo.Name);

            peerServer = (IPeerDiscovery)Activator.GetObject(
              typeof(IPeerDiscovery),
              url);

            peerServer.RegistPeer(this);

            continueThread.Reset();
            updateRenewThread = new Thread(new ThreadStart(UpdateRenew));
            updateRenewThread.Start();

            connectedToServer = true;
        }