예제 #1
0
        public bool BeginEncode(HeadersEnumerator enumerator, Span <byte> buffer, out int length)
        {
            _enumerator = enumerator;
            _enumerator.MoveNext();

            return(Encode(buffer, out length));
        }
예제 #2
0
        public bool BeginEncode(int statusCode, HeadersEnumerator enumerator, Span <byte> buffer, out int length)
        {
            _enumerator = enumerator;
            _enumerator.MoveNext();

            int  statusCodeLength = EncodeStatusCode(statusCode, buffer);
            bool done             = Encode(buffer.Slice(statusCodeLength), throwIfNoneEncoded: false, out int headersLength);

            length = statusCodeLength + headersLength;

            return(done);
        }
예제 #3
0
        private bool Encode(Span <byte> buffer, bool throwIfNoneEncoded, out int length)
        {
            int currentLength = 0;

            do
            {
                if (!EncodeHeader(_enumerator.Current.Key, _enumerator.Current.Value, buffer.Slice(currentLength), out int headerLength))
                {
                    if (currentLength == 0 && throwIfNoneEncoded)
                    {
                        throw new HPackEncodingException(SR.net_http_hpack_encode_failure);
                    }

                    length = currentLength;
                    return(false);
                }

                currentLength += headerLength;
            }while (_enumerator.MoveNext());

            length = currentLength;

            return(true);
        }