Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
response.hpp
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014, Peter Thorson. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in the
10 * documentation and/or other materials provided with the distribution.
11 * * Neither the name of the WebSocket++ Project nor the
12 * names of its contributors may be used to endorse or promote products
13 * derived from this software without specific prior written permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL PETER THORSON BE LIABLE FOR ANY
19 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 *
26 */
27
28#ifndef HTTP_PARSER_RESPONSE_HPP
29#define HTTP_PARSER_RESPONSE_HPP
30
31#include <iostream>
32#include <string>
33
35
36namespace websocketpp {
37namespace http {
38namespace parser {
39
41
57class response : public parser {
58public:
59 typedef response type;
60 typedef lib::shared_ptr<type> ptr;
61
63 : m_read(0)
64 , m_buf(lib::make_shared<std::string>())
65 , m_status_code(status_code::uninitialized)
66 , m_state(RESPONSE_LINE) {}
67
69
88 size_t consume(char const * buf, size_t len);
89
91
110 size_t consume(std::istream & s);
111
113
116 bool ready() const {
117 return m_state == DONE;
118 }
119
121 bool headers_ready() const {
122 return (m_state == BODY || m_state == DONE);
123 }
124
126 std::string raw() const;
127
129
139
141
149 void set_status(status_code::value code, std::string const & msg);
150
153 return m_status_code;
154 }
155
157 const std::string& get_status_msg() const {
158 return m_status_msg;
159 }
160private:
162 void process(std::string::iterator begin, std::string::iterator end);
163
165 size_t process_body(char const * buf, size_t len);
166
167 enum state {
168 RESPONSE_LINE = 0,
169 HEADERS = 1,
170 BODY = 2,
171 DONE = 3
172 };
173
174 std::string m_status_msg;
175 size_t m_read;
176 lib::shared_ptr<std::string> m_buf;
177 status_code::value m_status_code;
178 state m_state;
179
180};
181
182} // namespace parser
183} // namespace http
184} // namespace websocketpp
185
187
188#endif // HTTP_PARSER_RESPONSE_HPP
Stores, parses, and manipulates HTTP responses.
Definition response.hpp:57
void set_status(status_code::value code)
Set response status code and message.
Definition response.hpp:191
std::string raw() const
Returns the full raw response.
Definition response.hpp:178
bool headers_ready() const
Returns true if the response headers are fully parsed.
Definition response.hpp:121
lib::shared_ptr< type > ptr
Definition response.hpp:60
bool ready() const
Returns true if the response is ready.
Definition response.hpp:116
const std::string & get_status_msg() const
Return the response status message.
Definition response.hpp:157
status_code::value get_status_code() const
Return the response status code.
Definition response.hpp:152
size_t consume(char const *buf, size_t len)
Process bytes in the input buffer.
Definition response.hpp:42
Definition name.hpp:106
Namespace for the WebSocket++ project.
Definition base64.hpp:41
char * s
size_t len
uint8_t buf[2048]