Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
error.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 WEBSOCKETPP_ERROR_HPP
29#define WEBSOCKETPP_ERROR_HPP
30
31#include <exception>
32#include <string>
33#include <utility>
34
37
38namespace websocketpp {
39
41typedef std::pair<lib::error_code,std::string> err_str_pair;
42
44namespace error {
148
149
150class category : public lib::error_category {
151public:
153
154 char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {
155 return "websocketpp";
156 }
157
158 std::string message(int value) const {
159 switch(value) {
160 case error::general:
161 return "Generic error";
163 return "send queue full";
165 return "payload violation";
167 return "endpoint not secure";
169 return "endpoint not available";
171 return "invalid uri";
173 return "no outgoing message buffers";
175 return "no incoming message buffers";
177 return "invalid state";
179 return "Unable to extract close code";
181 return "Extracted close code is in an invalid range";
183 return "Extracted close code is in a reserved range";
185 return "Invalid UTF-8";
187 return "Invalid subprotocol";
189 return "Bad Connection";
190 case error::test:
191 return "Test Error";
193 return "Connection creation attempt failed";
195 return "Selected subprotocol was not requested by the client";
197 return "Feature not available on server endpoints";
199 return "Feature not available on client endpoints";
201 return "HTTP connection ended";
203 return "The opening handshake timed out";
205 return "The closing handshake timed out";
207 return "Invalid URI port";
209 return "Async Accept not listening";
211 return "Operation canceled";
212 case error::rejected:
213 return "Connection rejected";
215 return "Upgrade required";
217 return "Invalid version";
219 return "Unsupported version";
221 return "HTTP parse error";
223 return "Extension negotiation failed";
224 default:
225 return "Unknown";
226 }
227 }
228};
229
230inline const lib::error_category& get_category() {
231 static category instance;
232 return instance;
233}
234
235inline lib::error_code make_error_code(error::value e) {
236 return lib::error_code(static_cast<int>(e), get_category());
237}
238
239} // namespace error
240} // namespace websocketpp
241
243template<> struct is_error_code_enum<websocketpp::error::value>
244{
245 static bool const value = true;
246};
248
249namespace websocketpp {
250
251class exception : public std::exception {
252public:
253 exception(std::string const & msg, lib::error_code ec = make_error_code(error::general))
254 : m_msg(msg.empty() ? ec.message() : msg), m_code(ec)
255 {}
256
257 explicit exception(lib::error_code ec)
258 : m_msg(ec.message()), m_code(ec)
259 {}
260
261 ~exception() throw() {}
262
263 virtual char const * what() const throw() {
264 return m_msg.c_str();
265 }
266
267 lib::error_code code() const throw() {
268 return m_code;
269 }
270
271 const std::string m_msg;
272 lib::error_code m_code;
273};
274
275} // namespace websocketpp
276
277#endif // WEBSOCKETPP_ERROR_HPP
char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_
Definition error.hpp:154
std::string message(int value) const
Definition error.hpp:158
lib::error_code code() const
Definition error.hpp:267
virtual char const * what() const
Definition error.hpp:263
const std::string m_msg
Definition error.hpp:271
exception(lib::error_code ec)
Definition error.hpp:257
lib::error_code m_code
Definition error.hpp:272
exception(std::string const &msg, lib::error_code ec=make_error_code(error::general))
Definition error.hpp:253
#define _WEBSOCKETPP_NOEXCEPT_TOKEN_
Definition cpp11.hpp:113
@ general
Catch-all library error.
Definition error.hpp:47
@ unrequested_subprotocol
Selected subprotocol was not requested by the client.
Definition error.hpp:102
@ invalid_port
Invalid port in URI.
Definition error.hpp:120
@ client_only
Attempted to use a client specific feature on a server endpoint.
Definition error.hpp:105
@ http_connection_ended
HTTP connection ended.
Definition error.hpp:111
@ operation_canceled
The requested operation was canceled.
Definition error.hpp:127
@ no_outgoing_buffers
The endpoint is out of outgoing message buffers.
Definition error.hpp:68
@ http_parse_error
HTTP parse error.
Definition error.hpp:143
@ reserved_close_code
Close code is in a reserved range.
Definition error.hpp:80
@ con_creation_failed
Connection creation attempted failed.
Definition error.hpp:99
@ no_incoming_buffers
The endpoint is out of incoming message buffers.
Definition error.hpp:71
@ invalid_state
The connection was in the wrong state for this operation.
Definition error.hpp:74
@ extension_neg_failed
Extension negotiation failed.
Definition error.hpp:146
@ rejected
Connection rejected.
Definition error.hpp:130
@ unsupported_version
Unsupported WebSocket protocol version.
Definition error.hpp:140
@ invalid_utf8
Invalid UTF-8.
Definition error.hpp:86
@ invalid_close_code
Close code is invalid.
Definition error.hpp:83
@ server_only
Attempted to use a server specific feature on a client endpoint.
Definition error.hpp:108
@ endpoint_not_secure
Attempted to open a secure connection with an insecure endpoint.
Definition error.hpp:57
@ close_handshake_timeout
WebSocket close handshake timed out.
Definition error.hpp:117
@ invalid_subprotocol
Invalid subprotocol.
Definition error.hpp:89
@ bad_close_code
Unable to parse close code.
Definition error.hpp:77
@ open_handshake_timeout
WebSocket opening handshake timed out.
Definition error.hpp:114
@ invalid_version
Invalid WebSocket protocol version.
Definition error.hpp:137
@ send_queue_full
send attempted when endpoint write queue was full
Definition error.hpp:50
@ test
Unit testing utility error code.
Definition error.hpp:96
@ invalid_uri
An invalid uri was supplied.
Definition error.hpp:65
lib::error_code make_error_code(error::value e)
Definition error.hpp:235
const lib::error_category & get_category()
Definition error.hpp:230
Namespace for the WebSocket++ project.
Definition base64.hpp:41
std::pair< lib::error_code, std::string > err_str_pair
Combination error code / string type for returning two values.
Definition error.hpp:41
#define value
Definition pkcs11.h:157
#define _WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_
#define _WEBSOCKETPP_ERROR_CODE_ENUM_NS_START_