public static void Bind(this IConfiguration config, NetworkConfig networkConfig)
 {
     networkConfig.Magic            = ParseUInt32(config, "magic", DefaultMagic);
     networkConfig.Port             = ParseUInt16(config, "port");
     networkConfig.ForceIPv6        = ParseBool(config, "forceIPv6");
     networkConfig.AclConfig        = ParseAcl(config, "acl");
     networkConfig.PeerEndPoints    = ParsePeerEndPoints(config);
     networkConfig.StandByValidator = ParseStandByValidators(config);
 }
Example #2
0
        public Server(
            IBlockchain blockchain,
            NetworkConfig config,
            IPeerFactory peerFactory,
            IPeerListener peerListener,
            IMessageHandler <Message> messageHandler,
            ILogger <Server> logger,
            NetworkACLFactory aclFactory)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            this._blockchain   = blockchain ?? throw new ArgumentNullException(nameof(blockchain));
            this._peerFactory  = peerFactory ?? throw new ArgumentNullException(nameof(peerFactory));
            this._peerListener = peerListener ?? throw new ArgumentNullException(nameof(peerListener));
            this._logger       = logger ?? throw new ArgumentNullException(nameof(logger));
            if (aclFactory == null)
            {
                throw new ArgumentNullException(nameof(aclFactory));
            }

            this._messageHandler = messageHandler;
            this._acl            = aclFactory.CreateNew();
            this._acl?.Load(config?.ACL);

            this._peerListener.OnPeerConnected += PeerConnected;

            this._connectedPeers = new ConcurrentBag <IPeer>();
            this._failedPeers    = new List <IPEndPoint>();

            // TODO: Change after port forwarding implementation
            this._port = config.Port;

            ProtocolVersion = 2;

            var r = new Random(Environment.TickCount);

            Nonce = (uint)r.Next();

            this._peerEndPoints = config.PeerEndPoints;

            this._userAgent = $"/NEO:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/";
        }
Example #3
0
        /// <summary>
        /// Server context
        /// </summary>
        /// <param name="config">Config</param>
        /// <param name="blockchain">Blockchain</param>
        public ServerContext(NetworkConfig config, IBlockchain blockchain)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            _blockchain = blockchain ?? throw new ArgumentNullException(nameof(blockchain));

            _version = new VersionPayload
            {
                Version           = PROTOCOL_VERSION,
                Services          = NODE_NETWORK,
                Timestamp         = DateTime.UtcNow.ToTimestamp(),
                Port              = config.Port,
                Nonce             = (uint)new Random(Environment.TickCount).Next(),
                UserAgent         = $"/NEO-Sharp:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/",
                CurrentBlockIndex = _blockchain.CurrentBlock?.Index ?? 0,
                Relay             = true
            };
        }
Example #4
0
        /// <summary>
        /// Server context
        /// </summary>
        /// <param name="config">Config</param>
        /// <param name="blockchainContext">Context information updated by blockchain.</param>
        public ServerContext(NetworkConfig config, IBlockchainContext blockchainContext)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            _blockchainContext = blockchainContext ?? throw new ArgumentNullException(nameof(blockchainContext));

            _version = new VersionPayload
            {
                Version           = ProtocolVersion,
                Services          = NodeNetwork,
                Timestamp         = DateTime.UtcNow.ToTimestamp(),
                Port              = config.Port,
                Nonce             = BitConverter.ToUInt32(Crypto.Default.GenerateRandomBytes(4), 0),
                UserAgent         = $"/NEO-Sharp:{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}/",
                CurrentBlockIndex = _blockchainContext.CurrentBlock?.Index ?? 0,
                Relay             = true
            };

            MaxConnectedPeers = config.MaxConnectedPeers;
            ConnectedPeers    = new ConcurrentDictionary <EndPoint, IPeer>();
        }
 public static void Bind(this IConfiguration config, NetworkConfig networkConfig)
 {
     networkConfig.Port          = ParsePort(config);
     networkConfig.ForceIPv6     = ParseForceIPv6(config);
     networkConfig.PeerEndPoints = ParsePeerEndPoints(config);
 }