@@ -10,7 +10,7 @@ from lightbug_http.io.bytes import Bytes
1010from lightbug_http.error import ErrorHandler
1111from lightbug_http.strings import next_line, NetworkType
1212
13-
13+ @value
1414struct SysServer :
1515 """
1616 A Mojo-based server that accept incoming requests and delivers HTTP services.
@@ -19,6 +19,7 @@ struct SysServer:
1919 var error_handler : ErrorHandler
2020
2121 var name : String
22+ var __address : String
2223 var max_concurrent_connections : Int
2324 var max_requests_per_connection : Int
2425
@@ -30,6 +31,17 @@ struct SysServer:
3031 fn __init__ (inout self ) raises :
3132 self .error_handler = ErrorHandler()
3233 self .name = " lightbug_http"
34+ self .__address = " 127.0.0.1"
35+ self .max_concurrent_connections = 1000
36+ self .max_requests_per_connection = 0
37+ self .max_request_body_size = 0
38+ self .tcp_keep_alive = False
39+ self .ln = SysListener()
40+
41+ fn __init__ (inout self , own_address : String) raises :
42+ self .error_handler = ErrorHandler()
43+ self .name = " lightbug_http"
44+ self .__address = own_address
3345 self .max_concurrent_connections = 1000
3446 self .max_requests_per_connection = 0
3547 self .max_request_body_size = 0
@@ -39,11 +51,19 @@ struct SysServer:
3951 fn __init__ (inout self , error_handler : ErrorHandler) raises :
4052 self .error_handler = error_handler
4153 self .name = " lightbug_http"
54+ self .__address = " 127.0.0.1"
4255 self .max_concurrent_connections = 1000
4356 self .max_requests_per_connection = 0
4457 self .max_request_body_size = 0
4558 self .tcp_keep_alive = False
4659 self .ln = SysListener()
60+
61+ fn address (self ) -> String:
62+ return self .__address
63+
64+ fn set_address (inout self , own_address : String) -> Self:
65+ self .__address = own_address
66+ return self
4767
4868 fn get_concurrency (self ) -> Int:
4969 """
@@ -70,6 +90,7 @@ struct SysServer:
7090 """
7191 var __net = SysNet()
7292 var listener = __net.listen(NetworkType.tcp4.value, address)
93+ _ = self .set_address(address)
7394 self .serve(listener, handler)
7495
7596 fn serve [T : HTTPService](inout self , ln : SysListener, handler : T) raises -> None :
@@ -98,20 +119,20 @@ struct SysServer:
98119 var headers_and_body = next_line(request.rest, " \n\n " )
99120 var request_headers = headers_and_body.first_line
100121 var request_body = headers_and_body.rest
101- var uri = URI(request.first_line)
102- try :
103- uri.parse()
104- except e:
105- conn.close()
106- raise Error(" Failed to parse request line:" + e.__str__ ())
107-
108122 var header = RequestHeader(request_headers._buffer)
109123 try :
110124 header.parse(request.first_line)
111125 except e:
112126 conn.close()
113127 raise Error(" Failed to parse request header: " + e.__str__ ())
114128
129+ var uri = URI(self .address() + String(header.request_uri()))
130+ try :
131+ uri.parse()
132+ except e:
133+ conn.close()
134+ raise Error(" Failed to parse request line:" + e.__str__ ())
135+
115136 if header.content_length() != 0 and header.content_length() != (len (request_body) + 1 ):
116137 var remaining_body = Bytes()
117138 var remaining_len = header.content_length() - len (request_body + 1 )
0 commit comments