1#ifndef TAMER_WEBSOCKET_HH
2#define TAMER_WEBSOCKET_HH 1
6class websocket_handshake {
8 static bool request(http_message& req, std::string& key);
9 static bool is_request(
const http_message& req);
10 static bool response(http_message& resp,
const http_message& req);
11 static bool is_response(
const http_message& resp,
const std::string& key);
14enum websocket_opcode {
15 WEBSOCKET_CONTINUATION = 0,
23class websocket_message {
25 inline websocket_message();
27 inline bool ok()
const;
28 inline bool operator!()
const;
29 inline enum http_errno error()
const;
31 inline enum websocket_opcode opcode()
const;
32 inline bool text()
const;
33 inline bool binary()
const;
34 inline bool incomplete()
const;
35 inline const std::string& body()
const;
36 inline std::string& body();
38 inline websocket_message& clear();
40 inline websocket_message& error(
enum http_errno e);
41 inline websocket_message& incomplete(
bool c);
42 inline websocket_message& opcode(
enum websocket_opcode o);
43 inline websocket_message& body(std::string body);
44 inline websocket_message& text(std::string body);
45 inline websocket_message& binary(std::string body);
49 unsigned incomplete_ : 4;
56 inline websocket_parser(
enum http_parser_type type);
58 inline bool ok()
const;
59 inline bool operator!()
const;
60 inline bool closed()
const;
62 void receive_any(fd f, websocket_message& ctrl, websocket_message& data, event<int> done);
63 void receive(fd f, event<websocket_message> done);
64 void send(fd f, websocket_message m, event<> done);
65 inline void send_text(fd f, std::string text, event<> done);
66 inline void send_binary(fd f, std::string text, event<> done);
67 void close(fd f, uint16_t code, std::string reason, event<> done);
68 inline void close(fd f, uint16_t code, event<> done);
71 enum http_parser_type type_;
74 std::string close_reason_;
76 class closure__receive_any__2fdR17websocket_messageR17websocket_messageQi_;
77 void receive_any(closure__receive_any__2fdR17websocket_messageR17websocket_messageQi_&);
78 class closure__receive__2fdQ17websocket_message_;
79 void receive(closure__receive__2fdQ17websocket_message_&);
80 class closure__send__2fd17websocket_messageQ_;
81 void send(closure__send__2fd17websocket_messageQ_&);
84inline websocket_message::websocket_message()
85 : error_(0), incomplete_(0), opcode_(0) {
88inline bool websocket_message::ok()
const {
92inline bool websocket_message::operator!()
const {
96inline enum http_errno websocket_message::error()
const {
97 return http_errno(error_);
100inline enum websocket_opcode websocket_message::opcode()
const {
101 return websocket_opcode(opcode_);
104inline bool websocket_message::text()
const {
105 return websocket_opcode(opcode_) == WEBSOCKET_TEXT;
108inline bool websocket_message::binary()
const {
109 return websocket_opcode(opcode_) == WEBSOCKET_BINARY;
112inline bool websocket_message::incomplete()
const {
116inline const std::string& websocket_message::body()
const {
120inline std::string& websocket_message::body() {
124inline websocket_message& websocket_message::clear() {
132inline websocket_message& websocket_message::error(
enum http_errno e) {
137inline websocket_message& websocket_message::incomplete(
bool c) {
142inline websocket_message& websocket_message::opcode(
enum websocket_opcode o) {
147inline websocket_message& websocket_message::body(std::string s) {
148 body_ = TAMER_MOVE(s);
152inline websocket_message& websocket_message::text(std::string s) {
153 opcode_ = WEBSOCKET_TEXT;
154 body_ = TAMER_MOVE(s);
158inline websocket_message& websocket_message::binary(std::string s) {
159 opcode_ = WEBSOCKET_BINARY;
160 body_ = TAMER_MOVE(s);
164inline websocket_parser::websocket_parser(
enum http_parser_type type)
165 : type_(type), closed_(0), close_code_(0) {
168inline bool websocket_parser::ok()
const {
172inline bool websocket_parser::operator!()
const {
176inline bool websocket_parser::closed()
const {
180inline void websocket_parser::send_text(fd f, std::string s, event<> done) {
181 send(f, websocket_message().text(s), done);
184inline void websocket_parser::send_binary(fd f, std::string s, event<> done) {
185 send(f, websocket_message().binary(s), done);
188inline void websocket_parser::close(fd f, uint16_t close_code, event<> done) {
189 close(f, close_code, std::string(), done);
Definition rendezvous.hh:463
Namespace containing public Tamer classes and functions for the Tamer core.
Definition adapter.hh:17