public static CreateForLocalHost ( |
||
tat | ||
port | int | |
return | IEnumerable |
/** * @param port the port to listen on * @param ipList an IEnumerable object of IPAddress objects. * @param ta_auth the TAAuthorizer to use for remote nodes */ public TcpEdgeListener(int port, IEnumerable local_config_ips, TAAuthorizer ta_auth) { _is_started = 0; _listen_sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _listen_sock.LingerState = new LingerOption(true, 0); IPEndPoint tmp_ep = new IPEndPoint(IPAddress.Any, port); _listen_sock.Bind(tmp_ep); _local_endpoint = (IPEndPoint)_listen_sock.LocalEndPoint; port = _local_endpoint.Port; _count = 0; /** * We get all the IPAddresses for this computer */ if (local_config_ips == null) { _tas = TransportAddressFactory.CreateForLocalHost(TransportAddress.TAType.Tcp, port); } else { _tas = TransportAddressFactory.Create(TransportAddress.TAType.Tcp, port, local_config_ips); } _ta_auth = ta_auth; if (_ta_auth == null) { //Always authorize in this case: _ta_auth = new ConstantAuthorizer(TAAuthorizer.Decision.Allow); } _loop = new Thread(this.SelectLoop); //This is how we push jobs into the SelectThread ActionQueue = new LockFreeQueue <SocketStateAction>(); }
/** * @param port the local port to bind to * @param local_tas an IEnumerable object which gives the list of local * IPs. This is consulted every time LocalTAs is accessed, so it can * change as new interfaces are added * @param ta_auth the TAAuthorizer for packets incoming */ public UdpEdgeListener(int port, IEnumerable local_config_ips, TAAuthorizer ta_auth) { _s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); _s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendBuffer, Int32.MaxValue); _s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveBuffer, Int32.MaxValue); ipep = new IPEndPoint(IPAddress.Any, port); _s.Bind(ipep); _port = port = ((IPEndPoint)(_s.LocalEndPoint)).Port; /** * We get all the IPAddresses for this computer */ if (local_config_ips == null) { _tas = TransportAddressFactory.CreateForLocalHost(TransportAddress.TAType.Udp, _port); } else { _tas = TransportAddressFactory.Create(TransportAddress.TAType.Udp, _port, local_config_ips); } _nat_hist = null; _nat_tas = new NatTAs(_tas, _nat_hist); _ta_auth = ta_auth; if (_ta_auth == null) { //Always authorize in this case: _ta_auth = new ConstantAuthorizer(TAAuthorizer.Decision.Allow); } //We start out expecting around 30 edges with //a load factor of 0.15 (to make edge lookup fast) _id_ht = new Hashtable(30, 0.15f); _remote_id_ht = new Hashtable(); _sync = new object(); _running = 0; _isstarted = 0; ///@todo, we need a system for using the cryographic RNG _rand = new Random(); _send_handler = this; _listen_finished_event = new ManualResetEvent(false); _listen_thread = new Thread(ListenThread); _send_thread = new Thread(SendThread); _send_thread.IsBackground = true; _send_queue = new LFBlockingQueue <UdpMessage>(); }
public void Test() { TransportAddress tas = TransportAddressFactory.CreateInstance("b.s://234580"); Assert.AreEqual(tas.ToString(), "b.s://234580", "Simulation string"); Assert.AreEqual((tas as SimulationTransportAddress).ID, 234580, "Simulation id"); Assert.AreEqual(TransportAddress.TAType.S, tas.TransportAddressType, "Simulation ta type"); TransportAddress ta1 = TransportAddressFactory.CreateInstance("brunet.udp://10.5.144.69:5000"); Assert.AreEqual(ta1.ToString(), "brunet.udp://10.5.144.69:5000", "Testing TA parsing"); TransportAddress ta2 = TransportAddressFactory.CreateInstance("brunet.udp://10.5.144.69:5000"); Assert.AreEqual(ta1, ta2, "Testing TA Equals"); string StrLocalHost = Dns.GetHostName(); IPHostEntry IPEntry = Dns.GetHostEntry(StrLocalHost); TransportAddress local_ta = TransportAddressFactory.CreateInstance("brunet.udp://" + IPEntry.AddressList[0].ToString() + ":" + 5000); IEnumerable locals = TransportAddressFactory.CreateForLocalHost(TransportAddress.TAType.Udp, 5000); bool match = false; foreach (TransportAddress test_ta1 in locals) { //Console.WriteLine("test_ta: {0}", test_ta1); if (test_ta1.Equals(local_ta)) { match = true; } } Assert.AreEqual(match, true, "testing local TA matches"); //testing function TA TransportAddress func_ta = TransportAddressFactory.CreateInstance("brunet.function://localhost:3000"); TransportAddress func_ta2 = TransportAddressFactory.CreateInstance("brunet.function://localhost:3000"); Assert.AreEqual(func_ta, func_ta2, "equality of instances"); Assert.IsTrue(func_ta == func_ta2, "reference equality, test of caching"); Assert.AreEqual(func_ta.ToString(), "brunet.function://localhost:3000", "Testing function TA parsing"); }
public void Test() { TransportAddress tas = TransportAddressFactory.CreateInstance("b.s://234580"); Assert.AreEqual(tas.ToString(), "b.s://234580", "Simulation string"); Assert.AreEqual((tas as SimulationTransportAddress).ID, 234580, "Simulation id"); Assert.AreEqual(TransportAddress.TAType.S, tas.TransportAddressType, "Simulation ta type"); TransportAddress ta1 = TransportAddressFactory.CreateInstance("brunet.udp://10.5.144.69:5000"); Assert.AreEqual(ta1.ToString(), "brunet.udp://10.5.144.69:5000", "Testing TA parsing"); TransportAddress ta2 = TransportAddressFactory.CreateInstance("brunet.udp://10.5.144.69:5000"); Assert.AreEqual(ta1, ta2, "Testing TA Equals"); string ta_string = "brunet.tunnel://UBU72YLHU5C3SY7JMYMJRTKK4D5BGW22/FE4QWASN+FE4QWASM"; TransportAddress ta = TransportAddressFactory.CreateInstance("brunet.tunnel://UBU72YLHU5C3SY7JMYMJRTKK4D5BGW22/FE4QWASN+FE4QWASM"); Assert.AreEqual(ta.ToString(), ta_string, "testing tunnel TA parsing"); //Console.WriteLine(ta); TunnelTransportAddress tun_ta = (TunnelTransportAddress)TransportAddressFactory.CreateInstance("brunet.tunnel://OIHZCNNUAXTLLARQIOBNCUWXYNAS62LO/CADSL6GV+CADSL6GU"); ArrayList fwd = new ArrayList(); fwd.Add(new AHAddress(Base32.Decode("CADSL6GVVBM6V442CETP4JTEAWACLC5A"))); fwd.Add(new AHAddress(Base32.Decode("CADSL6GUVBM6V442CETP4JTEAWACLC5A"))); TunnelTransportAddress test_ta = new TunnelTransportAddress(tun_ta.Target, fwd); Assert.AreEqual(tun_ta, test_ta, "testing tunnel TA compression enhancements"); //Console.WriteLine(tun_ta.ToString()); //Console.WriteLine(test_ta.ToString()); Assert.AreEqual(tun_ta.ToString(), test_ta.ToString(), "testing tunnel TA compression enhancements (toString)"); Assert.AreEqual(tun_ta.ContainsForwarder(new AHAddress(Base32.Decode("CADSL6GVVBM6V442CETP4JTEAWACLC5A"))), true, "testing tunnel TA contains forwarder (1)"); Assert.AreEqual(tun_ta.ContainsForwarder(new AHAddress(Base32.Decode("CADSL6GUVBM6V442CETP4JTEAWACLC5A"))), true, "testing tunnel TA contains forwarder (2)"); string StrLocalHost = Dns.GetHostName(); IPHostEntry IPEntry = Dns.GetHostEntry(StrLocalHost); TransportAddress local_ta = TransportAddressFactory.CreateInstance("brunet.udp://" + IPEntry.AddressList[0].ToString() + ":" + 5000); IEnumerable locals = TransportAddressFactory.CreateForLocalHost(TransportAddress.TAType.Udp, 5000); bool match = false; foreach (TransportAddress test_ta1 in locals) { //Console.WriteLine("test_ta: {0}", test_ta1); if (test_ta1.Equals(local_ta)) { match = true; } } Assert.AreEqual(match, true, "testing local TA matches"); //testing function TA TransportAddress func_ta = TransportAddressFactory.CreateInstance("brunet.function://localhost:3000"); TransportAddress func_ta2 = TransportAddressFactory.CreateInstance("brunet.function://localhost:3000"); Assert.AreEqual(func_ta, func_ta2, "equality of instances"); Assert.IsTrue(func_ta == func_ta2, "reference equality, test of caching"); Assert.AreEqual(func_ta.ToString(), "brunet.function://localhost:3000", "Testing function TA parsing"); }