WebSocket++  0.8.0-dev
C++ websocket client/server library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
Classes | Public Types | Public Member Functions | Protected Member Functions | Friends | List of all members
websocketpp::transport::asio::connection< config > Class Template Reference

Asio based connection transport component. More...

#include <connection.hpp>

Inheritance diagram for websocketpp::transport::asio::connection< config >:

Public Types

typedef connection< config > type
 Type of this connection transport component.
 
typedef lib::shared_ptr< typeptr
 Type of a shared pointer to this connection transport component.
 
typedef
config::socket_type::socket_con_type 
socket_con_type
 Type of the socket connection component.
 
typedef socket_con_type::ptr socket_con_ptr
 Type of a shared pointer to the socket connection component.
 
typedef config::alog_type alog_type
 Type of this transport's access logging policy.
 
typedef config::elog_type elog_type
 Type of this transport's error logging policy.
 
typedef config::request_type request_type
 
typedef request_type::ptr request_ptr
 
typedef config::response_type response_type
 
typedef response_type::ptr response_ptr
 
typedef lib::asio::io_service * io_service_ptr
 Type of a pointer to the Asio io_service being used.
 
typedef lib::shared_ptr
< lib::asio::io_service::strand > 
strand_ptr
 Type of a pointer to the Asio io_service::strand being used.
 
typedef lib::shared_ptr
< lib::asio::steady_timer > 
timer_ptr
 Type of a pointer to the Asio timer class.
 

Public Member Functions

 connection (bool is_server, const lib::shared_ptr< alog_type > &alog, const lib::shared_ptr< elog_type > &elog)
 
ptr get_shared ()
 Get a shared pointer to this component.
 
bool is_secure () const
 
void set_uri (uri_ptr u)
 Set uri hook. More...
 
void set_tcp_pre_init_handler (tcp_init_handler h)
 Sets the tcp pre init handler. More...
 
void set_tcp_init_handler (tcp_init_handler h)
 Sets the tcp pre init handler (deprecated) More...
 
void set_tcp_post_init_handler (tcp_init_handler h)
 Sets the tcp post init handler. More...
 
void set_proxy (std::string const &uri, lib::error_code &ec)
 Set the proxy to connect through (exception free) More...
 
void set_proxy (std::string const &uri)
 Set the proxy to connect through (exception)
 
void set_proxy_basic_auth (std::string const &username, std::string const &password, lib::error_code &ec)
 Set the basic auth credentials to use (exception free) More...
 
void set_proxy_basic_auth (std::string const &username, std::string const &password)
 Set the basic auth credentials to use (exception)
 
void set_proxy_timeout (long duration, lib::error_code &ec)
 Set the proxy timeout duration (exception free) More...
 
void set_proxy_timeout (long duration)
 Set the proxy timeout duration (exception)
 
std::string const & get_proxy () const
 
std::string get_remote_endpoint () const
 Get the remote endpoint address. More...
 
connection_hdl get_handle () const
 Get the connection handle.
 
timer_ptr set_timer (long duration, timer_handler callback)
 Call back a function after a period of time. More...
 
void handle_timer (timer_ptr, timer_handler callback, lib::asio::error_code const &ec)
 Timer callback. More...
 
strand_ptr get_strand ()
 Get a pointer to this connection's strand.
 
lib::asio::error_code get_transport_ec () const
 Get the internal transport error code for a closed/failed connection. More...
 
void test ()
 Initialize transport for reading. More...
 

Protected Member Functions

void init (init_handler callback)
 
lib::error_code proxy_init (std::string const &authority)
 initialize the proxy buffers and http parsers More...
 
lib::error_code init_asio (io_service_ptr io_service)
 Finish constructing the transport. More...
 
void handle_pre_init (init_handler callback, lib::error_code const &ec)
 
void post_init (init_handler callback)
 
void handle_post_init_timeout (timer_ptr, init_handler callback, lib::error_code const &ec)
 Post init timeout callback. More...
 
void handle_post_init (timer_ptr post_timer, init_handler callback, lib::error_code const &ec)
 Post init timeout callback. More...
 
void proxy_write (init_handler callback)
 
void handle_proxy_timeout (init_handler callback, lib::error_code const &ec)
 
void handle_proxy_write (init_handler callback, lib::asio::error_code const &ec)
 
void proxy_read (init_handler callback)
 
void handle_proxy_read (init_handler callback, lib::asio::error_code const &ec, size_t)
 Proxy read callback. More...
 
void async_read_at_least (size_t num_bytes, char *buf, size_t len, read_handler handler)
 read at least num_bytes bytes into buf and then call handler.
 
void handle_async_read (read_handler handler, lib::asio::error_code const &ec, size_t bytes_transferred)
 
void async_write (const char *buf, size_t len, write_handler handler)
 Initiate a potentially asyncronous write of the given buffer.
 
void async_write (std::vector< buffer > const &bufs, write_handler handler)
 Initiate a potentially asyncronous write of the given buffers.
 
void handle_async_write (write_handler handler, lib::asio::error_code const &ec, size_t)
 Async write callback. More...
 
void set_handle (connection_hdl hdl)
 Set Connection Handle. More...
 
lib::error_code interrupt (interrupt_handler handler)
 Trigger the on_interrupt handler. More...
 
lib::error_code dispatch (dispatch_handler handler)
 
void async_shutdown (shutdown_handler callback)
 close and clean up the underlying socket
 
void handle_async_shutdown_timeout (timer_ptr, init_handler callback, lib::error_code const &ec)
 Async shutdown timeout handler. More...
 
void handle_async_shutdown (timer_ptr shutdown_timer, shutdown_handler callback, lib::asio::error_code const &ec)
 
void cancel_socket_checked ()
 Cancel the underlying socket and log any errors.
 

Friends

class endpoint< config >
 

Detailed Description

template<typename config>
class websocketpp::transport::asio::connection< config >

Asio based connection transport component.

transport::asio::connection implements a connection transport component using Asio that works with the transport::asio::endpoint endpoint transport component.

Definition at line 67 of file connection.hpp.

Member Function Documentation

template<typename config >
std::string websocketpp::transport::asio::connection< config >::get_remote_endpoint ( ) const
inline

Get the remote endpoint address.

The iostream transport has no information about the ultimate remote endpoint. It will return the string "iostream transport". To indicate this.

TODO: allow user settable remote endpoint addresses if this seems useful

Returns
A string identifying the address of the remote endpoint

Definition at line 281 of file connection.hpp.

template<typename config >
lib::asio::error_code websocketpp::transport::asio::connection< config >::get_transport_ec ( ) const
inline

Get the internal transport error code for a closed/failed connection.

Retrieves a machine readable detailed error code indicating the reason that the connection was closed or failed. Valid only after the close or fail handler is called.

Primarily used if you are using mismatched asio / system_error implementations such as boost::asio with std::system_error. In these cases the transport error type is different than the library error type and some WebSocket++ functions that return transport errors via the library error code type will be coerced into a catch all pass_through or tls_error error. This method will return the original machine readable transport error in the native type.

Since
0.7.0
Returns
Error code indicating the reason the connection was closed or failed

Definition at line 388 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_async_shutdown_timeout ( timer_ptr  ,
init_handler  callback,
lib::error_code const &  ec 
)
inlineprotected

Async shutdown timeout handler.

Parameters
shutdown_timerA pointer to the timer to keep it in scope
callbackThe function to call back
ecThe status code

Definition at line 1094 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_async_write ( write_handler  handler,
lib::asio::error_code const &  ec,
size_t   
)
inlineprotected

Async write callback.

Parameters
ecThe status code
bytes_transferredThe number of bytes read

Definition at line 1004 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_post_init ( timer_ptr  post_timer,
init_handler  callback,
lib::error_code const &  ec 
)
inlineprotected

Post init timeout callback.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

Parameters
post_timerPointer to the timer in question
callbackThe function to call back
ecThe status code

Definition at line 596 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_post_init_timeout ( timer_ptr  ,
init_handler  callback,
lib::error_code const &  ec 
)
inlineprotected

Post init timeout callback.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

Parameters
post_timerPointer to the timer in question
callbackThe function to call back
ecThe status code

Definition at line 560 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_proxy_read ( init_handler  callback,
lib::asio::error_code const &  ec,
size_t   
)
inlineprotected

Proxy read callback.

Parameters
init_handlerThe function to call back
ecThe status code
bytes_transferredThe number of bytes read

Definition at line 766 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::handle_timer ( timer_ptr  ,
timer_handler  callback,
lib::asio::error_code const &  ec 
)
inline

Timer callback.

The timer pointer is included to ensure the timer isn't destroyed until after it has expired.

TODO: candidate for protected status

Parameters
post_timerPointer to the timer in question
callbackThe function to call back
ecThe status code

Definition at line 349 of file connection.hpp.

template<typename config >
lib::error_code websocketpp::transport::asio::connection< config >::init_asio ( io_service_ptr  io_service)
inlineprotected

Finish constructing the transport.

init_asio is called once immediately after construction to initialize Asio components to the io_service.

Parameters
io_serviceA pointer to the io_service to register with this connection
Returns
Status code for the success or failure of the initialization

Definition at line 484 of file connection.hpp.

template<typename config >
lib::error_code websocketpp::transport::asio::connection< config >::interrupt ( interrupt_handler  handler)
inlineprotected

Trigger the on_interrupt handler.

This needs to be thread safe

Definition at line 1037 of file connection.hpp.

template<typename config >
lib::error_code websocketpp::transport::asio::connection< config >::proxy_init ( std::string const &  authority)
inlineprotected

initialize the proxy buffers and http parsers

Parameters
authorityThe address of the server we want the proxy to tunnel to in the format of a URI authority (host:port)
Returns
Status code indicating what errors occurred, if any

Definition at line 460 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_handle ( connection_hdl  hdl)
inlineprotected

Set Connection Handle.

See common/connection_hdl.hpp for information

Parameters
hdlA connection_hdl that the transport will use to refer to itself

Definition at line 1028 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_proxy ( std::string const &  uri,
lib::error_code &  ec 
)
inline

Set the proxy to connect through (exception free)

The URI passed should be a complete URI including scheme. For example: http://proxy.example.com:8080/

The proxy must be set up as an explicit (CONNECT) proxy allowed to connect to the port you specify. Traffic to the proxy is not encrypted.

Parameters
uriThe full URI of the proxy to connect to.
ecA status value

Definition at line 189 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_proxy_basic_auth ( std::string const &  username,
std::string const &  password,
lib::error_code &  ec 
)
inline

Set the basic auth credentials to use (exception free)

The URI passed should be a complete URI including scheme. For example: http://proxy.example.com:8080/

The proxy must be set up as an explicit proxy

Parameters
usernameThe username to send
passwordThe password to send
ecA status value

Definition at line 217 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_proxy_timeout ( long  duration,
lib::error_code &  ec 
)
inline

Set the proxy timeout duration (exception free)

Duration is in milliseconds. Default value is based on the transport config

Parameters
durationThe number of milliseconds to wait before aborting the proxy connection.
ecA status value

Definition at line 250 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_tcp_init_handler ( tcp_init_handler  h)
inline

Sets the tcp pre init handler (deprecated)

The tcp pre init handler is called after the raw tcp connection has been established but before any additional wrappers (proxy connects, TLS handshakes, etc) have been performed.

Deprecated:
Use set_tcp_pre_init_handler instead
Parameters
hThe handler to call on tcp pre init.

Definition at line 158 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_tcp_post_init_handler ( tcp_init_handler  h)
inline

Sets the tcp post init handler.

The tcp post init handler is called after the tcp connection has been established and all additional wrappers (proxy connects, TLS handshakes, etc have been performed. This is fired before any bytes are read or any WebSocket specific handshake logic has been performed.

Since
0.3.0
Parameters
hThe handler to call on tcp post init.

Definition at line 173 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_tcp_pre_init_handler ( tcp_init_handler  h)
inline

Sets the tcp pre init handler.

The tcp pre init handler is called after the raw tcp connection has been established but before any additional wrappers (proxy connects, TLS handshakes, etc) have been performed.

Since
0.3.0
Parameters
hThe handler to call on tcp pre init.

Definition at line 144 of file connection.hpp.

template<typename config >
timer_ptr websocketpp::transport::asio::connection< config >::set_timer ( long  duration,
timer_handler  callback 
)
inline

Call back a function after a period of time.

Sets a timer that calls back a function after the specified period of milliseconds. Returns a handle that can be used to cancel the timer. A cancelled timer will return the error code error::operation_aborted A timer that expired will return no error.

Parameters
durationLength of time to wait in milliseconds
callbackThe function to call back when the timer has expired
Returns
A handle that can be used to cancel the timer if it is no longer needed.

Definition at line 313 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::set_uri ( uri_ptr  u)
inline

Set uri hook.

Called by the endpoint as a connection is being established to provide the uri being connected to to the transport layer.

This transport policy doesn't use the uri except to forward it to the socket layer.

Since
0.6.0
Parameters
uThe uri to set

Definition at line 130 of file connection.hpp.

template<typename config >
void websocketpp::transport::asio::connection< config >::test ( )
inline

Initialize transport for reading.

init_asio is called once immediately after construction to initialize Asio components to the io_service

The transport initialization sequence consists of the following steps:

  • Pre-init: the underlying socket is initialized to the point where bytes may be written. No bytes are actually written in this stage
  • Proxy negotiation: if a proxy is set, a request is made to it to start a tunnel to the final destination. This stage ends when the proxy is ready to forward the next byte to the remote endpoint.
  • Post-init: Perform any i/o with the remote endpoint, such as setting up tunnels for encryption. This stage ends when the connection is ready to read or write the WebSocket handshakes. At this point the original callback function is called.

Definition at line 414 of file connection.hpp.


The documentation for this class was generated from the following file: