Exemple #1
0
 void SetAllowCredentials(IHttpResponse response)
 {
     if (this.config.IsCredentialsAllowed &&
         !AsciiString.ContentEquals(response.Headers.Get(HttpHeaderNames.AccessControlAllowOrigin, null), AnyOrigin))
     {
         response.Headers.Set(HttpHeaderNames.AccessControlAllowCredentials, new AsciiString("true"));
     }
 }
        private static void TestValueIteratorSingleValue(IHttp2Headers headers, ICharSequence name, ICharSequence value)
        {
            var itr = headers.GetAll(name).GetEnumerator();

            Assert.True(itr.MoveNext());
            Assert.True(AsciiString.ContentEqualsIgnoreCase(value, itr.Current));
            Assert.False(itr.MoveNext());
        }
Exemple #3
0
        public void PreflightRequestAllowCredentials()
        {
            var           origin   = new AsciiString("null");
            CorsConfig    config   = CorsConfigBuilder.ForOrigin(origin).AllowCredentials().Build();
            IHttpResponse response = PreflightRequest(config, origin.ToString(), "content-type, xheader1");

            Assert.Equal("true", response.Headers.Get(HttpHeaderNames.AccessControlAllowCredentials, null));
        }
Exemple #4
0
        public void SubStringHashCode()
        {
            var value1 = new AsciiString("123");
            var value2 = new AsciiString("a123".Substring(1));

            //two "123"s
            Assert.Equal(AsciiString.GetHashCode(value1), AsciiString.GetHashCode(value2));
        }
Exemple #5
0
        public void SimpleRequestWithOrigin()
        {
            var           origin   = new AsciiString("http://localhost:8888");
            IHttpResponse response = SimpleRequest(CorsConfigBuilder.ForOrigin(origin).Build(), origin.ToString());

            Assert.Equal(origin, response.Headers.Get(HttpHeaderNames.AccessControlAllowOrigin, null));
            Assert.Null(response.Headers.Get(HttpHeaderNames.AccessControlAllowHeaders, null));
        }
Exemple #6
0
        static void AssertContains(string a, string b, bool caseSensitiveEquals, bool caseInsenstaiveEquals)
        {
            var asciiA = new AsciiString(a);
            var asciiB = new AsciiString(b);

            Assert.Equal(caseSensitiveEquals, AsciiString.Contains(asciiA, asciiB));
            Assert.Equal(caseInsenstaiveEquals, AsciiString.ContainsIgnoreCase(asciiA, asciiB));
        }
        public void ContentEqualsIgnoreCase()
        {
            byte[]      bytes       = { 32, (byte)'a' };
            AsciiString asciiString = new AsciiString(bytes, 1, 1, false);

            // https://github.com/netty/netty/issues/9475
            Assert.False(asciiString.ContentEqualsIgnoreCase(new StringCharSequence("b")));
            Assert.False(asciiString.ContentEqualsIgnoreCase(AsciiString.Of("b")));
        }
        public void AsciiStringLookupByIndexReturnsExpectedCharacter()
        {
            const char expected = 'u';

            string value = "9quali52ty3";
            var    ascii = new AsciiString(value);

            Assert.AreEqual(expected, ascii[2]);
        }
        public void AsciiStringGetHashCodeReturnsDifferentCodeIfAsciiStringsAreNotEqual()
        {
            string value = "9quali52ty3";

            AsciiString asciiString1 = new AsciiString(value);
            AsciiString asciiString2 = new AsciiString(value.Reverse());

            Assert.AreNotEqual(asciiString1.GetHashCode(), asciiString2.GetHashCode());
        }
        public void AsciiStringGetHashCodeReturnsSameCodeIfAsciiStringsAreEqual()
        {
            string value = "9quali52ty3";

            AsciiString asciiString1 = new AsciiString(value);
            AsciiString asciiString2 = new AsciiString(value);

            Assert.AreEqual(asciiString1.GetHashCode(), asciiString2.GetHashCode());
        }
Exemple #11
0
        public TransactionInput(byte[] transactionHash, uint outputIndex, AsciiString scriptSignature, uint sequence)
        {
            TransactionHash = transactionHash;
            OutputIndex     = outputIndex;
            Sequence        = sequence;
            ScriptSignature = scriptSignature;

            Size = transactionHash.Length + sizeof(uint) + scriptSignature.Size + sizeof(uint);
        }
        protected internal ZlibWrapper?DetermineWrapper(ICharSequence acceptEncoding)
        {
            float starQ    = -1.0f;
            float gzipQ    = -1.0f;
            float deflateQ = -1.0f;

            ICharSequence[] parts = CharUtil.Split(acceptEncoding, ',');
            foreach (ICharSequence encoding in parts)
            {
                float q         = 1.0f;
                int   equalsPos = encoding.IndexOf('=');
                if (equalsPos != -1)
                {
                    try
                    {
                        var ddd = encoding.ToString(equalsPos + 1);
                        q = float.Parse(encoding.ToString(equalsPos + 1));
                    }
                    catch (FormatException)
                    {
                        // Ignore encoding
                        q = 0.0f;
                    }
                }

                if (encoding.Contains('*'))
                {
                    starQ = q;
                }
                else if (AsciiString.Contains(encoding, GZipString) && q > gzipQ)
                {
                    gzipQ = q;
                }
                else if (AsciiString.Contains(encoding, DeflateString) && q > deflateQ)
                {
                    deflateQ = q;
                }
            }
            if (gzipQ > 0.0f || deflateQ > 0.0f)
            {
                return(gzipQ >= deflateQ ? ZlibWrapper.Gzip : ZlibWrapper.Zlib);
            }
            if (starQ > 0.0f)
            {
                // ReSharper disable CompareOfFloatsByEqualityOperator
                if (gzipQ == -1.0f)
                {
                    return(ZlibWrapper.Gzip);
                }
                if (deflateQ == -1.0f)
                {
                    return(ZlibWrapper.Zlib);
                }
                // ReSharper restore CompareOfFloatsByEqualityOperator
            }
            return(null);
        }
        /// <summary>
        /// 发送消息并清空缓冲区。
        /// </summary>
        /// <param name="message">消息内容。</param>
        /// <returns>一个任务。</returns>
        public async Task SendAndFlushAsync(TransportMessage message)
        {
            var buffer   = GetByteBuffer(message, out int contentLength);
            var response = WriteResponse(_context, buffer, TypeJson, AsciiString.Cached($"{ contentLength}"));

            await _context.WriteAndFlushAsync(response);

            await _context.CloseAsync();
        }
        public void TestExceptionDuringConnect()
        {
            IEventLoopGroup group         = null;
            IChannel        serverChannel = null;
            IChannel        clientChannel = null;

            try
            {
                group = new DefaultEventLoopGroup(1);
                var addr      = new LocalAddress("a");
                var exception = new AtomicReference <Exception>();
                var sf        =
                    new ServerBootstrap().Channel <LocalServerChannel>().Group(group).ChildHandler(
                        new ActionChannelInitializer <IChannel>(ch =>
                {
                    ch.Pipeline.AddFirst(new HttpResponseEncoder());
                    var response = new DefaultFullHttpResponse(
                        HttpVersion.Http11,
                        HttpResponseStatus.BadGateway);
                    response.Headers.Add(AsciiString.Of("name"), "value");
                    response.Headers.Add(HttpHeaderNames.ContentLength, "0");
                    ch.WriteAndFlushAsync(response);
                }
                                                                )).BindAsync(addr);
                serverChannel = sf.Result;

                var cf = new Bootstrap().Channel <LocalChannel>().Group(group).Handler(
                    new ActionChannelInitializer <IChannel>(ch =>
                {
                    ch.Pipeline.AddFirst(new HttpProxyHandler(addr));
                    ch.Pipeline.AddLast(new ErrorCaptureHandler(exception));
                })).ConnectAsync(new DnsEndPoint("localhost", 1234));

                clientChannel = cf.Result;
                clientChannel.CloseAsync().Wait();

                Assert.True(exception.Value is HttpProxyConnectException);
                var actual = (HttpProxyConnectException)exception.Value;
                Assert.NotNull(actual.Headers);
                Assert.Equal("value", actual.Headers.GetAsString(AsciiString.Of("name")));
            }
            finally
            {
                if (clientChannel != null)
                {
                    clientChannel.CloseAsync();
                }
                if (serverChannel != null)
                {
                    serverChannel.CloseAsync();
                }
                if (group != null)
                {
                    @group.ShutdownGracefullyAsync().Wait();
                }
            }
        }
        public void AsciiStringsOfDifferentInputStringAreNotEqual()
        {
            string value1 = "9quali52ty3";
            string value2 = "3yt25ilauq9";

            var ascii1 = new AsciiString(value1);
            var ascii2 = new AsciiString(value2);

            Assert.AreNotEqual(ascii1, ascii2);
        }
 // Fast-Path implementation
 internal static int WriteAscii(AbstractByteBuffer buffer, int writerIndex, ICharSequence seq, int len)
 {
     // We can use the _set methods as these not need to do any index checks and reference checks.
     // This is possible as we called ensureWritable(...) before.
     for (int i = 0; i < len; i++)
     {
         buffer._SetByte(writerIndex++, AsciiString.CharToByte(seq[i]));
     }
     return(len);
 }
        public void TestGet()
        {
            var headers = NewClientHeaders();

            Assert.True(AsciiString.ContentEqualsIgnoreCase((AsciiString)"value1", headers.Get((AsciiString)"Name1", null)));
            Assert.True(AsciiString.ContentEqualsIgnoreCase((AsciiString)"/foo",
                                                            headers.Get(PseudoHeaderName.Path.Value, null)));
            Assert.Null(headers.Get(PseudoHeaderName.Status.Value, null));
            Assert.Null(headers.Get((AsciiString)"a missing header", null));
        }
Exemple #18
0
        public override bool Equals(object obj)
        {
            AsciiString other = obj as AsciiString;

            if (other != null)
            {
                return(_str == other._str);
            }
            return(false);
        }
Exemple #19
0
        public void SimpleRequestWithNoMatchingOrigin()
        {
            var           origin   = new AsciiString("http://localhost:8888");
            IHttpResponse response = SimpleRequest(CorsConfigBuilder.ForOrigins(
                                                       new AsciiString("https://localhost:8888")).Build(), origin.ToString());

            Assert.Null(response.Headers.Get(HttpHeaderNames.AccessControlAllowOrigin, null));
            Assert.Null(response.Headers.Get(HttpHeaderNames.AccessControlAllowHeaders, null));
            Assert.True(ReferenceCountUtil.Release(response));
        }
        public void AsciiStringsOfDifferentInputNotEqualsOperatorReturnsTrue()
        {
            string value1 = "9quali52ty3";
            string value2 = "3yt25ilauq9";

            var ascii1 = new AsciiString(value1);
            var ascii2 = new AsciiString(value2);

            Assert.IsTrue(ascii1 != ascii2);
        }
 public HttpServerUpgradeHandler.IUpgradeCodec NewUpgradeCodec(ICharSequence protocol)
 {
     if (AsciiString.ContentEquals(Http2CodecUtil.HttpUpgradeProtocolName, protocol))
     {
         return(new Http2ServerUpgradeCodec(Http2FrameCodecBuilder.ForServer().Build(), new HelloWorldHttp2Handler()));
     }
     else
     {
         return(null);
     }
 }
Exemple #22
0
        /// <summary>
        /// Returns true if the server switched to a different protocol than HTTP/1.0 or HTTP/1.1, e.g. HTTP/2 or Websocket.
        /// Returns false if the upgrade happened in a different layer, e.g. upgrade from HTTP/1.1 to HTTP/1.1 over TLS.
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        protected bool IsSwitchingToNonHttp1Protocol(IHttpResponse msg)
        {
            if (msg.Status.Code != StatusCodes.Status101SwitchingProtocols)
            {
                return(false);
            }

            return(!msg.Headers.TryGet(HttpHeaderNames.Upgrade, out ICharSequence newProtocol) ||
                   !AsciiString.Contains(newProtocol, HttpVersion.Http10String) &&
                   !AsciiString.Contains(newProtocol, HttpVersion.Http11String));
        }
        public void GlobalSetup()
        {
            var bytes = new byte[this.Size];

            RandomGenerator.NextBytes(bytes);

            this.asciiString = new AsciiString(bytes, false);
            string value = Encoding.ASCII.GetString(bytes);

            this.stringValue = new StringCharSequence(value);
        }
Exemple #24
0
        private static IHttp2Headers HeadersOfSize(int minSize)
        {
            AsciiString         singleByte = new AsciiString(new byte[] { 0 }, false);
            DefaultHttp2Headers headers    = new DefaultHttp2Headers(false);

            for (int size = 0; size < minSize; size += 2)
            {
                headers.Add(singleByte, singleByte);
            }
            return(headers);
        }
Exemple #25
0
        private static IHttp2Headers Headers()
        {
            var headers = new DefaultHttp2Headers(false);

            headers.Method    = AsciiString.Of("GET");
            headers.Scheme    = AsciiString.Of("https");
            headers.Authority = AsciiString.Of("example.org");
            headers.Path      = AsciiString.Of("/some/path/resource2");
            headers.Add(Http2TestUtil.RandomString(), Http2TestUtil.RandomString());
            return(headers);
        }
Exemple #26
0
 public char this[int index]
 {
     get
     {
         if (index > _pos)
         {
             ThrowHelper.ThrowIndexOutOfRangeException();
         }
         return(AsciiString.ByteToChar(_chars[index]));
     }
 }
 public void StaticIndexOfChar()
 {
     Assert.Equal(-1, AsciiString.IndexOf(null, 'a', 0));
     Assert.Equal(-1, AsciiString.IndexOf((AsciiString)"", 'a', 0));
     Assert.Equal(-1, AsciiString.IndexOf((AsciiString)"abc", 'd', 0));
     Assert.Equal(-1, AsciiString.IndexOf((AsciiString)"aabaabaa", 'A', 0));
     Assert.Equal(0, AsciiString.IndexOf((AsciiString)"aabaabaa", 'a', 0));
     Assert.Equal(1, AsciiString.IndexOf((AsciiString)"aabaabaa", 'a', 1));
     Assert.Equal(3, AsciiString.IndexOf((AsciiString)"aabaabaa", 'a', 2));
     Assert.Equal(3, AsciiString.IndexOf((AsciiString)"aabdabaa", 'd', 1));
 }
        public void AsciiStringSubStringReturnsExpectedFullSubString()
        {
            string value    = "9quali52ty3";
            string expected = value.Substring(0, value.Length);

            var ascii = new AsciiString(value);

            var subString = ascii.SubString(0, value.Length);

            Assert.AreEqual(expected, subString.ToString());
        }
Exemple #29
0
        private static IHttp2Headers LargeHeaders()
        {
            DefaultHttp2Headers headers = new DefaultHttp2Headers(false);

            for (int i = 0; i < 100; ++i)
            {
                string key   = "this-is-a-test-header-key-" + i;
                string value = "this-is-a-test-header-value-" + i;
                headers.Add(AsciiString.Of(key), AsciiString.Of(value));
            }
            return(headers);
        }
Exemple #30
0
 /// <summary>
 /// Create a new read only representation of headers used by clients.
 /// </summary>
 /// <param name="validateHeaders"><c>true</c> will run validation on each header name/value pair to ensure protocol
 /// compliance.</param>
 /// <param name="method">The value for <see cref="PseudoHeaderName.Method"/>.</param>
 /// <param name="path">The value for <see cref="PseudoHeaderName.Path"/>.</param>
 /// <param name="scheme">The value for <see cref="PseudoHeaderName.Scheme"/>.</param>
 /// <param name="authority">The value for <see cref="PseudoHeaderName.Authority"/>.</param>
 /// <param name="otherHeaders">A an array of key:value pairs. Must not contain any
 /// <a href="https://tools.ietf.org/html/rfc7540#section-8.1.2.1">pseudo headers</a>
 /// or <c>null</c> names/values.
 /// A copy will <strong>NOT</strong> be made of this array. If the contents of this array
 /// may be modified externally you are responsible for passing in a copy.</param>
 /// <returns>a new read only representation of headers used by clients.</returns>
 public static ReadOnlyHttp2Headers ClientHeaders(bool validateHeaders,
                                                  AsciiString method, AsciiString path, AsciiString scheme, AsciiString authority,
                                                  params AsciiString[] otherHeaders)
 {
     return(new ReadOnlyHttp2Headers(validateHeaders,
                                     new AsciiString[]
     {
         PseudoHeaderName.Method.Value, method, PseudoHeaderName.Path.Value, path,
         PseudoHeaderName.Scheme.Value, scheme, PseudoHeaderName.Authority.Value, authority
     },
                                     otherHeaders));
 }
Exemple #31
0
		public void GoToUrl (string url)
		{
			int index = -1;
			nsISHistory history;
			navigation.navigation.getSessionHistory(out history);
			int count = Count;
			nsIHistoryEntry entry;
			for (int i = 0; i < count; i++) {
				nsIURI uri;
				history.getEntryAtIndex(i, false, out entry);
				entry.getURI (out uri);
				AsciiString spec = new AsciiString(String.Empty);
				uri.getSpec (spec.Handle);
				if (string.Compare (spec.ToString (), url, true) == 0) {
					index = i;
					break;
				}
			}
			if (index > -1)
				this.GoToIndex (index);
		}