示例#1
0
        public static bool TryParseRequestLine(ReadOnlySpan <byte> buffer, out HttpRequestLine requestLine, out int totalParsedBytes)
        {
            requestLine      = new HttpRequestLine();
            totalParsedBytes = 0;

            var reader = new HttpRequestReader();

            reader.Buffer = buffer;

            requestLine.Method = reader.ReadMethod();
            if (requestLine.Method == HttpMethod.Unknown)
            {
                return(false);
            }

            requestLine.RequestUri = reader.ReadRequestUri();
            if (requestLine.RequestUri.Length == 0)
            {
                return(false);
            }

            requestLine.Version = reader.ReadHttpVersion();
            if (requestLine.Version == HttpVersion.Unknown)
            {
                return(false);
            }

            totalParsedBytes = buffer.Length - reader.Buffer.Length;
            return(true);
        }
示例#2
0
        public static bool TryParseHttpVersion(ByteSpan buffer, out Utf8Span httpVersion, out int parsedBytes)
        {
            var versionSpan = HttpRequestReader.SliceTo(buffer, HttpRequestReader.s_CR, HttpRequestReader.s_LF, out parsedBytes);

            httpVersion = new Utf8Span(versionSpan);
            return(parsedBytes != 0);
        }
示例#3
0
        public static bool TryParseRequestUri(ByteSpan buffer, out Utf8Span requestUri, out int parsedBytes)
        {
            var uriSpan = HttpRequestReader.SliceTo(buffer, HttpRequestReader.s_SP, out parsedBytes);

            requestUri = new Utf8Span(uriSpan);
            return(parsedBytes != 0);
        }
示例#4
0
        void LogRestOfRequest(ByteSpan buffer)
        {
            HttpRequestReader reader = new HttpRequestReader();

            reader.Buffer = buffer;
            while (true)
            {
                var header = reader.ReadHeader();
                if (header.Length == 0)
                {
                    break;
                }
                Log.LogMessage(Log.Level.Verbose, "\tHeader: {0}", header.ToString());
            }
            var messageBody = reader.Buffer;

            Log.LogMessage(Log.Level.Verbose, "\tBody bytecount: {0}", messageBody.Length);
        }
示例#5
0
        public static bool TryParseRequestLine(ByteSpan buffer, out HttpRequestLine requestLine, out int totalParsedBytes)
        {
            requestLine = new HttpRequestLine();
            totalParsedBytes = 0;

            var reader = new HttpRequestReader();
            reader.Buffer = buffer;

            requestLine.Method = reader.ReadMethod();
            if(requestLine.Method == HttpMethod.Unknown) { return false; }

            requestLine.RequestUri = reader.ReadRequestUri();
            if(requestLine.RequestUri.Length == 0) { return false; }

            requestLine.Version = reader.ReadHttpVersion();
            if (requestLine.Version == HttpVersion.Unknown) { return false; }

            totalParsedBytes = buffer.Length - reader.Buffer.Length;
            return true;
        }
示例#6
0
 void LogRestOfRequest(ByteSpan buffer)
 {
     HttpRequestReader reader = new HttpRequestReader();
     reader.Buffer = buffer;
     while (true)
     {
         var header = reader.ReadHeader();
         if (header.Length == 0) break;
         Log.LogMessage(Log.Level.Verbose, "\tHeader: {0}", header.ToString());
     }
     var messageBody = reader.Buffer;
     Log.LogMessage(Log.Level.Verbose, "\tBody bytecount: {0}", messageBody.Length);
 }
示例#7
0
 public static bool TryParseHttpVersion(ReadOnlySpan <byte> buffer, out Utf8String httpVersion, out int parsedBytes)
 {
     httpVersion = new Utf8String(HttpRequestReader.SliceTo(buffer, HttpRequestReader.s_CR, HttpRequestReader.s_LF, out parsedBytes));
     return(parsedBytes != 0);
 }
示例#8
0
 public static bool TryParseRequestUri(ReadOnlySpan <byte> buffer, out Utf8String requestUri, out int parsedBytes)
 {
     requestUri = new Utf8String(HttpRequestReader.SliceTo(buffer, HttpRequestReader.s_SP, out parsedBytes));
     return(parsedBytes != 0);
 }