28 #ifndef WEBSOCKETPP_TRANSPORT_DEBUG_CON_HPP 29 #define WEBSOCKETPP_TRANSPORT_DEBUG_CON_HPP 55 template <
typename config>
56 class connection :
public lib::enable_shared_from_this< connection<config> > {
61 typedef lib::shared_ptr<type>
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();
147 return "unknown (debug transport)";
170 m_timer_handler = handler;
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);
208 m_write_handler(lib::error_code());
219 handler(lib::error_code());
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;
290 m_write_handler = handler;
306 m_write_handler = handler;
328 return lib::error_code();
336 handler(lib::error_code());
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) {
354 complete_read(lib::error_code());
357 return bytes_to_copy;
382 handler(ec,m_cursor);
390 size_t m_bytes_needed;
400 bool const m_is_server;
402 lib::shared_ptr<alog_type> m_alog;
403 lib::shared_ptr<elog_type> m_elog;
404 std::string m_remote_endpoint;
412 #endif // WEBSOCKETPP_TRANSPORT_DEBUG_CON_HPP ptr get_shared()
Get a shared pointer to this component.
config::concurrency_type concurrency_type
transport concurrency policy
lib::shared_ptr< type > ptr
Type of a shared pointer to this connection transport component.
void set_remote_endpoint(std::string)
Set human readable remote endpoint address.
void set_handle(connection_hdl)
Set Connection Handle.
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.
size_t read_some_impl(char const *buf, size_t len)
lib::function< void(lib::error_code const &)> write_handler
The type and signature of the callback passed to the write method.
static level const devel
Low level debugging information (warning: very chatty)
lib::weak_ptr< void > connection_hdl
A handle to uniquely identify a connection.
void expire_timer(lib::error_code const &ec)
A fake lock guard implementation that does nothing.
lib::function< void(lib::error_code const &, size_t)> read_handler
The type and signature of the callback passed to the read method.
config::alog_type alog_type
Type of this transport's access logging policy.
A fake mutex implementation that does nothing.
concurrency_type::scoped_lock_type scoped_lock_type
void complete_read(lib::error_code const &ec)
Signal that a requested read is complete.
static level const devel
Development messages (warning: very chatty)
void async_write(char const *, size_t, write_handler handler)
Asyncronous Transport Write.
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.
config::elog_type elog_type
Type of this transport's error logging policy.
void set_secure(bool)
Set whether or not this connection is secure.
lib::function< void()> dispatch_handler
The type and signature of the callback passed to the dispatch method.
void set_uri(uri_ptr)
Set uri hook.
lib::function< void(lib::error_code const &)> timer_handler
The type and signature of the callback passed to the read method.
void init(init_handler handler)
Initialize the connection transport.
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::function< void(lib::error_code const &)> init_handler
The type and signature of the callback passed to the init hook.
Empty timer class to stub out for timer functionality that stub transport doesn't support...
Stub concurrency policy that implements the interface using no-ops.
connection(bool is_server, const lib::shared_ptr< alog_type > &alog, const lib::shared_ptr< elog_type > &elog)
lib::shared_ptr< uri > uri_ptr
Pointer to a URI.
concurrency_type::mutex_type mutex_type
lib::error_code dispatch(dispatch_handler handler)
Call given handler back within the transport's event system (if present)
void async_write(std::vector< buffer > const &, write_handler handler)
Asyncronous Transport Write (scatter-gather)
void async_shutdown(shutdown_handler handler)
Perform cleanup on socket shutdown_handler.
bool is_secure() const
Tests whether or not the underlying transport is secure.
lib::error_code make_error_code(error::value e)
connection_hdl get_handle() const
Get the connection handle.
lib::shared_ptr< timer > timer_ptr
Stub logger that ignores all input.
std::string get_remote_endpoint() const
Get human readable remote endpoint address.
size_t read_all(char const *buf, size_t len)
Manual input supply (read all)