File Coverage

/usr/local/lib/perl5/site_perl/5.26.1/x86_64-linux/Protocol/HTTP.x/i/panda/protocol/http/ResponseParser.h
Criterion Covered Total %
statement 7 7 100.0
branch 1 2 50.0
condition n/a
subroutine n/a
pod n/a
total 8 9 88.8


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             }}}