Example #1
0
        public async Task CreateDeleteEndpoint()
        {
            var ttl = TimeSpan.FromSeconds(10);

            using (var server = new MockNat())
            {
                server.RequestReceived += (s, req) =>
                {
                    var map      = Message.Create <MapRequest>(req.Buffer);
                    var response = new MapResponse
                    {
                        AssignedExternalAdddress = IPAddress.Loopback,
                        AssignedExternalPort     = 1234,
                        EpochTime    = TimeSpan.FromSeconds(1),
                        Lifetime     = ttl,
                        Opcode       = Opcode.Map,
                        Nonce        = map.Nonce,
                        InternalPort = map.InternalPort,
                        Protocol     = map.Protocol
                    }.ToByteArray();
                    server.udp.Send(response, response.Length, req.RemoteEndPoint);
                };
                var nat = new Client(server.Address);

                var lease = await nat.CreatePublicEndpointAsync(ProtocolType.Udp, 4321);

                Assert.AreEqual(IPAddress.Loopback, lease.PublicAddress);
                Assert.AreEqual(4321, lease.InternalPort);
                Assert.AreEqual(1234, lease.PublicPort);
                Assert.AreEqual(ttl, lease.Lifetime);
                Assert.AreEqual(ProtocolType.Udp, lease.Protocol);

                await nat.DeletePublicEndpointAsync(lease);
            }
        }
Example #2
0
        public async Task IsAvailable()
        {
            using (var server = new MockNat())
            {
                server.RequestReceived += (s, req) => server.udp.Send(new byte[2], 2, req.RemoteEndPoint);
                var nat = new Client(server.Address);
                var q   = await nat.IsAvailableAsync();

                Assert.IsTrue(q);
            }
        }
Example #3
0
        public async Task Unresponsive_Nat()
        {
            using (var server = new MockNat())
            {
                var nat = new Client(server.Address)
                {
                    MaxRetries = 1
                };
                var q = await nat.IsAvailableAsync();

                Assert.IsFalse(q);
            }
        }
Example #4
0
        public async Task IsAvailable()
        {
            var response = new Response().ToByteArray();

            using (var server = new MockNat())
            {
                server.RequestReceived += (s, req) => server.udp.Send(response, response.Length, req.RemoteEndPoint);
                var nat = new Client(server.Address);
                var q   = await nat.IsAvailableAsync();

                Assert.IsTrue(q);
            }
        }