示例#1
0
        protected void Test1(IDatagramEventSocket[] sockets, EndPoint[] endPoints)
        {
            byte[] sendData = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
            int recvIdx = -1, recvSize = -1;
            byte[] recvData = null;
            AutoResetEvent done = new AutoResetEvent (false);

            for (int i = 0; i < sockets.Length; i++) {
                sockets[i].Bind (endPoints[i]);
                sockets[i].Received += new DatagramReceiveEventHandler (delegate (object sender, DatagramReceiveEventArgs e) {
                    recvIdx = Array.IndexOf<IDatagramEventSocket> (sockets, sender as IDatagramEventSocket);
                    recvSize = e.Size;
                    recvData = (byte[])e.Buffer.Clone ();
                    done.Set ();
                });
            }

            for (int i = 0; i < sockets.Length; i++) {
                for (int k = 0; k < endPoints.Length; k++) {
                    sockets[i].SendTo (sendData, endPoints[k]);
                    done.WaitOne ();
                    Array.Resize<byte> (ref recvData, recvSize);
                    string id = "#" + (i + 1).ToString () + "." + (k + 1).ToString ();
                    Assert.AreEqual (k, recvIdx, id + ".1");
                    Assert.AreEqual (sendData.Length, recvSize, id + ".2");
                    Assert.AreEqual (sendData, recvData, id + ".3");
                }
            }
        }
示例#2
0
        public StreamSocket(IDatagramEventSocket sock, EndPoint remoteEP, int max_datagram_size, TimeSpan init_RTT, IntervalInterrupter timeoutCheckInt)
        {
            _sock = sock;
            _mss = max_datagram_size - HeaderSize;
            _remoteEP = remoteEP;
            for (int i = 0; i < _sendBuffer.Length; i ++)
                _sendBuffer[i] = new Packet (max_datagram_size);
            _sock.Received += new DatagramReceiveEventHandler (Socket_Received);
            _timeoutCheckInt = timeoutCheckInt;
            _timeoutCheckInt.AddInterruption (CheckTimeout);

            _srtt = (int)init_RTT.TotalMilliseconds;
            _rttvar = _srtt / 2;
            _rto = _srtt + 4 * _rttvar;
        }
示例#3
0
        public MessagingSocket(IDatagramEventSocket sock, bool ownSocket, SymmetricKey key,
			IFormatter formatter, object nullObject, IntervalInterrupter interrupter,
			IRTOAlgorithm rtoAlgo, int maxRetry, int retryBufferSize, int inquiryDupCheckSize)
            : base(sock, ownSocket, interrupter, rtoAlgo, maxRetry, retryBufferSize, inquiryDupCheckSize)
        {
            _key = (key != null ? key : SymmetricKey.NoneKey);
            _formatter = formatter;
            _nullObject = nullObject != null ? nullObject : NullObject.Instance;
            sock.Received += Socket_Received;
            _maxMsgSize = sock.MaxDatagramSize;
            if (_key.AlgorithmType != SymmetricAlgorithmType.None && key.IV != null) {
                _maxMsgSize -= _maxMsgSize % key.IV.Length;
                if (key.Padding != System.Security.Cryptography.PaddingMode.None)
                    _maxMsgSize --;
                if (key.EnableIVShuffle)
                    _maxMsgSize -= key.IV.Length;
            }
            _maxMsgSize -= MAX_HEADER_SIZE;
        }
        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 ();
            }
        }
示例#5
0
文件: Node.cs 项目: kazuki/p2pncs
 public Node(Interrupters ints, IDatagramEventSocket bindedDgramSock, ITcpListener tcpListener, string db_path, ushort bindUdpPort, ushort bindTcpPort)
 {
     _udpPort = bindUdpPort;
     _tcpPort = bindTcpPort;
     _ints = ints;
     _dgramSock = bindedDgramSock;
     _tcpListener = tcpListener;
     _rtoAlgo = new RFC2988BasedRTOCalculator (TimeSpan.FromSeconds (1), TimeSpan.FromMilliseconds (100), 50, false);
     _messagingSock = new MessagingSocket (_dgramSock, true, SymmetricKey.NoneKey, p2pncs.Serializer.Instance,
         null, ints.MessagingInt, _rtoAlgo, DefaultMessagingRetry, DefaultMessagingRetryBufferSize, DefaultMessagingDuplicationCheckBufferSize);
     _kbrPrivateKey = ECKeyPair.Create (DefaultAlgorithm.ECDomainName);
     _kbr = new SimpleIterativeRouter2 (Key.Create (_kbrPrivateKey), bindTcpPort, _messagingSock, new SimpleRoutingAlgorithm (), p2pncs.Serializer.Instance, true);
     _portChecker = new PortOpenChecker (_kbr);
     _localHT = new OnMemoryLocalHashTable (_kbr, ints.DHTInt);
     IMassKeyDelivererLocalStore mkdLocalStore = _localHT as IMassKeyDelivererLocalStore;
     _dht = new SimpleDHT (_kbr, _messagingSock, _localHT);
     _anonymous = new AnonymousRouter (_dht, _kbrPrivateKey, ints.AnonymousInt);
     ints.KBRStabilizeInt.AddInterruption (Stabilize);
     _mkd = new MassKeyDeliverer (_dht, mkdLocalStore, ints.MassKeyDeliverTimerInt);
     _mmlc = new MMLC (_anonymous, _dht, mkdLocalStore, db_path, ints.StreamSocketTimeoutInt, ints.DFSRePutTimerInt);
     _crawler = new FileInfoCrawler (_tcpListener, _mmlc, _ints.CrawlingTimer);
     _statistics = new Statistics ((AnonymousRouter)_anonymous, _mmlc, _tcpListener);
 }
示例#6
0
文件: Program.cs 项目: kazuki/p2pncs
 public static DebugNode Create(int idx, Interrupters ints, IDatagramEventSocket bindedDgramSock, IPEndPoint bindTcpEp, IPEndPoint bindUdpEp, int gw_port)
 {
     string db_path = string.Format ("db{0}{1}.sqlite", Path.DirectorySeparatorChar, idx);
     ITcpListener listener = new p2pncs.Net.TcpListener ();
     listener.Bind (bindTcpEp);
     listener.ListenStart ();
     return new DebugNode (idx, ints, listener, bindedDgramSock, bindTcpEp, bindUdpEp, gw_port, db_path);
 }
示例#7
0
文件: Program.cs 项目: kazuki/p2pncs
 DebugNode(int idx, Interrupters ints, ITcpListener listener, IDatagramEventSocket bindedDgramSock, IPEndPoint bindTcpEp, IPEndPoint bindUdpEp, int gw_port, string dbpath)
     : base(ints, bindedDgramSock, listener, dbpath, (ushort)bindUdpEp.Port, (ushort)bindTcpEp.Port)
 {
     _idx = idx;
     _bindTcpEP = bindTcpEp;
     _imPrivateKey = ECKeyPair.Create (DefaultAlgorithm.ECDomainName);
     _imPublicKey = Key.Create (_imPrivateKey);
     _name = "Node-" + idx.ToString ("x");
     _app = new WebApp (this, ints);
     _is_gw = gw_port > 0;
     if (_is_gw) {
         _sessionMiddleware = new SessionMiddleware (MMLC.CreateDBConnection, _app);
         _server = HttpServer.CreateEmbedHttpServer (_sessionMiddleware, null, true, true, false, gw_port, 16);
     }
 }
示例#8
0
 protected override void Transmit_Internal(IDatagramEventSocket sock)
 {
     sock.SendTo (_dgram, 0, _dgram.Length, _remoteEP);
 }
示例#9
0
 public IMessagingSocket CreateMessagingSocket(IDatagramEventSocket sock, IRTOAlgorithm rtoAlgo, int retries, int retryBufferSize, int dupCheckSize)
 {
     VirtualDatagramEventSocket vsock = sock as VirtualDatagramEventSocket;
     if (_opt.BypassMessagingSerializer && vsock != null)
         return new VirtualMessagingSocket (vsock, true, _msgInt2, rtoAlgo, retries, retryBufferSize, dupCheckSize);
     else
         return new MessagingSocket (sock, true, SymmetricKey.NoneKey, Serializer.Instance, null, _msgInt2, rtoAlgo, retries, retryBufferSize, dupCheckSize);
 }
示例#10
0
 public StreamSocket(IDatagramEventSocket sock, EndPoint remoteEP, int max_datagram_size, IntervalInterrupter timeoutCheckInt)
     : this(sock, remoteEP, max_datagram_size, TimeSpan.FromSeconds (3), timeoutCheckInt)
 {
 }
示例#11
0
 protected override void Transmit_Internal(IDatagramEventSocket sock)
 {
     VirtualDatagramEventSocket vsock = (VirtualDatagramEventSocket)sock;
     try {
         if (vsock.VirtualNetwork != null)
             vsock.VirtualNetwork.AddSendQueue (vsock.BindedPublicEndPoint, _remoteEP, new RequestWrapper (_req, _id));
     } catch {}
 }