2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
28#ifndef WEBSOCKETPP_TRANSPORT_DEBUG_CON_HPP
29#define WEBSOCKETPP_TRANSPORT_DEBUG_CON_HPP
31#include <websocketpp/transport/debug/base.hpp>
33#include <websocketpp/transport/base/connection.hpp>
35#include <websocketpp/uri.hpp>
36#include <websocketpp/logger/levels.hpp>
38#include <websocketpp/common/connection_hdl.hpp>
39#include <websocketpp/common/memory.hpp>
40#include <websocketpp/common/platforms.hpp>
55template <
typename config>
74 typedef lib::shared_ptr<
timer> timer_ptr;
76 explicit connection(
bool is_server,
const lib::shared_ptr<
alog_type> & alog,
const lib::shared_ptr<
elog_type> & elog)
77 : m_reading(
false), m_is_server(is_server), m_alog(alog), m_elog(elog)
84 return type::shared_from_this();
89
90
91
92
93
94
99
100
101
102
109
110
111
112
113
114
115
116
117
118
123
124
125
126
127
128
129
130
131
132
133
134
139
140
141
142
143
144
145
147 return "unknown (debug transport)";
152
153
155 return connection_hdl();
160
161
162
163
164
165
166
167
170 m_timer_handler = handler;
176
177
178
179
180
181
182
183
184
185
186
187
188
189
191 size_t total_read = 0;
192 size_t temp_read = 0;
195 temp_read =
this->read_some_impl(buf+total_read,len-total_read);
196 total_read += temp_read;
197 }
while (temp_read != 0 && total_read < len);
203 void expire_timer(lib::error_code
const & ec) {
207 void fullfil_write() {
208 m_write_handler(lib::error_code());
213
214
215
216
219 handler(lib::error_code());
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
250 s <<
"debug_con async_read_at_least: " << num_bytes;
253 if (num_bytes > len) {
258 if (m_reading ==
true) {
263 if (num_bytes == 0 || len == 0) {
264 handler(lib::error_code(),size_t(0));
270 m_bytes_needed = num_bytes;
271 m_read_handler = handler;
278
279
280
281
282
283
284
285
286
287
290 m_write_handler = handler;
295
296
297
298
299
300
301
302
303
306 m_write_handler = handler;
311
312
317
318
319
320
321
322
323
324
325
328 return lib::error_code();
333
334
336 handler(lib::error_code());
339 size_t read_some_impl(
char const * buf, size_t len) {
347 size_t bytes_to_copy = (std::min)(len,m_len-m_cursor);
349 std::copy(buf,buf+bytes_to_copy,m_buf+m_cursor);
351 m_cursor += bytes_to_copy;
353 if (m_cursor >= m_bytes_needed) {
357 return bytes_to_copy;
362
363
364
365
366
367
368
369
370
371
372
373
374
375
380 m_read_handler = read_handler();
382 handler(ec,m_cursor);
390 size_t m_bytes_needed;
400 bool const m_is_server;
404 std::string m_remote_endpoint;
ptr get_shared()
Get a shared pointer to this component.
void complete_read(lib::error_code const &ec)
Signal that a requested read is complete.
void init(init_handler handler)
Initialize the connection transport.
connection_hdl get_handle() const
Get the connection handle.
void set_uri(uri_ptr)
Set uri hook.
size_t read_all(char const *buf, size_t len)
Manual input supply (read all)
void set_remote_endpoint(std::string)
Set human readable remote endpoint address.
config::concurrency_type concurrency_type
transport concurrency policy
bool is_secure() const
Tests whether or not the underlying transport is secure.
lib::error_code dispatch(dispatch_handler handler)
Call given handler back within the transport's event system (if present)
timer_ptr set_timer(long, timer_handler handler)
Call back a function after a period of time.
connection< config > type
Type of this connection transport component.
void set_secure(bool)
Set whether or not this connection is secure.
config::elog_type elog_type
Type of this transport's error logging policy.
std::string get_remote_endpoint() const
Get human readable remote endpoint address.
config::alog_type alog_type
Type of this transport's access logging policy.
void async_read_at_least(size_t num_bytes, char *buf, size_t len, read_handler handler)
Initiate an async_read for at least num_bytes bytes into buf.
void async_shutdown(shutdown_handler handler)
Perform cleanup on socket shutdown_handler.
void async_write(char const *, size_t, write_handler handler)
Asyncronous Transport Write.
lib::shared_ptr< type > ptr
Type of a shared pointer to this connection transport component.
void async_write(std::vector< buffer > const &, write_handler handler)
Asyncronous Transport Write (scatter-gather)
void set_handle(connection_hdl)
Set Connection Handle.
lib::error_code make_error_code(error::value e)
Get an error code with the given value and the debug transport category.
Transport policies provide network connectivity and timers.
lib::function< void(lib::error_code const &, size_t)> read_handler
The type and signature of the callback passed to the read method.
lib::function< void()> dispatch_handler
The type and signature of the callback passed to the dispatch method.
lib::function< void(lib::error_code const &)> timer_handler
The type and signature of the callback passed to the read method.
lib::function< void(lib::error_code const &)> write_handler
The type and signature of the callback passed to the write method.
lib::function< void(lib::error_code const &)> init_handler
The type and signature of the callback passed to the init hook.
lib::function< void(lib::error_code const &)> shutdown_handler
The type and signature of the callback passed to the shutdown method.
Namespace for the WebSocket++ project.
lib::weak_ptr< void > connection_hdl
A handle to uniquely identify a connection.
lib::shared_ptr< uri > uri_ptr
Pointer to a URI.
Package of log levels for logging access events.
static level const devel
Development messages (warning: very chatty)
Package of log levels for logging errors.
static level const devel
Low level debugging information (warning: very chatty)