@@ -6,7 +6,7 @@ from lightbug_http._logger import logger
6
6
from lightbug_http.connection import NoTLSListener, default_buffer_size, TCPConnection, ListenConfig
7
7
from lightbug_http.socket import Socket
8
8
from lightbug_http.http import HTTPRequest, encode
9
- from lightbug_http.http.common_response import InternalError
9
+ from lightbug_http.http.common_response import InternalError, BadRequest
10
10
from lightbug_http.uri import URI
11
11
from lightbug_http.header import Headers
12
12
from lightbug_http.service import HTTPService
@@ -159,47 +159,50 @@ struct Server(Movable):
159
159
if String(e) == " EOF" :
160
160
return
161
161
else :
162
- logger.error(e )
163
- raise Error( " Server.serve_connection: Failed to read request " )
162
+ logger.error(" Server.serve_connection: Failed to read request. Expected EOF, got: " , String(e) )
163
+ return
164
164
165
165
var request : HTTPRequest
166
166
try :
167
167
request = HTTPRequest.from_bytes(self .address(), max_request_body_size, request_buffer)
168
+ var response : HTTPResponse
169
+ var close_connection = (not self .tcp_keep_alive) or request.connection_close()
170
+ try :
171
+ response = handler.func(request)
172
+ if close_connection:
173
+ response.set_connection_close()
174
+ logger.debug(
175
+ conn.socket._remote_address.ip,
176
+ String(conn.socket._remote_address.port),
177
+ request.method,
178
+ request.uri.path,
179
+ response.status_code,
180
+ )
181
+ try :
182
+ _ = conn.write(encode(response^ ))
183
+ except e:
184
+ logger.error(" Failed to write encoded response to the connection:" , String(e))
185
+ conn.teardown()
186
+ break
187
+
188
+ if close_connection:
189
+ conn.teardown()
190
+ break
191
+ except e:
192
+ logger.error(" Handler error:" , String(e))
193
+ if not conn.is_closed():
194
+ try :
195
+ _ = conn.write(encode(InternalError()))
196
+ except e:
197
+ raise Error(" Failed to send InternalError response" )
198
+ finally :
199
+ conn.teardown()
200
+ return
168
201
except e:
169
202
logger.error(" Failed to parse HTTPRequest:" , String(e))
170
- raise Error(" Server.serve_connection: Failed to parse request" )
171
-
172
- var response : HTTPResponse
173
- var close_connection = (not self .tcp_keep_alive) or request.connection_close()
174
- try :
175
- response = handler.func(request)
176
- if close_connection:
177
- response.set_connection_close()
178
- logger.debug(
179
- conn.socket._remote_address.ip,
180
- String(conn.socket._remote_address.port),
181
- request.method,
182
- request.uri.path,
183
- response.status_code,
184
- )
185
203
try :
186
- _ = conn.write(encode(response ^ ))
204
+ _ = conn.write(encode(BadRequest() ))
187
205
except e:
188
- logger.error(" Failed to write encoded response to the connection:" , String(e))
189
- conn.teardown()
190
- break
191
-
192
- if close_connection:
206
+ logger.error(" Failed to write BadRequest response to the connection:" , String(e))
193
207
conn.teardown()
194
208
break
195
- except e:
196
- logger.error(" Handler error:" , String(e))
197
-
198
- if not conn.is_closed():
199
- try :
200
- _ = conn.write(encode(InternalError()))
201
- except e:
202
- raise Error(" Failed to send InternalError response" )
203
- finally :
204
- conn.teardown()
205
- return
0 commit comments