Skip to content

Commit

Permalink
pass uri directly
Browse files Browse the repository at this point in the history
  • Loading branch information
saviorand committed May 25, 2024
1 parent 899ee77 commit bc99c93
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 11 deletions.
2 changes: 1 addition & 1 deletion lightbug_http/header.mojo
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ struct RequestHeader:
if proto != strHttp11:
proto_str = proto

var request_uri = rest_of_request_line[:n]
var request_uri = rest_of_request_line[:n + 1]

_ = self.set_method(method)
_ = self.set_protocol(proto_str)
Expand Down
37 changes: 29 additions & 8 deletions lightbug_http/sys/server.mojo
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ from lightbug_http.io.bytes import Bytes
from lightbug_http.error import ErrorHandler
from lightbug_http.strings import next_line, NetworkType


@value
struct SysServer:
"""
A Mojo-based server that accept incoming requests and delivers HTTP services.
Expand All @@ -19,6 +19,7 @@ struct SysServer:
var error_handler: ErrorHandler

var name: String
var __address: String
var max_concurrent_connections: Int
var max_requests_per_connection: Int

Expand All @@ -30,6 +31,17 @@ struct SysServer:
fn __init__(inout self) raises:
self.error_handler = ErrorHandler()
self.name = "lightbug_http"
self.__address = "127.0.0.1"
self.max_concurrent_connections = 1000
self.max_requests_per_connection = 0
self.max_request_body_size = 0
self.tcp_keep_alive = False
self.ln = SysListener()

fn __init__(inout self, own_address: String) raises:
self.error_handler = ErrorHandler()
self.name = "lightbug_http"
self.__address = own_address
self.max_concurrent_connections = 1000
self.max_requests_per_connection = 0
self.max_request_body_size = 0
Expand All @@ -39,11 +51,19 @@ struct SysServer:
fn __init__(inout self, error_handler: ErrorHandler) raises:
self.error_handler = error_handler
self.name = "lightbug_http"
self.__address = "127.0.0.1"
self.max_concurrent_connections = 1000
self.max_requests_per_connection = 0
self.max_request_body_size = 0
self.tcp_keep_alive = False
self.ln = SysListener()

fn address(self) -> String:
return self.__address

fn set_address(inout self, own_address: String) -> Self:
self.__address = own_address
return self

fn get_concurrency(self) -> Int:
"""
Expand All @@ -70,6 +90,7 @@ struct SysServer:
"""
var __net = SysNet()
var listener = __net.listen(NetworkType.tcp4.value, address)
_ = self.set_address(address)
self.serve(listener, handler)

fn serve[T: HTTPService](inout self, ln: SysListener, handler: T) raises -> None:
Expand Down Expand Up @@ -98,20 +119,20 @@ struct SysServer:
var headers_and_body = next_line(request.rest, "\n\n")
var request_headers = headers_and_body.first_line
var request_body = headers_and_body.rest
var uri = URI(request.first_line)
try:
uri.parse()
except e:
conn.close()
raise Error("Failed to parse request line:" + e.__str__())

var header = RequestHeader(request_headers._buffer)
try:
header.parse(request.first_line)
except e:
conn.close()
raise Error("Failed to parse request header: " + e.__str__())

var uri = URI(self.address() + String(header.request_uri()))
try:
uri.parse()
except e:
conn.close()
raise Error("Failed to parse request line:" + e.__str__())

if header.content_length() != 0 and header.content_length() != (len(request_body) + 1):
var remaining_body = Bytes()
var remaining_len = header.content_length() - len(request_body + 1)
Expand Down
3 changes: 1 addition & 2 deletions lightbug_http/uri.mojo
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,7 @@ struct URI:
is_https = True
remainder_uri = raw_uri[proto_end + 3:]
else:
raise Error("Invalid URI: Missing protocol")

remainder_uri = raw_uri
# Parse the host and optional port
var path_start = remainder_uri.find("/")
var host_and_port: String
Expand Down

0 comments on commit bc99c93

Please sign in to comment.