| 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
|
214
|
|
|
|
|
|
struct ResponseParser : MessageParser { |
|
8
|
340
|
|
|
|
|
|
struct Result { |
|
9
|
|
|
|
|
|
|
ResponseSP response; |
|
10
|
|
|
|
|
|
|
size_t position; |
|
11
|
|
|
|
|
|
|
State state; |
|
12
|
|
|
|
|
|
|
std::error_code error; |
|
13
|
|
|
|
|
|
|
}; |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
ResponseParser (); |
|
16
|
|
|
|
|
|
|
ResponseParser (ResponseParser&&) = default; |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
const RequestSP& context_request () const { return _context_request; } |
|
19
|
|
|
|
|
|
|
|
|
20
|
105
|
|
|
|
|
|
void set_context_request (const RequestSP& request) { |
|
21
|
105
|
50
|
|
|
|
|
if (_context_request) throw ParserError("can't set another context request until response is done"); |
|
22
|
105
|
|
|
|
|
|
_context_request = request; |
|
23
|
105
|
|
|
|
|
|
} |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
Result parse (const string& buffer); |
|
26
|
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
Result parse_shift (string& s) { |
|
28
|
|
|
|
|
|
|
auto result = parse(s); |
|
29
|
|
|
|
|
|
|
s.offset(result.position); |
|
30
|
|
|
|
|
|
|
result.position = 0; |
|
31
|
|
|
|
|
|
|
return result; |
|
32
|
|
|
|
|
|
|
} |
|
33
|
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
Result eof (); |
|
35
|
|
|
|
|
|
|
|
|
36
|
2
|
|
|
|
|
|
void reset () { _reset(false); } |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
private: |
|
39
|
|
|
|
|
|
|
RequestSP _context_request; |
|
40
|
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
void ensure_response_created () { |
|
42
|
|
|
|
|
|
|
if (!response) { |
|
43
|
|
|
|
|
|
|
if (!_context_request) throw ParserError("Cannot create response as there are no corresponding request"); |
|
44
|
|
|
|
|
|
|
response = _context_request->new_response(); |
|
45
|
|
|
|
|
|
|
message = response; |
|
46
|
|
|
|
|
|
|
} |
|
47
|
|
|
|
|
|
|
} |
|
48
|
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
void _reset (bool keep_context); |
|
50
|
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
void parse_cookie (const string&); |
|
52
|
|
|
|
|
|
|
}; |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
}}} |