ln.protocols.helper/HttpLikeProtocolReader.cs

40 lines
1.3 KiB
C#

using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using ln.rtp;
namespace ln.protocols.helper
{
public class HttpLikeProtocolReader
{
public static bool ReadRequest(Stream stream, Encoding encoding, out Request request)
{
request = new Request();
return ReadRequest(stream, encoding, request);
}
public static bool ReadRequest(Stream stream, Encoding encoding, Request request)
{
string requestLine = stream.ReadLine();
if (requestLine != null)
{
request.Method = requestLine.ReadToken(out requestLine);
request.RequestUri = requestLine.ReadToken(out requestLine);
request.Protocol = requestLine;
request.Headers.Clear();
request.Headers.Read(stream);
if (request.Headers.TryGetInteger("content-length", out int contentLength) && (contentLength > 0))
{
request.ContentStream = new RequestContentStream(stream, contentLength);
}
if (stream is NetworkStream networkStream)
request.ClientAddress = ((IPEndPoint)networkStream.Socket.RemoteEndPoint).Address;
return true;
}
return false;
}
}
}