コード例 #1
0
 public VirtualDatagramEventSocket(VirtualNetwork vnet, IPAddress publicIPAddress)
 {
     if (vnet == null)
         throw new ArgumentNullException ();
     _vnet = vnet;
     _pubIP = publicIPAddress;
 }
コード例 #2
0
        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 ();
            }
        }
コード例 #3
0
ファイル: VirtualNode.cs プロジェクト: kazuki/p2pncs
        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;
        }
コード例 #4
0
ファイル: KBREnvironment.cs プロジェクト: kazuki/p2pncs
 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 ();
     }
 }
コード例 #5
0
        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 ();
            }
        }
コード例 #6
0
ファイル: EvalEnvironment.cs プロジェクト: kazuki/p2pncs
 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");
 }
コード例 #7
0
ファイル: Program.cs プロジェクト: kazuki/p2pncs
        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 ();
        }
コード例 #8
0
 public void Close()
 {
     if (_vnet != null) {
         _vnet.RemoveVirtualNode (_vnet_node);
         _vnet_node = null;
         _vnet = null;
         _pubIP = IPAddress.None;
     }
 }
コード例 #9
0
 public override void Init()
 {
     base.Init ();
     _net = new VirtualNetwork (LatencyTypes.Constant (20), 5, PacketLossType.Lossless (), 2);
 }