Use picohttpparser for responses, too.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4362 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
2023-07-23 01:12:11 +00:00
parent b6dffa8e66
commit 1c52446331
3 changed files with 86 additions and 5 deletions

View File

@ -31,7 +31,7 @@ function parseResponse(data) {
export function fetch(url, options, allowed_hosts) {
let parsed = parseUrl(url);
return new Promise(function(resolve, reject) {
if (allowed_hosts.indexOf(parsed.host) == -1) {
if ((allowed_hosts ?? []).indexOf(parsed.host) == -1) {
throw new Error(`fetch() request to host ${parsed.host} is not allowed.`);
}
let socket = new Socket();
@ -45,6 +45,26 @@ export function fetch(url, options, allowed_hosts) {
newBuffer.set(data, buffer.length);
buffer = newBuffer;
} else {
let result = parseHttpResponse(buffer);
if (!result) {
reject(new Exception('Parse failed.'));
}
if (typeof result == 'number') {
if (result == -2) {
reject('Incomplete request.');
} else {
reject('Bad request.');
}
} else if (typeof result == 'object') {
resolve({
body: buffer.slice(result.bytes_parsed),
status: result.status,
message: result.message,
headers: result.headers,
});
} else {
reject(new Exception('Unexpected parse result.'));
}
resolve(parseResponse(utf8Decode(buffer)));
}
});

View File

@ -473,7 +473,7 @@ function handleConnection(client) {
if (parsing_header)
{
let result = parseHttp(inputBuffer, inputBuffer.length - data.length);
let result = parseHttpRequest(inputBuffer, inputBuffer.length - data.length);
if (result) {
if (typeof result === 'number') {
if (result == -2) {