@@ -156,6 +156,7 @@ using socket_t = int;
156
156
#include < openssl/x509v3.h>
157
157
158
158
#include < iomanip>
159
+ #include < iostream>
159
160
#include < sstream>
160
161
161
162
// #if OPENSSL_VERSION_NUMBER < 0x1010100fL
@@ -511,7 +512,7 @@ class Server {
511
512
int bind_internal (const char *host, int port, int socket_flags);
512
513
bool listen_internal ();
513
514
514
- bool routing (Request &req, Response &res, Stream &strm, bool last_connection );
515
+ bool routing (Request &req, Response &res, Stream &strm);
515
516
bool handle_file_request (Request &req, Response &res, bool head = false );
516
517
bool dispatch_request (Request &req, Response &res, Handlers &handlers);
517
518
bool dispatch_request_for_content_reader (Request &req, Response &res,
@@ -524,14 +525,14 @@ class Server {
524
525
bool write_content_with_provider (Stream &strm, const Request &req,
525
526
Response &res, const std::string &boundary,
526
527
const std::string &content_type);
527
- bool read_content (Stream &strm, bool last_connection, Request &req,
528
- Response &res);
529
- bool read_content_with_content_receiver (
530
- Stream &strm, bool last_connection, Request &req, Response &res ,
531
- ContentReceiver receiver, MultipartContentHeader multipart_header,
532
- ContentReceiver multipart_receiver);
533
- bool read_content_core (Stream &strm, bool last_connection, Request &req ,
534
- Response &res, ContentReceiver receiver,
528
+ bool read_content (Stream &strm, Request &req, Response &res);
529
+ bool
530
+ read_content_with_content_receiver (Stream &strm, Request &req, Response &res,
531
+ ContentReceiver receiver ,
532
+ MultipartContentHeader multipart_header,
533
+ ContentReceiver multipart_receiver);
534
+ bool read_content_core (Stream &strm, Request &req, Response &res ,
535
+ ContentReceiver receiver,
535
536
MultipartContentHeader mulitpart_header,
536
537
ContentReceiver multipart_receiver);
537
538
@@ -859,8 +860,8 @@ class SSLServer : public Server {
859
860
class SSLClient : public Client {
860
861
public:
861
862
explicit SSLClient (const std::string &host, int port = 443 ,
862
- const std::string &client_cert_path = std::string(),
863
- const std::string &client_key_path = std::string());
863
+ const std::string &client_cert_path = std::string(),
864
+ const std::string &client_key_path = std::string());
864
865
865
866
~SSLClient () override ;
866
867
@@ -2779,8 +2780,7 @@ inline void Response::set_content(const char *s, size_t n,
2779
2780
set_header (" Content-Type" , content_type);
2780
2781
}
2781
2782
2782
- inline void Response::set_content (std::string s,
2783
- const char *content_type) {
2783
+ inline void Response::set_content (std::string s, const char *content_type) {
2784
2784
body = std::move (s);
2785
2785
set_header (" Content-Type" , content_type);
2786
2786
}
@@ -3244,47 +3244,45 @@ Server::write_content_with_provider(Stream &strm, const Request &req,
3244
3244
return true ;
3245
3245
}
3246
3246
3247
- inline bool Server::read_content (Stream &strm, bool last_connection,
3248
- Request &req, Response &res) {
3247
+ inline bool Server::read_content (Stream &strm, Request &req, Response &res) {
3249
3248
MultipartFormDataMap::iterator cur;
3250
- auto ret = read_content_core (
3251
- strm, last_connection, req, res,
3252
- // Regular
3253
- [&](const char *buf, size_t n) {
3254
- if (req.body .size () + n > req.body .max_size ()) { return false ; }
3255
- req.body .append (buf, n);
3256
- return true ;
3257
- },
3258
- // Multipart
3259
- [&](const MultipartFormData &file) {
3260
- cur = req.files .emplace (file.name , file);
3261
- return true ;
3262
- },
3263
- [&](const char *buf, size_t n) {
3264
- auto &content = cur->second .content ;
3265
- if (content.size () + n > content.max_size ()) { return false ; }
3266
- content.append (buf, n);
3267
- return true ;
3268
- });
3269
-
3270
- const auto &content_type = req.get_header_value (" Content-Type" );
3271
- if (!content_type.find (" application/x-www-form-urlencoded" )) {
3272
- detail::parse_query_text (req.body , req.params );
3249
+ if (read_content_core (
3250
+ strm, req, res,
3251
+ // Regular
3252
+ [&](const char *buf, size_t n) {
3253
+ if (req.body .size () + n > req.body .max_size ()) { return false ; }
3254
+ req.body .append (buf, n);
3255
+ return true ;
3256
+ },
3257
+ // Multipart
3258
+ [&](const MultipartFormData &file) {
3259
+ cur = req.files .emplace (file.name , file);
3260
+ return true ;
3261
+ },
3262
+ [&](const char *buf, size_t n) {
3263
+ auto &content = cur->second .content ;
3264
+ if (content.size () + n > content.max_size ()) { return false ; }
3265
+ content.append (buf, n);
3266
+ return true ;
3267
+ })) {
3268
+ const auto &content_type = req.get_header_value (" Content-Type" );
3269
+ if (!content_type.find (" application/x-www-form-urlencoded" )) {
3270
+ detail::parse_query_text (req.body , req.params );
3271
+ }
3272
+ return true ;
3273
3273
}
3274
-
3275
- return ret;
3274
+ return false ;
3276
3275
}
3277
3276
3278
3277
inline bool Server::read_content_with_content_receiver (
3279
- Stream &strm, bool last_connection, Request &req, Response &res,
3280
- ContentReceiver receiver, MultipartContentHeader multipart_header,
3278
+ Stream &strm, Request &req, Response &res, ContentReceiver receiver ,
3279
+ MultipartContentHeader multipart_header,
3281
3280
ContentReceiver multipart_receiver) {
3282
- return read_content_core (strm, last_connection, req, res, receiver,
3283
- multipart_header, multipart_receiver);
3281
+ return read_content_core (strm, req, res, receiver, multipart_header ,
3282
+ multipart_receiver);
3284
3283
}
3285
3284
3286
- inline bool Server::read_content_core (Stream &strm, bool last_connection,
3287
- Request &req, Response &res,
3285
+ inline bool Server::read_content_core (Stream &strm, Request &req, Response &res,
3288
3286
ContentReceiver receiver,
3289
3287
MultipartContentHeader mulitpart_header,
3290
3288
ContentReceiver multipart_receiver) {
@@ -3296,7 +3294,7 @@ inline bool Server::read_content_core(Stream &strm, bool last_connection,
3296
3294
std::string boundary;
3297
3295
if (!detail::parse_multipart_boundary (content_type, boundary)) {
3298
3296
res.status = 400 ;
3299
- return write_response (strm, last_connection, req, res) ;
3297
+ return false ;
3300
3298
}
3301
3299
3302
3300
multipart_form_data_parser.set_boundary (std::move (boundary));
@@ -3310,13 +3308,13 @@ inline bool Server::read_content_core(Stream &strm, bool last_connection,
3310
3308
3311
3309
if (!detail::read_content (strm, req, payload_max_length_, res.status ,
3312
3310
Progress (), out)) {
3313
- return write_response (strm, last_connection, req, res) ;
3311
+ return false ;
3314
3312
}
3315
3313
3316
3314
if (req.is_multipart_form_data ()) {
3317
3315
if (!multipart_form_data_parser.is_valid ()) {
3318
3316
res.status = 400 ;
3319
- return write_response (strm, last_connection, req, res) ;
3317
+ return false ;
3320
3318
}
3321
3319
}
3322
3320
@@ -3446,8 +3444,7 @@ inline bool Server::listen_internal() {
3446
3444
return ret;
3447
3445
}
3448
3446
3449
- inline bool Server::routing (Request &req, Response &res, Stream &strm,
3450
- bool last_connection) {
3447
+ inline bool Server::routing (Request &req, Response &res, Stream &strm) {
3451
3448
// File handler
3452
3449
bool is_head_request = req.method == " HEAD" ;
3453
3450
if ((req.method == " GET" || is_head_request) &&
@@ -3460,12 +3457,12 @@ inline bool Server::routing(Request &req, Response &res, Stream &strm,
3460
3457
{
3461
3458
ContentReader reader (
3462
3459
[&](ContentReceiver receiver) {
3463
- return read_content_with_content_receiver (
3464
- strm, last_connection, req, res, receiver, nullptr , nullptr );
3460
+ return read_content_with_content_receiver (strm, req, res, receiver,
3461
+ nullptr , nullptr );
3465
3462
},
3466
3463
[&](MultipartContentHeader header, ContentReceiver receiver) {
3467
- return read_content_with_content_receiver (
3468
- strm, last_connection, req, res, nullptr , header, receiver);
3464
+ return read_content_with_content_receiver (strm, req, res, nullptr ,
3465
+ header, receiver);
3469
3466
});
3470
3467
3471
3468
if (req.method == " POST" ) {
@@ -3487,7 +3484,7 @@ inline bool Server::routing(Request &req, Response &res, Stream &strm,
3487
3484
}
3488
3485
3489
3486
// Read content into `req.body`
3490
- if (!read_content (strm, last_connection, req, res)) { return false ; }
3487
+ if (!read_content (strm, req, res)) { return false ; }
3491
3488
}
3492
3489
3493
3490
// Regular handler
@@ -3614,7 +3611,7 @@ Server::process_request(Stream &strm, bool last_connection,
3614
3611
}
3615
3612
3616
3613
// Rounting
3617
- if (routing (req, res, strm, last_connection )) {
3614
+ if (routing (req, res, strm)) {
3618
3615
if (res.status == -1 ) { res.status = req.ranges .empty () ? 200 : 206 ; }
3619
3616
} else {
3620
3617
if (res.status == -1 ) { res.status = 404 ; }
0 commit comments