WebSocket++
0.8.2
C++ websocket client/server library
websocketpp
transport
iostream
base.hpp
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_TRANSPORT_IOSTREAM_BASE_HPP
29
#
define
WEBSOCKETPP_TRANSPORT_IOSTREAM_BASE_HPP
30
31
#
include
<
websocketpp
/
common
/
system_error
.
hpp
>
32
#
include
<
websocketpp
/
common
/
cpp11
.
hpp
>
33
#
include
<
websocketpp
/
common
/
functional
.
hpp
>
34
#
include
<
websocketpp
/
common
/
connection_hdl
.
hpp
>
35
36
#
include
<
websocketpp
/
transport
/
base
/
connection
.
hpp
>
37
38
#
include
<
string
>
39
#
include
<
vector
>
40
41
namespace
websocketpp
{
42
namespace
transport
{
43
/// Transport policy that uses STL iostream for I/O and does not support timers
44
namespace
iostream
{
45
46
/// The type and signature of the callback used by iostream transport to write
47
typedef
lib::function<lib::error_code(
connection_hdl
,
char
const
*,
size_t
)>
48
write_handler
;
49
50
/// The type and signature of the callback used by iostream transport to perform
51
/// vectored writes.
52
/**
53
* If a vectored write handler is not set the standard write handler will be
54
* called multiple times.
55
*/
56
typedef
lib::function<lib::error_code(
connection_hdl
, std::vector<transport::buffer>
const
57
& bufs)>
vector_write_handler
;
58
59
/// The type and signature of the callback used by iostream transport to signal
60
/// a transport shutdown.
61
typedef
lib::function<lib::error_code(
connection_hdl
)>
shutdown_handler
;
62
63
/// iostream transport errors
64
namespace
error
{
65
enum
value
{
66
/// Catch-all error for transport policy errors that don't fit in other
67
/// categories
68
general
= 1,
69
70
/// async_read_at_least call requested more bytes than buffer can store
71
invalid_num_bytes
,
72
73
/// async_read called while another async_read was in progress
74
double_read
,
75
76
/// An operation that requires an output stream was attempted before
77
/// setting one.
78
output_stream_required
,
79
80
/// stream error
81
bad_stream
82
};
83
84
/// iostream transport error category
85
class
category
:
public
lib::error_category {
86
public
:
87
category() {}
88
89
char
const
* name()
const
_WEBSOCKETPP_NOEXCEPT_TOKEN_
{
90
return
"websocketpp.transport.iostream"
;
91
}
92
93
std::string message(
int
value)
const
{
94
switch
(value) {
95
case
general:
96
return
"Generic iostream transport policy error"
;
97
case
invalid_num_bytes:
98
return
"async_read_at_least call requested more bytes than buffer can store"
;
99
case
double_read:
100
return
"Async read already in progress"
;
101
case
output_stream_required:
102
return
"An output stream to be set before async_write can be used"
;
103
case
bad_stream:
104
return
"A stream operation returned ios::bad"
;
105
default
:
106
return
"Unknown"
;
107
}
108
}
109
};
110
111
/// Get a reference to a static copy of the iostream transport error category
112
inline
lib::error_category
const
&
get_category
() {
113
static
category
instance;
114
return
instance;
115
}
116
117
/// Get an error code with the given value and the iostream transport category
118
inline
lib::error_code
make_error_code
(
error
::
value
e) {
119
return
lib::error_code(
static_cast
<
int
>(e),
get_category
(
)
);
120
}
121
122
}
// namespace error
123
}
// namespace iostream
124
}
// namespace transport
125
}
// namespace websocketpp
126
_WEBSOCKETPP_ERROR_CODE_ENUM_NS_START_
127
template
<>
struct
is_error_code_enum<
websocketpp
::
transport
::
iostream
::
error
::
value
>
128
{
129
static
bool
const
value =
true
;
130
};
131
_WEBSOCKETPP_ERROR_CODE_ENUM_NS_END_
132
133
#
endif
// WEBSOCKETPP_TRANSPORT_IOSTREAM_BASE_HPP
Generated by
1.9.1