lib/nitcorn: intro `HttpResponse::files` to append files
authorAlexis Laferrière <alexis.laf@xymus.net>
Sat, 19 Sep 2015 13:03:56 +0000 (09:03 -0400)
committerAlexis Laferrière <alexis.laf@xymus.net>
Sat, 7 Nov 2015 15:40:32 +0000 (10:40 -0500)
Signed-off-by: Alexis Laferrière <alexis.laf@xymus.net>

lib/nitcorn/http_response.nit
lib/nitcorn/reactor.nit

index 523c051..1690864 100644 (file)
@@ -37,12 +37,36 @@ class HttpResponse
        # Body of this response
        var body = "" is writable
 
+       # Files appended after `body`
+       var files = new Array[String]
+
        # Finalize this response before sending it over HTTP
        fun finalize
        do
                # Set the content length if not already set
                if not header.keys.has("Content-Length") then
-                       header["Content-Length"] = body.bytelen.to_s
+                       # Size of the body
+                       var len = body.bytelen
+
+                       # Size of included files
+                       for path in files do
+                               # TODO handle these error cases elsewhere, an error here will result in an invalid response
+                               if not path.file_exists then
+                                       print_error "File does not exists at '{path}'"
+                                       continue
+                               end
+
+                               var stat = path.file_stat
+                               if stat == null then
+                                       print_error "Failed to stat file at '{path}'"
+                                       continue
+                               end
+
+                               len += stat.size
+                       end
+
+                       # Set header
+                       header["Content-Length"] = len.to_s
                end
 
                # Set server ID
index 8124f97..4b13677 100644 (file)
@@ -85,6 +85,8 @@ class HttpServer
 
                # Send back a response
                write response.to_s
+               for path in response.files do write_file path
+
                close
        end
 end