public static AddressManager GetAddrman(NodeBehaviorsCollection behaviors) { if (behaviors == null) throw new ArgumentNullException("behaviors"); var behavior = behaviors.Find<AddressManagerBehavior>(); if(behavior == null) return null; return behavior.AddressManager; }
public static void SetAddrman(NodeBehaviorsCollection behaviors, AddressManager addrman) { if (behaviors == null) throw new ArgumentNullException("behaviors"); var behavior = behaviors.Find<AddressManagerBehavior>(); if(behavior == null) { // FIXME: Please take a look at this behavior = new AddressManagerBehavior(addrman); behaviors.Add(behavior); } behavior.AddressManager = addrman; }
internal Node(NetworkAddress peer, NetworkInfo network, NodeConnectionParameters parameters, Socket socket, VersionPayload peerVersion) { _RemoteSocketAddress = ((IPEndPoint)socket.RemoteEndPoint).Address; _RemoteSocketPort = ((IPEndPoint)socket.RemoteEndPoint).Port; Inbound = true; _Behaviors = new NodeBehaviorsCollection(this); _MyVersion = parameters.CreateVersion(peer.Endpoint, network); Network = network; _Peer = peer; _Connection = new NodeConnection(this, socket); _PeerVersion = peerVersion; LastSeen = peer.Time; ConnectedAt = DateTimeOffset.UtcNow; TraceCorrelation.LogInside(() => { NodeServerTrace.Information("Connected to advertised node " + _Peer.Endpoint); State = NodeState.Connected; }); InitDefaultBehaviors(parameters); _Connection.BeginListen(); }
private WalletBehavior FindWalletBehavior(NodeBehaviorsCollection behaviors) { return(behaviors.OfType <WalletBehavior>().FirstOrDefault(o => o.Wallet == this)); }
public static NodesGroup GetNodeGroup(NodeBehaviorsCollection behaviors) { return(Enumerable.OfType <NodesGroupBehavior>(behaviors).Select(c => c._Parent).FirstOrDefault()); }
public static NodesGroup GetNodeGroup(NodeBehaviorsCollection behaviors) { return behaviors.OfType<NodesGroupBehavior>().Select(c => c._Parent).FirstOrDefault(); }
private WalletBehavior FindWalletBehavior(NodeBehaviorsCollection behaviors) { return behaviors.OfType<WalletBehavior>().FirstOrDefault(o => o.Wallet == this); }
internal Node(NetworkAddress peer, NetworkInfo network, NodeConnectionParameters parameters) { parameters = parameters ?? new NodeConnectionParameters(); var addrman = AddressManagerBehavior.GetAddrman(parameters); Inbound = false; _Behaviors = new NodeBehaviorsCollection(this); _MyVersion = parameters.CreateVersion(peer.Endpoint, network); Network = network; _Peer = peer; LastSeen = peer.Time; var socket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp); socket.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false); _Connection = new NodeConnection(this, socket); socket.ReceiveBufferSize = parameters.ReceiveBufferSize; socket.SendBufferSize = parameters.SendBufferSize; using (TraceCorrelation.Open()) { try { var completed = new ManualResetEvent(false); var args = new SocketAsyncEventArgs(); args.RemoteEndPoint = peer.Endpoint; args.Completed += (s, a) => { Utils.SafeSet(completed); }; if (!socket.ConnectAsync(args)) { completed.Set(); } WaitHandle.WaitAny(new WaitHandle[] { completed, parameters.ConnectCancellation.WaitHandle }); parameters.ConnectCancellation.ThrowIfCancellationRequested(); if (args.SocketError != SocketError.Success) { throw new SocketException((int)args.SocketError); } var remoteEndpoint = (IPEndPoint)(socket.RemoteEndPoint ?? args.RemoteEndPoint); _RemoteSocketAddress = remoteEndpoint.Address; _RemoteSocketPort = remoteEndpoint.Port; State = NodeState.Connected; ConnectedAt = DateTimeOffset.UtcNow; NodeServerTrace.Information("Outbound connection successfull"); if (addrman != null) { addrman.Attempt(Peer); } } catch (OperationCanceledException) { Utils.SafeCloseSocket(socket); NodeServerTrace.Information("Connection to node cancelled"); State = NodeState.Offline; if (addrman != null) { addrman.Attempt(Peer); } throw; } catch (Exception ex) { Utils.SafeCloseSocket(socket); NodeServerTrace.Error("Error connecting to the remote endpoint ", ex); DisconnectReason = new NodeDisconnectReason() { Reason = "Unexpected exception while connecting to socket", Exception = ex }; State = NodeState.Failed; if (addrman != null) { addrman.Attempt(Peer); } throw; } InitDefaultBehaviors(parameters); _Connection.BeginListen(); } }
public static BroadcastHub GetBroadcastHub(NodeBehaviorsCollection behaviors) { return behaviors.OfType<BroadcastHubBehavior>().Select(c => c.BroadcastHub).FirstOrDefault(); }