66 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			V
		
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.5 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 := 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
 | |
| }
 |