File Coverage

src/panda/protocol/websocket/FrameHeader.h
Criterion Covered Total %
statement 2 2 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 2 2 100.0


line stmt bran cond sub pod time code
1             #pragma once
2             #include "inc.h"
3             #include
4             #include
5              
6             namespace panda { namespace protocol { namespace websocket {
7              
8             using panda::string;
9             using panda::IteratorPair;
10              
11             struct FrameHeader {
12             Opcode opcode;
13             bool fin;
14             bool rsv1;
15             bool rsv2;
16             bool rsv3;
17             bool has_mask;
18             uint32_t mask;
19             uint64_t length;
20              
21             FrameHeader () : mask(0), length(0), _state(State::FIRST), _len16(0) {}
22              
23             FrameHeader (Opcode opcode, bool final, bool rsv1, bool rsv2, bool rsv3, bool has_mask, uint32_t mask) :
24             opcode(opcode), fin(final), rsv1(rsv1), rsv2(rsv2), rsv3(rsv3), has_mask(has_mask), mask(mask) {}
25              
26 2434           bool is_control () const { return is_control_opcode(opcode); }
27              
28             bool parse (string& buf);
29             string compile (size_t plen) const;
30              
31             void reset () {
32             mask = 0;
33             length = 0;
34             _state = State::FIRST;
35             _len16 = 0;
36             }
37              
38             static bool parse_close_payload (const string& payload, uint16_t& code, string& message);
39             static string compile_close_payload (uint16_t code, const string& message);
40              
41 2876           static bool is_control_opcode (Opcode opcode) { return opcode >= Opcode::CLOSE; }
42              
43              
44             private:
45             enum class State { FIRST, SECOND, LENGTH, MASK, DONE };
46             State _state;
47             uint8_t _slen;
48             uint16_t _len16;
49              
50             string _compile_header (size_t plen);
51              
52             };
53              
54             }}}