@@ -83,6 +83,15 @@ struct HTTPRequest(Request):
8383 var disable_redirect_path_normalization : Bool
8484
8585 fn __init__ (inout self , uri : URI ):
86+ self .header = RequestHeader(String(" 127.0.0.1" ))
87+ self .__uri = uri
88+ self .body_raw = Bytes()
89+ self .parsed_uri = False
90+ self .server_is_tls = False
91+ self .timeout = Duration()
92+ self .disable_redirect_path_normalization = False
93+
94+ fn __init__ (inout self , uri : URI , headers : RequestHeader):
8695 self .header = RequestHeader()
8796 self .__uri = uri
8897 self .body_raw = Bytes()
@@ -227,6 +236,48 @@ fn OK(body: Bytes, content_type: String) -> HTTPResponse:
227236 )
228237
229238
239+ fn encode (req : HTTPRequest) raises -> Bytes:
240+ var res_str = String()
241+ var protocol = strHttp11
242+ var current_time = String()
243+
244+ var builder = StringBuilder()
245+
246+ _ = builder.write(req.header.method())
247+ _ = builder.write_string(String(" " ))
248+ _ = builder.write(req.header.request_uri())
249+ _ = builder.write_string(String(" " ))
250+ _ = builder.write(protocol)
251+ _ = builder.write_string(String(" \r\n " ))
252+
253+ _ = builder.write_string(String(" Host: " + req.host()))
254+ _ = builder.write_string(String(" \r\n " ))
255+
256+ if len (req.body_raw) > 0 :
257+ _ = builder.write_string(String(" Content-Type: " ))
258+ _ = builder.write(req.header.content_type())
259+ _ = builder.write_string(String(" \r\n " ))
260+
261+ _ = builder.write_string(String(" Content-Length: " ))
262+ _ = builder.write_string(String(len (req.body_raw)))
263+ _ = builder.write_string(String(" \r\n " ))
264+
265+ _ = builder.write_string(String(" Connection: " ))
266+ if req.connection_close():
267+ _ = builder.write_string(String(" close" ))
268+ else :
269+ _ = builder.write_string(String(" keep-alive" ))
270+ _ = builder.write_string(String(" \r\n " ))
271+
272+ _ = builder.write_string(String(" \r\n " ))
273+ if len (req.body_raw) > 0 :
274+ _ = builder.write_string(String(" \r\n " ))
275+ _ = builder.write(req.body_raw)
276+
277+ # Currently the server is expecting a null terminated string for conn.send().
278+ return builder.get_null_terminated_bytes()
279+
280+
230281fn encode (res : HTTPResponse) raises -> Bytes:
231282 var res_str = String()
232283 var protocol = strHttp11
@@ -236,38 +287,45 @@ fn encode(res: HTTPResponse) raises -> Bytes:
236287 except e:
237288 print (" Error getting current time: " + str (e))
238289 current_time = str (now())
290+
239291 var builder = StringBuilder()
292+
240293 _ = builder.write(protocol)
241294 _ = builder.write_string(String(" " ))
242295 _ = builder.write_string(String(res.header.status_code()))
243296 _ = builder.write_string(String(" " ))
244297 _ = builder.write(res.header.status_message())
245298 _ = builder.write_string(String(" \r\n " ))
299+
246300 _ = builder.write_string(String(" Server: lightbug_http" ))
247301 _ = builder.write_string(String(" \r\n " ))
302+
248303 _ = builder.write_string(String(" Content-Type: " ))
249304 _ = builder.write(res.header.content_type())
305+ _ = builder.write_string(String(" \r\n " ))
306+
250307 # TODO : propagate charset
251308 # res_str += String("; charset=utf-8")
252- _ = builder.write_string(String(" \r\n " ))
253- _ = builder.write_string(String(" Content-Length: " ))
254- # TODO : fix this
255- _ = builder.write_string(String(len (res.body_raw)))
256- _ = builder.write_string(String(" \r\n " ))
309+
310+ if len (res.body_raw) > 0 :
311+ _ = builder.write_string(String(" Content-Length: " ))
312+ _ = builder.write_string(String(len (res.body_raw)))
313+ _ = builder.write_string(String(" \r\n " ))
314+
257315 _ = builder.write_string(String(" Connection: " ))
258316 if res.connection_close():
259317 _ = builder.write_string(String(" close" ))
260318 else :
261319 _ = builder.write_string(String(" keep-alive" ))
262320 _ = builder.write_string(String(" \r\n " ))
321+
263322 _ = builder.write_string(String(" Date: " ))
264323 _ = builder.write_string(String(current_time))
265- _ = builder.write_string(String(" \r\n " ))
266- _ = builder.write_string(String(" \r\n " ))
267- # _ = builder.write_string("<div>hello frend</div>")
268- # _ = builder.write(String("\r\n"))
269- # _ = builder.write(res.body())
270- _ = builder.write(res.body_raw)
324+
325+ if len (res.body_raw) > 0 :
326+ _ = builder.write_string(String(" \r\n " ))
327+ _ = builder.write_string(String(" \r\n " ))
328+ _ = builder.write(res.body_raw)
271329
272330 # Currently the server is expecting a null terminated string for conn.send().
273331 return builder.get_null_terminated_bytes()
0 commit comments