Livt packages
Livt.Web
Version 1.0.0
Bounded HTTP routing, request parsing, response encoding, and Ethernet application composition for Livt.
Published files (63)
- HttpAllowedMethods.lvt
- HttpApplication.lvt
- HttpApplicationState.lvt
- HttpContentType.lvt
- HttpHeaderName.lvt
- HttpMatchResult.lvt
- HttpMethod.lvt
- HttpNetworkEndpoint.lvt
- HttpNetworkResponse.lvt
- HttpPath.lvt
- HttpPreparation.lvt
- HttpRequestCursor.lvt
- HttpRequestHeaders.lvt
- HttpRequestLine.lvt
- HttpRequestParser.lvt
- HttpRequestResult.lvt
- HttpRequestSyntax.lvt
- HttpResponse.lvt
- HttpResponseEncoder.lvt
- HttpResponseSyntax.lvt
- HttpRouteFallback.lvt
- HttpRouteMethods.lvt
- HttpRouter.lvt
- HttpServer.lvt
- HttpStatus.lvt
- HttpTcpFrame.lvt
- HttpTcpSequence.lvt
- HttpTcpState.lvt
- HttpTcpTransport.lvt
- HttpTransportPayload.lvt
- HttpTransportState.lvt
- HttpVersion.lvt
- IHttpApplication.lvt
- IHttpHandler.lvt
- IHttpRequest.lvt
- IHttpResponse.lvt
- IHttpRoute.lvt
- IHttpRouteMatcher.lvt
- Route.lvt
- RouteChain.lvt
- RouteDispatch.lvt
- RouteSelection.lvt
- StaticContent.lvt
src/http/HttpRequestSyntax.lvt
namespace Livt.Web.Http
using Livt.Net
/**
* Stateless ASCII predicates shared by request-line and header scanners.
*/
class HttpRequestSyntax
{
/**
* Classifies ASCII decimal digits only.
*/
public static inline fn IsDigit[](value: byte) bool
{
return value >= 0x30 && value <= 0x39
}
/**
* Classifies ASCII letters without locale or Unicode interpretation.
*/
public static inline fn IsAlpha[](value: byte) bool
{
return (value >= 0x41 && value <= 0x5A) || (value >= 0x61 && value <= 0x7A)
}
/**
* Classifies ASCII hexadecimal digits in either case.
*/
public static inline fn IsHex[](value: byte) bool
{
return HttpRequestSyntax.IsDigit(value) || (value >= 0x41 && value <= 0x46) || (value >= 0x61 && value <= 0x66)
}
/**
* Classifies permitted HTTP token bytes; excludes separators and whitespace.
*/
public static inline fn IsToken[](value: byte) bool
{
return HttpRequestSyntax.IsAlpha(value) || HttpRequestSyntax.IsDigit(value)
|| value == 0x21 || value == 0x23 || value == 0x24 || value == 0x25
|| value == 0x26 || value == 0x27 || value == 0x2A || value == 0x2B
|| value == 0x2D || value == 0x2E || value == 0x5E || value == 0x5F
|| value == 0x60 || value == 0x7C || value == 0x7E
}
/**
* Classifies encoded request-target bytes; escape structure is checked by callers.
*/
public static inline fn IsTargetByte[](value: byte) bool
{
return HttpRequestSyntax.IsAlpha(value) || HttpRequestSyntax.IsDigit(value)
|| value == 0x2D || value == 0x2E || value == 0x5F || value == 0x7E
|| value == 0x21 || value == 0x24 || value == 0x26 || value == 0x27
|| value == 0x28 || value == 0x29 || value == 0x2A || value == 0x2B
|| value == 0x2C || value == 0x3B || value == 0x3D || value == 0x3A
|| value == 0x40 || value == 0x2F || value == 0x3F || value == 0x25
}
/**
* Maps uppercase ASCII letters to lowercase; leaves other bytes unchanged.
*/
public static inline fn Lower[](value: byte) byte
{
if (value >= 0x41 && value <= 0x5A) {
return ((value as int) + 32) as byte
}
return value
}
/**
* Recognizes HTTP optional whitespace: space or horizontal tab.
*/
public static inline fn IsWhitespace[](value: byte) bool
{
return value == 0x20 || value == 0x09
}
}