NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
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 
36 namespace websocketpp {
37 namespace http {
38 namespace parser {
39 
41 
57 class response : public parser {
58 public:
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 
138  void set_status(status_code::value code);
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  }
160 private:
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
bool ready() const
Returns true if the response is ready.
Definition: response.hpp:116
lib::shared_ptr< type > ptr
Definition: response.hpp:60
STL namespace.
status_code::value get_status_code() const
Return the response status code.
Definition: response.hpp:152
Stores, parses, and manipulates HTTP responses.
Definition: response.hpp:57
std::string raw() const
Returns the full raw response.
Definition: response.hpp:178
Namespace for the WebSocket++ project.
Definition: base64.hpp:41
void set_status(status_code::value code)
Set response status code and message.
Definition: response.hpp:191
size_t consume(char const *buf, size_t len)
Process bytes in the input buffer.
Definition: response.hpp:42
bool headers_ready() const
Returns true if the response headers are fully parsed.
Definition: response.hpp:121
const std::string & get_status_msg() const
Return the response status message.
Definition: response.hpp:157