54int main(
int argc,
char* argv[]) {
58 using LegacyClient = web::http::legacy::
in::
Client;
59 using MasterRequest = LegacyClient::MasterRequest;
60 using Request = LegacyClient::Request;
61 using Response = LegacyClient::Response;
62 using LegacySocketAddress = LegacyClient::SocketAddress;
64 const LegacyClient legacyClient
(
66 [](
const std::shared_ptr<MasterRequest>& req) {
69 VLOG(1) << connectionName <<
": OnRequestBegin";
71 req->
set("Sec-WebSocket-Protocol", "subprotocol, echo");
76 [connectionName](
bool success) {
77 VLOG(1) << connectionName <<
": HTTP Upgrade (http -> websocket) start " << (success ?
"success" :
"failed");
79 [connectionName]([[maybe_unused]]
const std::shared_ptr<Request>& req,
80 const std::shared_ptr<Response>& res,
81 [[maybe_unused]]
bool success) {
82 VLOG(1) << connectionName <<
": Upgrade success:";
84 VLOG(1) << connectionName <<
": Requested: " << req->
header("upgrade");
85 VLOG(1) << connectionName <<
": Selected: " << res->
get("upgrade");
87 [connectionName](
const std::shared_ptr<Request>&,
const std::string& message) {
88 VLOG(1) << connectionName <<
": Request parse error: " << message;
91 []([[maybe_unused]]
const std::shared_ptr<MasterRequest>& req) {
94 VLOG(1) << connectionName <<
": OnRequestEnd";
98 const core::socket::
State& state) {
101 VLOG(1) << instanceName <<
" connected to '" << socketAddress
.toString() <<
"'";
104 VLOG(1) << instanceName <<
" disabled";
115 using TlsClient = web::http::tls::
in::
Client;
116 using MasterRequest = TlsClient::MasterRequest;
117 using Request = TlsClient::Request;
118 using Response = TlsClient::Response;
119 using TLSSocketAddress = TlsClient::SocketAddress;
121 const TlsClient tlsClient
(
123 [](
const std::shared_ptr<MasterRequest>& req) {
126 VLOG(1) << connectionName <<
": OnRequestBegin";
128 req->
set("Sec-WebSocket-Protocol", "subprotocol, echo");
133 [connectionName](
bool success) {
134 VLOG(1) << connectionName <<
": HTTP Upgrade (http -> websocket) start " << (success ?
"success" :
"failed");
136 [connectionName]([[maybe_unused]]
const std::shared_ptr<Request>& req,
137 [[maybe_unused]]
const std::shared_ptr<Response>& res,
138 [[maybe_unused]]
bool success) {
140 [connectionName](
const std::shared_ptr<Request>&,
const std::string& message) {
141 VLOG(1) << connectionName <<
": Request parse error: " << message;
144 []([[maybe_unused]]
const std::shared_ptr<MasterRequest>& req) {
147 VLOG(1) << connectionName <<
": OnRequestEnd";
151 const core::socket::
State& state) {
154 VLOG(1) << instanceName <<
" connected to '" << socketAddress
.toString() <<
"'";
157 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)