35int main(
int argc,
char* argv[]) {
38 using LegacyWebApp = express::legacy::in::WebApp;
39 using Request = LegacyWebApp::Request;
40 using Response = LegacyWebApp::Response;
41 using SocketAddress = LegacyWebApp::SocketAddress;
43 const LegacyWebApp legacyApp(
"legacy");
45 legacyApp.use(express::middleware::VerboseRequest());
48 VLOG(1) <<
"HTTP GET on "
50 if (req->url ==
"/" || req->url ==
"/index.html") {
51 req->url =
"/wstest.html";
54 VLOG(1) << CMAKE_CURRENT_SOURCE_DIR
"/html" + req->url;
55 res->sendFile(CMAKE_CURRENT_SOURCE_DIR
"/html" + req->url, [req](
int errnum) {
59 VLOG(1) <<
"HTTP response send file failed: " << std::strerror(errnum);
64 legacyApp.get(
"/ws", [](
const std::shared_ptr<Request>& req,
const std::shared_ptr<Response>& res) {
65 VLOG(1) <<
"HTTP GET on legacy /ws";
67 const std::string uri = req->originalUrl;
69 VLOG(2) <<
"OriginalUri: " << uri;
70 VLOG(2) <<
"Uri: " << req->url;
72 VLOG(2) <<
"Host: " << req->get(
"host");
73 VLOG(2) <<
"Connection: " << req->get(
"connection");
74 VLOG(2) <<
"Origin: " << req->get(
"origin");
75 VLOG(2) <<
"Sec-WebSocket-Protocol: " << req->get(
"sec-websocket-protocol");
76 VLOG(2) <<
"sec-web-socket-extensions: " << req->get(
"sec-websocket-extensions");
77 VLOG(2) <<
"sec-websocket-key: " << req->get(
"sec-websocket-key");
78 VLOG(2) <<
"sec-websocket-version: " << req->get(
"sec-websocket-version");
79 VLOG(2) <<
"upgrade: " << req->get(
"upgrade");
80 VLOG(2) <<
"user-agent: " << req->get(
"user-agent");
82 if (req->get(
"sec-websocket-protocol").find(
"echo") != std::string::npos) {
83 res->upgrade(req, [req, res](
const std::string& name) {
85 VLOG(1) <<
"Successful upgrade to '" << name <<
"' from options: " << req->get(
"upgrade");
87 VLOG(1) <<
"Can not upgrade to any of '" << req->get(
"upgrade") <<
"'";
97 [instanceName = legacyApp.getConfig().getInstanceName()](
const SocketAddress& socketAddress,
const core::socket::State& state) {
99 case core::socket::State::OK:
100 VLOG(1) << instanceName <<
" listening on '" << socketAddress.toString() <<
"'";
102 case core::socket::State::DISABLED:
103 VLOG(1) << instanceName <<
" disabled";
105 case core::socket::State::ERROR:
106 VLOG(1) << instanceName <<
" " << socketAddress.toString() <<
": " << state.what();
108 case core::socket::State::FATAL:
109 VLOG(1) << instanceName <<
" " << socketAddress.toString() <<
": " << state.what();
115 using TlsWebApp = express::tls::in::WebApp;
116 using Request = TlsWebApp::Request;
117 using Response = TlsWebApp::Response;
118 using SocketAddress = TlsWebApp::SocketAddress;
120 const TlsWebApp tlsApp(
"tls");
122 tlsApp.use(express::middleware::VerboseRequest());
125 if (req->url ==
"/" || req->url ==
"/index.html") {
126 req->url =
"/wstest.html";
129 VLOG(1) << CMAKE_CURRENT_SOURCE_DIR
"/html" + req->url;
130 res->sendFile(CMAKE_CURRENT_SOURCE_DIR
"/html" + req->url, [req](
int ret) {
132 PLOG(ERROR) << req->url;
137 tlsApp.get(
"/ws", [](
const std::shared_ptr<Request>& req,
const std::shared_ptr<Response>& res) {
138 VLOG(1) <<
"HTTP GET on tls /ws";
140 const std::string uri = req->originalUrl;
142 VLOG(2) <<
"OriginalUri: " << uri;
143 VLOG(2) <<
"Uri: " << req->url;
145 VLOG(2) <<
"Connection: " << req->get(
"connection");
146 VLOG(2) <<
"Host: " << req->get(
"host");
147 VLOG(2) <<
"Origin: " << req->get(
"origin");
148 VLOG(2) <<
"Sec-WebSocket-Protocol: " << req->get(
"sec-websocket-protocol");
149 VLOG(2) <<
"sec-web-socket-extensions: " << req->get(
"sec-websocket-extensions");
150 VLOG(2) <<
"sec-websocket-key: " << req->get(
"sec-websocket-key");
151 VLOG(2) <<
"sec-websocket-version: " << req->get(
"sec-websocket-version");
152 VLOG(2) <<
"upgrade: " << req->get(
"upgrade");
153 VLOG(2) <<
"user-agent: " << req->get(
"user-agent");
155 if (req->get(
"sec-websocket-protocol").find(
"echo") != std::string::npos) {
156 res->upgrade(req, [req, res](
const std::string& name) {
158 VLOG(1) <<
"Successful upgrade to '" << name <<
"' from options: " << req->get(
"upgrade");
160 VLOG(1) <<
"Can not upgrade to any of '" << req->get(
"upgrade") <<
"'";
165 res->sendStatus(404);
170 [instanceName = tlsApp.getConfig().getInstanceName()](
const SocketAddress& socketAddress,
const core::socket::State& state) {
172 case core::socket::State::OK:
173 VLOG(1) << instanceName <<
" listening on '" << socketAddress.toString() <<
"'";
175 case core::socket::State::DISABLED:
176 VLOG(1) << instanceName <<
" disabled";
178 case core::socket::State::ERROR:
179 VLOG(1) << instanceName <<
" " << socketAddress.toString() <<
": " << state.what();
181 case core::socket::State::FATAL:
182 VLOG(1) << instanceName <<
" " << socketAddress.toString() <<
": " << state.what();