From: Adrián Arroyo Calle Date: Sun, 27 Dec 2020 13:48:05 +0000 (+0100) Subject: File response X-Git-Tag: v0.9.0~160^2~4 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=5428935ab1d29f8d53e56569b170a1d84cb282a5;p=scryer-prolog.git File response --- diff --git a/src/lib/http/http_server.pl b/src/lib/http/http_server.pl index ca401728..d0153fa9 100644 --- a/src/lib/http/http_server.pl +++ b/src/lib/http/http_server.pl @@ -16,8 +16,6 @@ % - Keep-Alive % - Case insensitive headers % - HTML -% - Response from file -% - Remove forall % - Remove ! % - URL Encode @@ -110,6 +108,15 @@ path([Part|Pattern]) --> path([]) --> []. +send_response(Stream, http_response(StatusCode0, file(Filename), Headers)) :- + default(StatusCode0, 200, StatusCode), + format(Stream, "HTTP/1.0 ~d\r\n", [StatusCode]), + overwrite_header("Connection"-"Close", Headers0, Headers1), + write_headers(Stream, Headers1), + format(Stream, "\r\n", []), + open(Filename, read, FileStream, [type(binary)]), + pipe_bytes(FileStream, Stream). + send_response(Stream, http_response(StatusCode0, text(TextResponse), Headers)) :- default(StatusCode0, 200, StatusCode), format(Stream, "HTTP/1.0 ~d\r\n", [StatusCode]), @@ -242,3 +249,13 @@ put_bytes(_, []). put_bytes(Stream, [Byte|Bytes]) :- put_byte(Stream, Byte), put_bytes(Stream, Bytes). + +pipe_bytes(StreamIn, StreamOut) :- + get_byte(StreamIn, Byte), + ( + Byte =\= -1 -> + ( + put_byte(StreamOut, Byte), + pipe_bytes(StreamIn, StreamOut) + ) + ; true).