nctref/tests/HTTPFileServer.nct
2025-06-10 22:07:38 +03:00

69 lines
1.4 KiB
Plaintext

record LibCSockAddrInet6 {
u16 family;
u16 port;
u32 flowinfo;
u8[16] address;
}
@section(".text");
extern u32(u32 domain, u32 type, u32 protocol) socket;
extern u32(u32 sockfd, u8* addr, u32 socklen) bind;
extern u32(u32 sockfd, u32 backlog) listen;
extern u32(u32 sockfd, u8* addr, u32* socklen) accept;
extern u32(u32 sockfd, u8* data, u32 length) write;
extern u32(u32 sockfd, u8* data, u32 length) read;
extern u32(u32 fd) close;
main: u0() -> {
SERV_SOCKET = socket(10, 1, 0);
LibCSockAddrInet6 addr;
addr.family = 10; /* AF_INET6 */
addr.port = 43105; /* 25000 in reversed endian */
addr.flowinfo = 0;
addr.address[0] = 0;
addr.address[1] = 0;
addr.address[2] = 0;
addr.address[3] = 0;
addr.address[4] = 0;
addr.address[5] = 0;
addr.address[6] = 0;
addr.address[7] = 0;
addr.address[8] = 0;
addr.address[9] = 0;
addr.address[10] = 0;
addr.address[11] = 0;
addr.address[12] = 0;
addr.address[13] = 0;
addr.address[14] = 0;
addr.address[15] = 0;
bind(SERV_SOCKET, &addr, @sizeof(addr));
listen(SERV_SOCKET, 16);
loop {
u32 fd = accept(SERV_SOCKET, &addr, &SOCK_LEN);
if(fd == -1) {
continue;
}
read(fd, &BUFFER, @sizeof(BUFFER));
write(fd, &RESPONSE, @sizeof(RESPONSE));
close(fd);
}
return;
};
@section(".data");
u32 SOCK_LEN:;
u32 SERV_SOCKET:;
u8[?] RESPONSE: "HTTP/1.0 200 OK\r\nServer: NectarTestHTTPFileServer\r\nContent-Type: text/plain\r\n\r\nYo.";
u8[1024] BUFFER:;