40 lines
1.3 KiB
C#
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;
|
|
}
|
|
}
|
|
} |