@@ -145,6 +145,10 @@ struct Request {
145145
146146 Progress progress;
147147
148+ #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
149+ const SSL *ssl;
150+ #endif
151+
148152 bool has_header (const char *key) const ;
149153 std::string get_header_value (const char *key, size_t id = 0 ) const ;
150154 size_t get_header_value_count (const char *key) const ;
@@ -256,7 +260,8 @@ class Server {
256260
257261protected:
258262 bool process_request (Stream &strm, bool last_connection,
259- bool &connection_close);
263+ bool &connection_close,
264+ std::function<void (Request &)> setup_request = nullptr);
260265
261266 size_t keep_alive_max_count_;
262267 size_t payload_max_length_;
@@ -1828,8 +1833,10 @@ inline bool Server::dispatch_request(Request &req, Response &res,
18281833 return false ;
18291834}
18301835
1831- inline bool Server::process_request (Stream &strm, bool last_connection,
1832- bool &connection_close) {
1836+ inline bool
1837+ Server::process_request (Stream &strm, bool last_connection,
1838+ bool &connection_close,
1839+ std::function<void (Request &)> setup_request) {
18331840 const auto bufsiz = 2048 ;
18341841 char buf[bufsiz];
18351842
@@ -1899,6 +1906,9 @@ inline bool Server::process_request(Stream &strm, bool last_connection,
18991906 }
19001907 }
19011908
1909+ // TODO: Add additional request info
1910+ if (setup_request) { setup_request (req); }
1911+
19021912 if (routing (req, res)) {
19031913 if (res.status == -1 ) { res.status = 200 ; }
19041914 } else {
@@ -2293,15 +2303,15 @@ read_and_close_socket_ssl(socket_t sock, size_t keep_alive_max_count,
22932303 auto last_connection = count == 1 ;
22942304 auto connection_close = false ;
22952305
2296- ret = callback (strm, last_connection, connection_close);
2306+ ret = callback (ssl, strm, last_connection, connection_close);
22972307 if (!ret || connection_close) { break ; }
22982308
22992309 count--;
23002310 }
23012311 } else {
23022312 SSLSocketStream strm (sock, ssl);
23032313 auto dummy_connection_close = false ;
2304- ret = callback (strm, true , dummy_connection_close);
2314+ ret = callback (ssl, strm, true , dummy_connection_close);
23052315 }
23062316 }
23072317
@@ -2406,8 +2416,10 @@ inline bool SSLServer::read_and_close_socket(socket_t sock) {
24062416 return detail::read_and_close_socket_ssl (
24072417 sock, keep_alive_max_count_, ctx_, ctx_mutex_, SSL_accept,
24082418 [](SSL * /* ssl*/ ) { return true ; },
2409- [this ](Stream &strm, bool last_connection, bool &connection_close) {
2410- return process_request (strm, last_connection, connection_close);
2419+ [this ](SSL *ssl, Stream &strm, bool last_connection,
2420+ bool &connection_close) {
2421+ return process_request (strm, last_connection, connection_close,
2422+ [&](Request &req) { req.ssl = ssl; });
24112423 });
24122424}
24132425
@@ -2494,7 +2506,7 @@ inline bool SSLClient::read_and_close_socket(socket_t sock, Request &req,
24942506 SSL_set_tlsext_host_name (ssl, host_.c_str ());
24952507 return true ;
24962508 },
2497- [&](Stream &strm, bool /* last_connection*/ ,
2509+ [&](SSL * /* ssl */ , Stream &strm, bool /* last_connection*/ ,
24982510 bool &connection_close) {
24992511 return process_request (strm, req, res, connection_close);
25002512 });
0 commit comments