Livt packages
Livt.Web
Version 1.0.0
Bounded HTTP routing, request parsing, response encoding, and Ethernet application composition for Livt.
Published files (63)
- CounterContent.lvt
- HttpApplicationTest.lvt
- HttpHandlerTest.lvt
- HttpHeaderRangeData.lvt
- HttpHeaderRangeTest.lvt
- HttpNetworkEndpointTest.lvt
- HttpPathTest.lvt
- HttpRequestBoundsTest.lvt
- HttpRequestParserTest.lvt
- HttpRequestTestData.lvt
- HttpResponseEncoderTest.lvt
- HttpResponseTestData.lvt
- HttpRoutingTest.lvt
- HttpTcpSequenceTest.lvt
- RoutingBytes.lvt
- RoutingCounter.lvt
tests/http/RoutingBytes.lvt
namespace Livt.Web.Tests.Http
using Livt.Net
using Livt.Web.Http
/**
* Application-owned constants plus test-only bounds/lifetime/failure controls.
*/
component RoutingBytes : IPacketData
{
const BYTES[578] = [
0x2F, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2F, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x2F, 0x61,
0x2F, 0x25, 0x36, 0x31, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2F, 0x2F, 0x53, 0x74, 0x61,
0x74, 0x75, 0x73, 0x2F, 0x6D, 0x69, 0x73, 0x73, 0x69, 0x6E, 0x67, 0x73, 0x74, 0x61, 0x74, 0x75,
0x73, 0x2F, 0x78, 0x3F, 0x79, 0x2F, 0x78, 0x23, 0x79, 0x2F, 0x25, 0x2F, 0x25, 0x47, 0x30, 0x2F,
0x78, 0x00, 0x2F, 0x61, 0x25, 0x32, 0x46, 0x62, 0x2F, 0x61, 0x2F, 0x62, 0x2F, 0x73, 0x74, 0x61,
0x74, 0x75, 0x73, 0x3F, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2F, 0x74, 0x6F, 0x6F, 0x6C, 0x6F, 0x6E,
0x67, 0x2F, 0x61, 0x62, 0x2F, 0x25, 0x36, 0x61, 0x2F, 0x25, 0x36, 0x41, 0x2F, 0x61, 0x2F, 0x2E,
0x2E, 0x2F, 0x62, 0x2F, 0x62, 0x2F, 0x61, 0x2F, 0x2F, 0x62, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x20,
0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20,
0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30,
0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3F,
0x78, 0x3D, 0x31, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A,
0x47, 0x45, 0x54, 0x20, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2F, 0x20, 0x48, 0x54, 0x54,
0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x53, 0x74,
0x61, 0x74, 0x75, 0x73, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D,
0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x6D, 0x69, 0x73, 0x73, 0x69, 0x6E, 0x67, 0x20, 0x48, 0x54,
0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x48, 0x45, 0x41, 0x44, 0x20, 0x2F,
0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D,
0x0A, 0x0D, 0x0A, 0x50, 0x4F, 0x53, 0x54, 0x20, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x20,
0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x50, 0x4F, 0x53, 0x54,
0x20, 0x2F, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30,
0x0D, 0x0A, 0x0D, 0x0A, 0x50, 0x4F, 0x53, 0x54, 0x20, 0x2F, 0x6D, 0x69, 0x73, 0x73, 0x69, 0x6E,
0x67, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45,
0x54, 0x20, 0x2F, 0x25, 0x36, 0x31, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D,
0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x61, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31,
0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x61, 0x25, 0x32, 0x46, 0x62,
0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54,
0x20, 0x2F, 0x61, 0x62, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D,
0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x25, 0x36, 0x61, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31,
0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x61, 0x2F, 0x2E, 0x2E, 0x2F,
0x62, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45,
0x54, 0x20, 0x2F, 0x61, 0x2F, 0x2F, 0x62, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30,
0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54, 0x20, 0x2F, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x3F,
0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30, 0x0D, 0x0A, 0x0D, 0x0A, 0x47, 0x45, 0x54,
0x20, 0x2F, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x20, 0x48, 0x54, 0x54, 0x50, 0x2F, 0x31, 0x2E, 0x30,
0x0D, 0x0A, 0x0D, 0x0A, 0x48, 0x4F, 0x4D, 0x45, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x6F, 0x74, 0x68,
0x65, 0x72]
const OFFSETS[47] = [0, 1, 8, 14, 16, 20, 28, 35, 43, 43, 49, 53, 57, 59, 63, 66, 72, 76, 89, 97, 100, 104, 108, 115, 117, 122, 140, 164, 192, 217, 241, 266, 291, 316, 340, 366, 387, 406, 429, 449, 470, 494, 516, 541, 564, 568, 573]
const LENGTHS[47] = [1, 7, 6, 2, 4, 8, 7, 8, 0, 6, 4, 4, 2, 4, 3, 6, 4, 13, 8, 3, 4, 4, 7, 2, 5, 18, 24, 28, 25, 24, 25, 25, 25, 24, 26, 21, 19, 23, 20, 21, 24, 22, 25, 23, 4, 5, 5]
offset: int
length: int
actualLength: int
ready: bool
failAt: int
reads: int
public fn Select(which: int)
{
offset = OFFSETS[which]
length = LENGTHS[which]
actualLength = length
ready = true
failAt = -1
reads = 0
}
public fn Limit(length: int)
{
this.length = length
}
public fn FailAt(index: int)
{
failAt = index
}
public fn Release()
{
ready = false
}
public fn GetReads() int
{
return reads
}
override fn IsReady() bool
{
return ready
}
override fn GetAvailableLength() int
{
return length
}
override fn TryRead(index: int, value: out byte) PacketDataResult
{
reads = reads + 1
value = 0xFF
if (!ready) {
return PacketDataResult.NotReady
}
if (index < 0 || index >= length || index >= actualLength || index == failAt) {
return PacketDataResult.Invalid
}
value = BYTES[offset + index]
return PacketDataResult.Success
}
}