aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/picohttpparser/request.v
blob: 98667be09e85d87c873016e6fe41fedba593042d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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 := size_t(0)
	path_len := size_t(0)
	minor_version := 0
	num_headers := size_t(max_headers)

	pret := C.phr_parse_request(s.str, s.len, PPchar(&r.method.str), &method_len, PPchar(&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 := size_t(0)
	path_len := size_t(0)

	pret := C.phr_parse_request_path(s.str, s.len, PPchar(&r.method.str), &method_len,
		PPchar(&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 := size_t(0)
	path_len := size_t(0)

	pret := C.phr_parse_request_path_pipeline(s.str, s.len, PPchar(&r.method.str), &method_len,
		PPchar(&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
}