52int main(
int argc,
char* argv[]) {
56 using LegacyClient = web::http::legacy::
in::
Client;
57 using MasterRequest = LegacyClient::MasterRequest;
58 using Request = LegacyClient::Request;
59 using Response = LegacyClient::Response;
60 using LegacySocketAddress = LegacyClient::SocketAddress;
62 const LegacyClient legacyClient
(
64 [](
const std::shared_ptr<MasterRequest>& req) {
67 VLOG(1) << connectionName <<
": OnRequestBegin";
69 req->
set("Sec-WebSocket-Protocol", "subprotocol, echo");
74 [connectionName](
bool success) {
75 VLOG(1) << connectionName <<
": HTTP Upgrade (http -> websocket) start " << (success ?
"success" :
"failed");
77 [connectionName]([[maybe_unused]]
const std::shared_ptr<Request>& req,
78 const std::shared_ptr<Response>& res,
79 [[maybe_unused]]
bool success) {
80 VLOG(1) << connectionName <<
": Upgrade success:";
82 VLOG(1) << connectionName <<
": Requested: " << req->
header("upgrade");
83 VLOG(1) << connectionName <<
": Selected: " << res->
get("upgrade");
85 [connectionName](
const std::shared_ptr<Request>&,
const std::string& message) {
86 VLOG(1) << connectionName <<
": Request parse error: " << message;
89 []([[maybe_unused]]
const std::shared_ptr<MasterRequest>& req) {
92 VLOG(1) << connectionName <<
": OnRequestEnd";
96 const core::socket::
State& state) {
99 VLOG(1) << instanceName <<
" connected to '" << socketAddress
.toString() <<
"'";
102 VLOG(1) << instanceName <<
" disabled";
113 using TlsClient = web::http::tls::
in::
Client;
114 using MasterRequest = TlsClient::MasterRequest;
115 using Request = TlsClient::Request;
116 using Response = TlsClient::Response;
117 using TLSSocketAddress = TlsClient::SocketAddress;
119 const TlsClient tlsClient
(
121 [](
const std::shared_ptr<MasterRequest>& req) {
124 VLOG(1) << connectionName <<
": OnRequestBegin";
126 req->
set("Sec-WebSocket-Protocol", "subprotocol, echo");
131 [connectionName](
bool success) {
132 VLOG(1) << connectionName <<
": HTTP Upgrade (http -> websocket) start " << (success ?
"success" :
"failed");
134 [connectionName]([[maybe_unused]]
const std::shared_ptr<Request>& req,
135 [[maybe_unused]]
const std::shared_ptr<Response>& res,
136 [[maybe_unused]]
bool success) {
138 [connectionName](
const std::shared_ptr<Request>&,
const std::string& message) {
139 VLOG(1) << connectionName <<
": Request parse error: " << message;
142 []([[maybe_unused]]
const std::shared_ptr<MasterRequest>& req) {
145 VLOG(1) << connectionName <<
": OnRequestEnd";
149 const core::socket::
State& state) {
152 VLOG(1) << instanceName <<
" connected to '" << socketAddress
.toString() <<
"'";
155 VLOG(1) << instanceName <<
" disabled";
SocketConnection * getSocketConnection() const
bool upgrade(const std::string &url, const std::string &protocols, const std::function< void(bool)> &onUpgradeInitiate, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &, bool)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError)