1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/picohttpparser/request.v
2021-10-01 13:49:38 +03:00

67 lines
1.6 KiB
V

module picohttpparser
pub struct Request {
mut:
prev_len int
pub mut:
method string
path string
headers [100]C.phr_header
num_headers u64
body string
}
[inline]
pub fn (mut r Request) parse_request(s string, max_headers int) int {
method_len := usize(0)
path_len := usize(0)
minor_version := 0
num_headers := usize(max_headers)
pret := C.phr_parse_request(&char(s.str), s.len, voidptr(&r.method.str), &method_len,
voidptr(&r.path.str), &path_len, &minor_version, &r.headers[0], &num_headers,
r.prev_len)
if pret > 0 {
unsafe {
r.method = tos(r.method.str, int(method_len))
r.path = tos(r.path.str, int(path_len))
}
r.num_headers = u64(num_headers)
}
r.body = unsafe { (&s.str[pret]).vstring_literal_with_len(s.len - pret) }
r.prev_len = s.len
return pret
}
[inline]
pub fn (mut r Request) parse_request_path(s string) int {
method_len := usize(0)
path_len := usize(0)
pret := C.phr_parse_request_path(&char(s.str), s.len, voidptr(&r.method.str), &method_len,
voidptr(&r.path.str), &path_len)
if pret > 0 {
unsafe {
r.method = tos(r.method.str, int(method_len))
r.path = tos(r.path.str, int(path_len))
}
}
return pret
}
[inline]
pub fn (mut r Request) parse_request_path_pipeline(s string) int {
method_len := usize(0)
path_len := usize(0)
pret := C.phr_parse_request_path_pipeline(&char(s.str), s.len, voidptr(&r.method.str),
&method_len, voidptr(&r.path.str), &path_len)
if pret > 0 {
unsafe {
r.method = tos(r.method.str, int(method_len))
r.path = tos(r.path.str, int(path_len))
}
}
return pret
}