Mercurial Hosting > luan
comparison src/luan/modules/http/Http.luan @ 2008:bba3e529e346 default tip
chunked encoding
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 27 Aug 2025 01:14:17 -0600 |
parents | 31f006c64782 |
children |
comparison
equal
deleted
inserted
replaced
2007:408f7dd7e503 | 2008:bba3e529e346 |
---|---|
23 local regex = String.regex or error() | 23 local regex = String.regex or error() |
24 local Time = require "luan:Time.luan" | 24 local Time = require "luan:Time.luan" |
25 local format_time = Time.format or error() | 25 local format_time = Time.format or error() |
26 local parse_time = Time.parse or error() | 26 local parse_time = Time.parse or error() |
27 local Boot = require "luan:Boot.luan" | 27 local Boot = require "luan:Boot.luan" |
28 local Thread = require "luan:Thread.luan" | |
28 local LuanJava = require "java:luan.Luan" | 29 local LuanJava = require "java:luan.Luan" |
29 local Request = require "java:goodjava.webserver.Request" | 30 local Request = require "java:goodjava.webserver.Request" |
30 local Response = require "java:goodjava.webserver.Response" | 31 local Response = require "java:goodjava.webserver.Response" |
31 local ResponseOutputStream = require "java:goodjava.webserver.ResponseOutputStream" | 32 local ResponseOutputStream = require "java:goodjava.webserver.ResponseOutputStream" |
33 local ChunkedOutputStream = require "java:goodjava.webserver.ChunkedOutputStream" | |
32 local Status = require "java:goodjava.webserver.Status" | 34 local Status = require "java:goodjava.webserver.Status" |
33 local ServerSentEvents = require "java:goodjava.webserver.ServerSentEvents" | 35 local ServerSentEvents = require "java:goodjava.webserver.ServerSentEvents" |
34 local OutputStreamWriter = require "java:java.io.OutputStreamWriter" | 36 local OutputStreamWriter = require "java:java.io.OutputStreamWriter" |
35 local HashMap = require "java:java.util.HashMap" | 37 local HashMap = require "java:java.util.HashMap" |
36 local Logging = require "luan:logging/Logging.luan" | 38 local Logging = require "luan:logging/Logging.luan" |
180 response.writer and error "writer already set" | 182 response.writer and error "writer already set" |
181 response.writer = ResponseOutputStream.new(response.java) | 183 response.writer = ResponseOutputStream.new(response.java) |
182 return Boot.binary_writer(response.writer) | 184 return Boot.binary_writer(response.writer) |
183 end | 185 end |
184 | 186 |
187 function response.write_chunked_text(fn) | |
188 response.writer and error "writer already set" | |
189 response.writer = "done" | |
190 local writer = ChunkedOutputStream.new(response.java) | |
191 writer = OutputStreamWriter.new(writer) | |
192 writer = Boot.text_writer(writer) | |
193 Thread.run(function() | |
194 try | |
195 fn(writer) | |
196 finally | |
197 writer.close() | |
198 end | |
199 end) | |
200 end | |
201 | |
202 function response.write_chunked_binary(fn) | |
203 response.writer and error "writer already set" | |
204 response.writer = "done" | |
205 local writer = ChunkedOutputStream.new(response.java) | |
206 writer = Boot.binary_writer(writer) | |
207 Thread.run(function() | |
208 try | |
209 fn(writer) | |
210 finally | |
211 writer.close() | |
212 end | |
213 end) | |
214 end | |
215 | |
185 return response | 216 return response |
186 end | 217 end |
187 | 218 |
188 function Http.finish() -- called only from java | 219 function Http.finish() -- called only from java |
189 local response = Http.response or error() | 220 local response = Http.response or error() |
192 for name, value in pairs(response.headers) do | 223 for name, value in pairs(response.headers) do |
193 type(name)=="string" or "header name must be string" | 224 type(name)=="string" or "header name must be string" |
194 value = LuanJava.toJava(value) | 225 value = LuanJava.toJava(value) |
195 java.headers.put(name,value) | 226 java.headers.put(name,value) |
196 end | 227 end |
197 response.writer and response.writer.close() | 228 response.writer and response.writer~="done" and response.writer.close() |
198 return java | 229 return java |
199 end | 230 end |
200 | 231 |
201 function Http.error_priority(e) | 232 function Http.error_priority(e) |
202 return "error" | 233 return "error" |