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); }
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); }
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); }
public Statistics(AnonymousRouter anonRouter, MMLC mmlc, ITcpListener tcp) { _sock = anonRouter.KeyBasedRouter.MessagingSocket; _tcp = tcp; Setup (_sock); Setup (anonRouter.KeyBasedRouter); Setup (anonRouter); Setup (mmlc); }
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); }
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 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) { }
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 ++; } }; }
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 (); } }
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; } }
protected abstract void CreateMessagingSocket(int idx, SymmetricKey key, out IMessagingSocket socket, out EndPoint endPoint);
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); }
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; }