line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
#pragma once |
2
|
|
|
|
|
|
|
#include "error.h" |
3
|
|
|
|
|
|
|
#include "MessageParser.h" |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
namespace panda { namespace protocol { namespace http { |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
struct IRequestFactory { |
8
|
|
|
|
|
|
|
virtual RequestSP new_request () = 0; |
9
|
|
|
|
|
|
|
}; |
10
|
|
|
|
|
|
|
|
11
|
238
|
|
|
|
|
|
struct RequestParser : MessageParser { |
12
|
632
|
|
|
|
|
|
struct Result { |
13
|
|
|
|
|
|
|
RequestSP request; |
14
|
|
|
|
|
|
|
size_t position; |
15
|
|
|
|
|
|
|
State state; |
16
|
|
|
|
|
|
|
std::error_code error; |
17
|
|
|
|
|
|
|
}; |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
struct IFactory { |
20
|
|
|
|
|
|
|
virtual RequestSP new_request () = 0; |
21
|
|
|
|
|
|
|
}; |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
RequestParser (IFactory* = nullptr); |
24
|
|
|
|
|
|
|
RequestParser (RequestParser&&) = default; |
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
Result parse (const string&); |
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
Result parse_shift (string& s) { |
29
|
|
|
|
|
|
|
auto result = parse(s); |
30
|
|
|
|
|
|
|
s.offset(result.position); |
31
|
|
|
|
|
|
|
result.position = 0; |
32
|
|
|
|
|
|
|
return result; |
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
void reset (); |
36
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
private: |
38
|
|
|
|
|
|
|
IFactory* factory; |
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
RequestSP new_request () const { return factory ? factory->new_request() : make_iptr(); } |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
void parse_cookie (const string&); |
43
|
|
|
|
|
|
|
}; |
44
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
}}} |