コード例 #1
0
        public void HttpResponseWithoutVersionStatusCodeOrReasonPhraseTest()
        {
            HttpResponseLayer httpLayer = new HttpResponseLayer();
            PacketBuilder     builder   = new PacketBuilder(new EthernetLayer(),
                                                            new IpV4Layer(),
                                                            new TcpLayer(),
                                                            httpLayer);

            // null version
            Packet packet = builder.Build(DateTime.Now);

            Assert.IsNull(packet.Ethernet.IpV4.Tcp.Http.Version);

            // null status code
            httpLayer.Version = HttpVersion.Version11;
            packet            = builder.Build(DateTime.Now);
            Assert.IsNotNull(packet.Ethernet.IpV4.Tcp.Http.Version);
            Assert.IsNull(((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).StatusCode);

            // null reason phrase
            httpLayer.StatusCode = 200;
            packet = builder.Build(DateTime.Now);
            Assert.IsNotNull(packet.Ethernet.IpV4.Tcp.Http.Version);
            Assert.IsNotNull(((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).StatusCode);
            Assert.AreEqual(Datagram.Empty, ((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).ReasonPhrase, "ReasonPhrase");
        }
コード例 #2
0
        public static HttpResponseLayer NextHttpResponseLayer(this Random random)
        {
            HttpResponseLayer httpResponseLayer = new HttpResponseLayer
            {
                Version = random.NextHttpVersion(),
                StatusCode = random.NextBool(10) ? null : (uint?)random.NextUInt(100, 999),
            };
            httpResponseLayer.ReasonPhrase = httpResponseLayer.StatusCode == null ? null : random.NextHttpReasonPhrase();
            httpResponseLayer.Header = httpResponseLayer.ReasonPhrase == null ? null : random.NextHttpHeader();
            httpResponseLayer.Body = httpResponseLayer.Header == null ? null : random.NextHttpBody(false, httpResponseLayer.StatusCode, httpResponseLayer.Header);

            return httpResponseLayer;
        }
コード例 #3
0
        public static HttpResponseLayer NextHttpResponseLayer(this Random random)
        {
            HttpResponseLayer httpResponseLayer = new HttpResponseLayer
            {
                Version    = random.NextHttpVersion(),
                StatusCode = random.NextBool(10) ? null : (uint?)random.NextUInt(100, 999),
            };

            httpResponseLayer.ReasonPhrase = httpResponseLayer.StatusCode == null ? null : random.NextHttpReasonPhrase();
            httpResponseLayer.Header       = httpResponseLayer.ReasonPhrase == null ? null : random.NextHttpHeader();
            httpResponseLayer.Body         = httpResponseLayer.Header == null ? null : random.NextHttpBody(false, httpResponseLayer.StatusCode, httpResponseLayer.Header);

            return(httpResponseLayer);
        }
コード例 #4
0
        public void MultipleHttpLayersTest()
        {
            var httpLayer1 = new HttpResponseLayer
            {
                Version      = HttpVersion.Version11,
                StatusCode   = 200,
                ReasonPhrase = new DataSegment(Encoding.ASCII.GetBytes("OK")),
                Header       = new HttpHeader(new HttpContentLengthField(10)),
                Body         = new Datagram(new byte[10])
            };
            var httpLayer2 = new HttpResponseLayer
            {
                Version      = HttpVersion.Version11,
                StatusCode   = 201,
                ReasonPhrase = new DataSegment(Encoding.ASCII.GetBytes("MOVED")),
                Header       = new HttpHeader(new HttpContentLengthField(20)),
                Body         = new Datagram(new byte[20])
            };
            Packet packet = PacketBuilder.Build(DateTime.Now, new EthernetLayer(), new IpV4Layer(), new TcpLayer(), httpLayer1, httpLayer2);

            Assert.AreEqual(2, packet.Ethernet.IpV4.Tcp.HttpCollection.Count);
            Assert.AreEqual(httpLayer1, packet.Ethernet.IpV4.Tcp.Http.ExtractLayer());
            Assert.AreEqual(httpLayer2, packet.Ethernet.IpV4.Tcp.HttpCollection[1].ExtractLayer());
        }
コード例 #5
0
ファイル: HttpTests.cs プロジェクト: JackWangCUMT/WiFiSpy
 public void MultipleHttpLayersTest()
 {
     var httpLayer1 = new HttpResponseLayer
                      {
                          Version = HttpVersion.Version11,
                          StatusCode = 200,
                          ReasonPhrase = new DataSegment(Encoding.ASCII.GetBytes("OK")),
                          Header = new HttpHeader(new HttpContentLengthField(10)),
                          Body = new Datagram(new byte[10])
                      };
     var httpLayer2 = new HttpResponseLayer
                      {
                          Version = HttpVersion.Version11,
                          StatusCode = 201,
                          ReasonPhrase = new DataSegment(Encoding.ASCII.GetBytes("MOVED")),
                          Header = new HttpHeader(new HttpContentLengthField(20)),
                          Body = new Datagram(new byte[20])
                      };
     Packet packet = PacketBuilder.Build(DateTime.Now, new EthernetLayer(), new IpV4Layer(), new TcpLayer(), httpLayer1, httpLayer2);
     Assert.AreEqual(2, packet.Ethernet.IpV4.Tcp.HttpCollection.Count);
     Assert.AreEqual(httpLayer1, packet.Ethernet.IpV4.Tcp.Http.ExtractLayer());
     Assert.AreEqual(httpLayer2, packet.Ethernet.IpV4.Tcp.HttpCollection[1].ExtractLayer());
 }
コード例 #6
0
ファイル: HttpTests.cs プロジェクト: JackWangCUMT/WiFiSpy
        public void HttpResponseWithoutVersionStatusCodeOrReasonPhraseTest()
        {
            HttpResponseLayer httpLayer = new HttpResponseLayer();
            PacketBuilder builder = new PacketBuilder(new EthernetLayer(),
                                                      new IpV4Layer(),
                                                      new TcpLayer(),
                                                      httpLayer);

            // null version
            Packet packet = builder.Build(DateTime.Now);
            Assert.IsNull(packet.Ethernet.IpV4.Tcp.Http.Version);

            // null status code
            httpLayer.Version = HttpVersion.Version11;
            packet = builder.Build(DateTime.Now);
            Assert.IsNotNull(packet.Ethernet.IpV4.Tcp.Http.Version);
            Assert.IsNull(((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).StatusCode);

            // null reason phrase
            httpLayer.StatusCode = 200;
            packet = builder.Build(DateTime.Now);
            Assert.IsNotNull(packet.Ethernet.IpV4.Tcp.Http.Version);
            Assert.IsNotNull(((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).StatusCode);
            Assert.AreEqual(Datagram.Empty, ((HttpResponseDatagram)packet.Ethernet.IpV4.Tcp.Http).ReasonPhrase, "ReasonPhrase");
        }
コード例 #7
0
        public void RandomHttpTest()
        {
            int seed = new Random().Next();

            Console.WriteLine("Seed: " + seed);
            Random random = new Random(seed);

            for (int i = 0; i != 200; ++i)
            {
                EthernetLayer ethernetLayer = random.NextEthernetLayer(EthernetType.None);
                IpV4Layer     ipV4Layer     = random.NextIpV4Layer(null);
                ipV4Layer.HeaderChecksum = null;
                Layer    ipLayer  = random.NextBool() ? (Layer)ipV4Layer : random.NextIpV6Layer(true);
                TcpLayer tcpLayer = random.NextTcpLayer();
                tcpLayer.Checksum = null;
                HttpLayer httpLayer = random.NextHttpLayer();

                Packet packet = PacketBuilder.Build(DateTime.Now, ethernetLayer, ipLayer, tcpLayer, httpLayer);
                Assert.IsTrue(packet.IsValid, "IsValid");

                HttpDatagram httpDatagram = packet.Ethernet.Ip.Tcp.Http;
                Assert.AreEqual(httpLayer.Version, httpDatagram.Version);
                if (httpLayer.Version != null)
                {
                    Assert.AreEqual(httpLayer.Version.GetHashCode(), httpDatagram.Version.GetHashCode());
                }
                if (httpLayer is HttpRequestLayer)
                {
                    Assert.IsTrue(httpDatagram.IsRequest);
                    Assert.IsTrue(httpLayer.IsRequest);
                    Assert.IsFalse(httpDatagram.IsResponse);
                    Assert.IsFalse(httpLayer.IsResponse);

                    HttpRequestLayer    httpRequestLayer    = (HttpRequestLayer)httpLayer;
                    HttpRequestDatagram httpRequestDatagram = (HttpRequestDatagram)httpDatagram;
                    Assert.AreEqual(httpRequestLayer.Method, httpRequestDatagram.Method);
                    if (httpRequestLayer.Method != null)
                    {
                        Assert.AreEqual(httpRequestLayer.Method.GetHashCode(), httpRequestDatagram.Method.GetHashCode());
                        Assert.AreEqual(httpRequestLayer.Method.KnownMethod, httpRequestDatagram.Method.KnownMethod);
                    }
                    Assert.AreEqual(httpRequestLayer.Uri, httpRequestDatagram.Uri);
                }
                else
                {
                    Assert.IsFalse(httpDatagram.IsRequest);
                    Assert.IsFalse(httpLayer.IsRequest);
                    Assert.IsTrue(httpDatagram.IsResponse);
                    Assert.IsTrue(httpLayer.IsResponse);

                    HttpResponseLayer    httpResponseLayer    = (HttpResponseLayer)httpLayer;
                    HttpResponseDatagram httpResponseDatagram = (HttpResponseDatagram)httpDatagram;
                    Assert.AreEqual(httpResponseLayer.StatusCode, httpResponseDatagram.StatusCode);
                    Assert.AreEqual(httpResponseLayer.ReasonPhrase, httpResponseDatagram.ReasonPhrase);
                }
                Assert.AreEqual(httpLayer.Header, httpDatagram.Header);
                if (httpLayer.Header != null)
                {
                    Assert.AreEqual(httpLayer.Header.GetHashCode(), httpDatagram.Header.GetHashCode());
                    if (!httpDatagram.IsRequest || ((HttpRequestDatagram)httpDatagram).Uri != "")
                    {
                        Assert.IsTrue(httpDatagram.IsValidStart, "IsValidStart");
                    }

                    foreach (var field in httpLayer.Header)
                    {
                        Assert.IsFalse(field.Equals("abc"));
                    }
                    foreach (var field in (IEnumerable)httpLayer.Header)
                    {
                        Assert.IsFalse(field.Equals("abc"));
                    }

                    MoreAssert.AreSequenceEqual(httpLayer.Header.Select(field => field.GetHashCode()), httpDatagram.Header.Select(field => field.GetHashCode()));

                    if (httpLayer.Header.ContentType != null)
                    {
                        var parameters = httpLayer.Header.ContentType.Parameters;
                        Assert.IsNotNull(((IEnumerable)parameters).GetEnumerator());
                        Assert.AreEqual <object>(parameters, httpDatagram.Header.ContentType.Parameters);
                        Assert.AreEqual(parameters.GetHashCode(), httpDatagram.Header.ContentType.Parameters.GetHashCode());
                        Assert.AreEqual(parameters.Count, httpDatagram.Header.ContentType.Parameters.Count);
                        int maxParameterNameLength = parameters.Any() ? parameters.Max(pair => pair.Key.Length) : 0;
                        Assert.IsNull(parameters[new string('a', maxParameterNameLength + 1)]);
                    }
                }
                Assert.AreEqual(httpLayer.Body, httpDatagram.Body);
                Assert.AreEqual(httpLayer, httpDatagram.ExtractLayer(), "HTTP Layer");
                Assert.AreEqual(httpLayer.Length, httpDatagram.Length);
            }
        }