public SimpleIterativeRouter2(Key self, ushort tcpPort, IMessagingSocket sock, IKeyBasedRoutingAlgorithm algo, IFormatter formatter, bool isStrictMode)
        {
            _selfId = self;
            _tcpPort = tcpPort;
            _sock = sock;
            _algo = algo;
            _strict_mode = isStrictMode;

            // メッセージに含むことの出来る大体の最大NodeHandle数を計算
            int overhead, nodeHandleBytes;
            {
                using (MemoryStream ms = new MemoryStream ()) {
                    formatter.Serialize (ms, new NextHopResponse (self, _tcpPort, true, new NodeHandle[0]));
                    overhead = (int)ms.Length;
                }
                using (MemoryStream ms = new MemoryStream ()) {
                    formatter.Serialize (ms, new NodeHandle (self, new IPEndPoint (IPAddress.Loopback, 0), tcpPort));
                    nodeHandleBytes = (int)ms.Length;
                }
            }
            _maxNodeHandlesPerResponse = (dgramMaxSize - overhead) / nodeHandleBytes;

            algo.Setup (self, this);
            sock.AddInquiredHandler (typeof (NextHopQuery), MessagingSocket_Inquired_NextHopQuery);
            sock.AddInquiredHandler (typeof (CloseNodeQuery), MessagingSocket_Inquired_CloseNodeQuery);
        }
 protected override void CreateMessagingSocket(int idx, SymmetricKey key, out IMessagingSocket socket, out EndPoint endPoint)
 {
     endPoint = new IPEndPoint (_adrsGen.Next (), 10000);
     VirtualDatagramEventSocket sock = new VirtualDatagramEventSocket (_net, ((IPEndPoint)endPoint).Address);
     sock.Bind (endPoint);
     socket = new VirtualMessagingSocket (sock, true, _interrupter, DefaultRTO, DefaultRetryCount, 1024, 1024);
 }
Exemple #3
0
 public SimpleDHT(IKeyBasedRouter kbr, IMessagingSocket sock, ILocalHashTable lht)
 {
     _kbr = kbr;
     _sock = sock;
     _lht = lht;
     sock.AddInquiredHandler (typeof (GetRequest), MessagingSocket_Inquired_GetRequest);
     sock.AddInquiredHandler (typeof (PutRequest), MessagingSocket_Inquired_PutRequest);
 }
Exemple #4
0
 public PortOpenChecker(IKeyBasedRouter kbr)
 {
     _msock = kbr.MessagingSocket;
     _kbr = kbr;
     _msock.AddInquiredHandler (typeof (PortCheckStartMessage), Inquired_PortCheckStartMessage);
     _msock.AddInquiredHandler (typeof (PortCheckRequest), Inquired_PortCheckRequest);
     _msock.AddInquiredHandler (typeof (PortCheckResponse), Inquired_PortCheckResponse);
 }
Exemple #5
0
 public Statistics(AnonymousRouter anonRouter, MMLC mmlc, ITcpListener tcp)
 {
     _sock = anonRouter.KeyBasedRouter.MessagingSocket;
     _tcp = tcp;
     Setup (_sock);
     Setup (anonRouter.KeyBasedRouter);
     Setup (anonRouter);
     Setup (mmlc);
 }
Exemple #6
0
 public MassKeyDeliverer(IDistributedHashTable dht, IMassKeyDelivererLocalStore store, IntervalInterrupter timer)
 {
     _router = dht.KeyBasedRouter;
     _dht = dht;
     _sock = _router.MessagingSocket;
     _store = store;
     _int = timer;
     timer.AddInterruption (Deliver);
     _values = new List<DHTEntry> [_router.RoutingAlgorithm.MaxRoutingLevel];
     for (int i = 0; i < _values.Length; i ++)
         _values[i] = new List<DHTEntry> ();
     _sock.AddInquiredHandler (typeof (Message), Messaging_Inquired);
 }
Exemple #7
0
 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);
 }
Exemple #8
0
 public AnonymousSocketInfo(IAnonymousSocket sock, IMessagingSocket msock)
 {
     BaseSocket = sock;
     MessagingSocket = msock;
 }
 public SimpleIterativeRouter2(Key self, ushort tcpPort, IMessagingSocket sock, IKeyBasedRoutingAlgorithm algo, IFormatter formatter)
     : this(self, tcpPort, sock, algo, formatter, false)
 {
 }
Exemple #10
0
        void Setup(IMessagingSocket sock)
        {
            sock.InquirySuccess += delegate (object sender, InquiredEventArgs e) {
                IPEndPoint ipep = e.EndPoint as IPEndPoint;
                if (ipep == null)
                    return;

                lock (_messagingStatistics) {
                    EndPointInfo info;
                    if (!_messagingStatistics.TryGetValue (ipep, out info)) {
                        info = new EndPointInfo (ipep);
                        _messagingStatistics.Add (ipep, info);
                    }
                    info.SD.AddSample ((float)e.RTT.TotalMilliseconds);
                    info.Success ++;
                    info.Retries += e.Retries;
                }
            };
            sock.InquiryFailure += delegate (object sender, InquiredEventArgs e) {
                IPEndPoint ipep = e.EndPoint as IPEndPoint;
                if (ipep == null)
                    return;
                lock (_messagingStatistics) {
                    EndPointInfo info;
                    if (!_messagingStatistics.TryGetValue (ipep, out info)) {
                        info = new EndPointInfo (ipep);
                        _messagingStatistics.Add (ipep, info);
                    }
                    info.Fail ++;
                }
            };
        }
Exemple #11
0
 protected void DisposeAll(IMessagingSocket[] sockets)
 {
     if (sockets == null)
         return;
     for (int i = 0; i < sockets.Length; i++) {
         if (sockets[i] == null)
             continue;
         sockets[i].Dispose ();
     }
 }
Exemple #12
0
 protected void CreateMessagingSockets(int count, SymmetricKey key, out IMessagingSocket[] sockets, out EndPoint[] endPoints, out EndPoint noRouteEP)
 {
     sockets = new IMessagingSocket[count];
     endPoints = new EndPoint[count];
     noRouteEP = GetNoRouteEndPoint ();
     for (int i = 0; i < sockets.Length; i++) {
         IMessagingSocket sock;
         EndPoint ep;
         CreateMessagingSocket (i, key, out sock, out ep);
         sockets[i] = sock;
         endPoints[i] = ep;
         sockets[i].InquiredUnknownMessage += DefaultInquiredEventHandler;
     }
 }
Exemple #13
0
 protected abstract void CreateMessagingSocket(int idx, SymmetricKey key, out IMessagingSocket socket, out EndPoint endPoint);
Exemple #14
0
 protected override void CreateMessagingSocket(int idx, SymmetricKey key, out IMessagingSocket socket, out EndPoint endPoint)
 {
     UdpSocket udpSocket = UdpSocket.CreateIPv4 ();
     endPoint = new IPEndPoint (IPAddress.Loopback, 10000 + idx);
     udpSocket.Bind (endPoint);
     socket = new MessagingSocket (udpSocket, true, key, _formatter, null, _interrupter, DefaultRTO, DefaultRetryCount, 1024, 1024);
 }
Exemple #15
0
        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;
        }