63 lines
2.0 KiB
C
63 lines
2.0 KiB
C
#define DJSTD_BASIC_ENTRY
|
|
#include "core.c"
|
|
|
|
int djstd_entry(Arena *arena, StringList args) {
|
|
Socket sock = socketConnect(arena, (SocketConnectInfo){
|
|
.address="dlh.mediasuite.zii.aero",
|
|
.port=443,
|
|
.blocking=true
|
|
});
|
|
|
|
println("%d", sock.closed);
|
|
string newLine = s("\r\n");
|
|
string lines[] = {
|
|
s("GET / HTTP/1.1"),
|
|
s("Host: localhost"),
|
|
};
|
|
|
|
for (EachInArray(lines, i)) {
|
|
socketWriteStr(&sock, lines[i]);
|
|
socketWriteStr(&sock, newLine);
|
|
}
|
|
socketWriteStr(&sock, newLine);
|
|
|
|
StringList body = EmptyList();
|
|
bool streamingBody = false;
|
|
|
|
Forever {
|
|
StringResult response = socketReadStr(arena, &sock);
|
|
if (response.valid) {
|
|
if (streamingBody) {
|
|
if (body.capacity - body.length >= response.result.length) {
|
|
ListAppend(body, response.result);
|
|
}
|
|
} else {
|
|
StringList lines = strSplit(arena, s("\r\n"), response.result);
|
|
for (EachEl(lines, string, line)) {
|
|
if (body.capacity > 0 && strEql(*line, s(""))) {
|
|
streamingBody = true;
|
|
} else if (streamingBody && (body.capacity - body.length) >= line->length) {
|
|
ListAppend(body, *line);
|
|
} else {
|
|
StringList split = strSplit(arena, s("Content-Length: "), *line);
|
|
if (split.length > 1) {
|
|
Int32Result lengthResult = parsePositiveInt(split.data[1]);
|
|
if (lengthResult.valid) {
|
|
body = PushList(arena, StringList, lengthResult.result);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (streamingBody == true && body.length == body.capacity) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
printStr(strListJoin(arena, body));
|
|
|
|
return 0;
|
|
}
|