public VirtualDatagramEventSocket(VirtualNetwork vnet, IPAddress publicIPAddress) { if (vnet == null) throw new ArgumentNullException (); _vnet = vnet; _pubIP = publicIPAddress; }
public void Test_SendToWrongPort() { IPEndPoint ep1 = new IPEndPoint (IPAddress.Parse ("10.0.0.1"), 10000); IPEndPoint ep2 = new IPEndPoint (IPAddress.Parse ("10.0.0.2"), 10000); VirtualNetwork network = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Lossless (), 2); byte[] msg = new byte[]{0, 1, 2, 3}; try { using (AutoResetEvent done = new AutoResetEvent (false)) using (VirtualDatagramEventSocket sock1 = new VirtualDatagramEventSocket (network, ep1.Address)) using (VirtualDatagramEventSocket sock2 = new VirtualDatagramEventSocket (network, ep2.Address)) { sock1.Bind (new IPEndPoint (IPAddress.Any, ep1.Port)); sock2.Bind (new IPEndPoint (IPAddress.Any, ep2.Port)); sock1.Received += new DatagramReceiveEventHandler (delegate (object sender, DatagramReceiveEventArgs e) { done.Set (); }); sock2.Received += new DatagramReceiveEventHandler (delegate (object sender, DatagramReceiveEventArgs e) { done.Set (); }); sock1.SendTo (msg, new IPEndPoint (ep2.Address, ep2.Port + 1)); Assert.IsFalse (done.WaitOne (500)); sock2.SendTo (msg, ep1); Assert.IsTrue (done.WaitOne ()); } } finally { network.Close (); } }
public VirtualNode(EvalEnvironment env, VirtualNetwork network, EvalOptionSet opt, IntervalInterrupter messagingInt, IntervalInterrupter kbrStabilizeInt, IntervalInterrupter anonInt, IntervalInterrupter dhtInt) { IPAddress pubAdrs = _ipGenerator.Next (); int bindPort; lock (_rnd) { bindPort = _rnd.Next (1024, ushort.MaxValue); } _pubEP = new IPEndPoint (pubAdrs, bindPort); _nodePrivateKey = ECKeyPair.Create (DefaultECDomain); _nodeId = Key.Create (_nodePrivateKey); VirtualDatagramEventSocket sock = new VirtualDatagramEventSocket (network, pubAdrs); sock.Bind (new IPEndPoint (IPAddress.Any, bindPort)); _msock = opt.BypassMessagingSerializer ? (IMessagingSocket)new VirtualMessagingSocket (sock, true, messagingInt, DefaultMessagingRTO, DefaultMessagingRetries, DefaultMessagingRetryBufferSize, DefaultMessagingDupCheckSize) : (IMessagingSocket)new MessagingSocket (sock, true, SymmetricKey.NoneKey, Serializer.Instance, null, messagingInt, DefaultMessagingRTO, DefaultMessagingRetries, DefaultMessagingRetryBufferSize, DefaultMessagingDupCheckSize); _kbr = new SimpleIterativeRouter2 (_nodeId, 0, _msock, new SimpleRoutingAlgorithm (), Serializer.Instance, opt.NewKBRStrictMode); _localDHT = new OnMemoryLocalHashTable (_kbr, dhtInt); _dht = new SimpleDHT (_kbr, _msock, _localDHT); _dht.RegisterTypeID (typeof (string), 0, new LocalHashTableValueMerger<string> ()); p2pncs.Net.Overlay.Anonymous.AnonymousRouter.DefaultRelayNodes = opt.AnonymousRouteRelays; p2pncs.Net.Overlay.Anonymous.AnonymousRouter.DefaultSubscribeRoutes = opt.AnonymousRouteRoutes + opt.AnonymousRouteBackupRoutes; p2pncs.Net.Overlay.Anonymous.AnonymousRouter.AC_DefaultUseSubscribeRoutes = opt.AnonymousRouteRoutes; _anonRouter = new AnonymousRouter (_dht, _nodePrivateKey, anonInt); _kbrStabilizeInt = kbrStabilizeInt; _kbrStabilizeInt.AddInterruption (_kbr.RoutingAlgorithm.Stabilize); _env = env; }
public KBREnvironment(bool enableDHT, bool enableAnon) { _network = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Lossless (), 2); _interrupter = new IntervalInterrupter (TimeSpan.FromMilliseconds (50), "MessagingSocket Interrupter"); _interrupter.Start (); if (enableDHT || enableAnon) { _dhts = new List<IDistributedHashTable> (); _dhtInt = new IntervalInterrupter (TimeSpan.FromSeconds (5), "DHT Maintenance Interrupter"); _dhtInt.Start (); } if (enableAnon) { _anons = new List<IAnonymousRouter> (); _anonInt = new IntervalInterrupter (TimeSpan.FromMilliseconds (500), "Anonymous Interrupter"); _anonInt.Start (); } }
public void Test1() { IPEndPoint ep1 = new IPEndPoint (IPAddress.Parse ("10.0.0.1"), 10000); IPEndPoint ep2 = new IPEndPoint (IPAddress.Parse ("10.0.0.2"), 10000); IPEndPoint ep3 = new IPEndPoint (IPAddress.Parse ("10.0.0.3"), 10000); VirtualNetwork network = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Lossless (), 2); try { using (VirtualDatagramEventSocket sock1 = new VirtualDatagramEventSocket (network, ep1.Address)) using (VirtualDatagramEventSocket sock2 = new VirtualDatagramEventSocket (network, ep2.Address)) using (VirtualDatagramEventSocket sock3 = new VirtualDatagramEventSocket (network, ep3.Address)) { IDatagramEventSocket[] sockets = new IDatagramEventSocket[] { sock1, sock2, sock3 }; EndPoint[] endPoints = new EndPoint[] { ep1, ep2, ep3 }; base.Test1 (sockets, endPoints); } } finally { network.Close (); } }
public EvalEnvironment(EvalOptionSet opt) { _opt = opt; _network = new VirtualNetwork (opt.GetLatency (), 5, opt.GetPacketLossRate (), Environment.ProcessorCount); _nodes = new List<VirtualNode> (); _msgInt1 = new IntervalInterrupter (TimeSpan.FromMilliseconds (50), "MessagingSocket Interrupter"); _msgInt2 = new IntervalInterrupter (TimeSpan.FromMilliseconds (50), "AnonymousMessagingSocket Interrupter"); _anonInt = new IntervalInterrupter (TimeSpan.FromMilliseconds (50), "Anonymous Interrupter"); _kbrInt = new IntervalInterrupter (TimeSpan.FromSeconds (10), "KBR Stabilize Interrupter"); _dhtInt = new IntervalInterrupter (TimeSpan.FromSeconds (10), "DHT Maintenance Interrupter"); _kbrInt.LoadEqualizing = true; _dhtInt.LoadEqualizing = true; _msgInt1.Start (); _msgInt2.Start (); _anonInt.Start (); _kbrInt.Start (); _dhtInt.Start (); if (opt.ChurnInterval > 0) _churnInt = new IntervalInterrupter (TimeSpan.FromMilliseconds (opt.ChurnInterval), "Churn Interrupter"); }
public void Run() { int gw_port = 8080; _network = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Constant (0.05), Environment.ProcessorCount); int step = Math.Max (1, NODES / 10); for (int i = 0; i < NODES; i++) { AddNode ((i % step) == 0 ? gw_port++ : -1); Thread.Sleep (100); } Console.WriteLine ("{0} Nodes Inserted", NODES); _churnInt.AddInterruption (delegate () { lock (_list) { if (_list.Count <= 10) return; int idx; DebugNode removed; while (true) { idx = _rnd.Next (0, _list.Count); removed = _list[idx]; if (!removed.IsGateway) break; } try { removed.Dispose (); } catch {} _list.RemoveAt (idx); _eps.RemoveAt (idx); AddNode (-1); } }); _churnInt.Start (); _list[0].WaitOne (); }
public void Close() { if (_vnet != null) { _vnet.RemoveVirtualNode (_vnet_node); _vnet_node = null; _vnet = null; _pubIP = IPAddress.None; } }
public override void Init() { base.Init (); _net = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Lossless (), 2); }