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"); } } }
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; }
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 (); } }
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); }
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); }
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); } }
protected override void Transmit_Internal(IDatagramEventSocket sock) { sock.SendTo (_dgram, 0, _dgram.Length, _remoteEP); }
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); }
public StreamSocket(IDatagramEventSocket sock, EndPoint remoteEP, int max_datagram_size, IntervalInterrupter timeoutCheckInt) : this(sock, remoteEP, max_datagram_size, TimeSpan.FromSeconds (3), timeoutCheckInt) { }
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 {} }