Esempio n. 1
0
        public FastCGIMessage Pop()
        {
            // 生成请求头
            if (header == null)
            {
                if (stream.Length < 8)
                {
                    return(null);
                }
                byte[] buffer = new byte[8];
                stream.Seek(0, SeekOrigin.Begin);
                stream.Read(buffer, 0, 8);
                stream.Seek(0, SeekOrigin.End);
                header = new FastCGIHeader(buffer);
            }

            // 获取请求内容
            if (
                header != null &&
                stream.Length >= header.MessageLength
                )
            {
                byte[] body = new byte[header.ContentLength];
                stream.Seek(8, SeekOrigin.Begin);
                stream.Read(body, 0, header.ContentLength);
                FastCGIMessage message = new FastCGIMessage(header, body);
                MemoryStream   one     = new MemoryStream();
                int            length  = (int)stream.Length - header.MessageLength;
                if (length > 0)
                {
                    one.Write(stream.GetBuffer(), header.MessageLength, length);
                }
                stream = one;
                header = null;
                return(message);
            }
            return(null);
        }
Esempio n. 2
0
 public FastCGIMessage(FastCGIHeader header, byte[] body)
 {
     Header = header;
     Body   = body;
 }
Esempio n. 3
0
 public FastCGIParser()
 {
     header = null;
     stream = new MemoryStream();
 }