@@ -547,7 +547,7 @@ class Server {
547547 int bind_internal (const char *host, int port, int socket_flags);
548548 bool listen_internal ();
549549
550- bool routing (Request &req, Response &res, ContentReader content_reader );
550+ bool routing (Request &req, Response &res, Stream &strm, bool last_connection );
551551 bool handle_file_request (Request &req, Response &res);
552552 bool dispatch_request (Request &req, Response &res, Handlers &handlers);
553553 bool dispatch_request_for_content_reader (Request &req, Response &res,
@@ -2790,31 +2790,38 @@ inline bool Server::listen_internal() {
27902790 return ret;
27912791}
27922792
2793- inline bool Server::routing (Request &req, Response &res,
2794- ContentReader content_reader) {
2793+ inline bool Server::routing (Request &req, Response &res, Stream &strm, bool last_connection) {
27952794 // File handler
27962795 if (req.method == " GET" && handle_file_request (req, res)) { return true ; }
27972796
27982797 // Content reader handler
2799- if (req.method == " POST" ) {
2800- if (dispatch_request_for_content_reader (req, res, content_reader,
2801- post_handlers_for_content_reader)) {
2802- return true ;
2803- }
2804- } else if (req.method == " PUT" ) {
2805- if (dispatch_request_for_content_reader (req, res, content_reader,
2806- put_handlers_for_content_reader)) {
2807- return true ;
2808- }
2809- } else if (req.method == " PATCH" ) {
2810- if (dispatch_request_for_content_reader (
2811- req, res, content_reader, patch_handlers_for_content_reader)) {
2812- return true ;
2798+ if (req.method == " POST" || req.method == " PUT" || req.method == " PATCH" ) {
2799+ ContentReader content_reader = [&](ContentReceiver receiver) {
2800+ return read_content_with_content_receiver (strm, last_connection, req, res, receiver);
2801+ };
2802+
2803+ if (req.method == " POST" ) {
2804+ if (dispatch_request_for_content_reader (req, res, content_reader,
2805+ post_handlers_for_content_reader)) {
2806+ return true ;
2807+ }
2808+ } else if (req.method == " PUT" ) {
2809+ if (dispatch_request_for_content_reader (req, res, content_reader,
2810+ put_handlers_for_content_reader)) {
2811+ return true ;
2812+ }
2813+ } else if (req.method == " PATCH" ) {
2814+ if (dispatch_request_for_content_reader (
2815+ req, res, content_reader, patch_handlers_for_content_reader)) {
2816+ return true ;
2817+ }
28132818 }
28142819 }
28152820
28162821 // Read content into `req.body`
2817- if (!content_reader (nullptr )) { return false ; }
2822+ if (!read_content (strm, last_connection, req, res)) {
2823+ return false ;
2824+ }
28182825
28192826 // Regular handler
28202827 if (req.method == " GET" || req.method == " HEAD" ) {
@@ -2916,23 +2923,8 @@ Server::process_request(Stream &strm, bool last_connection,
29162923
29172924 if (setup_request) { setup_request (req); }
29182925
2919- // Body
2920- ContentReader content_reader = [&](ContentReceiver receiver) {
2921- if (req.method == " POST" || req.method == " PUT" || req.method == " PATCH" ) {
2922- if (receiver) {
2923- return read_content_with_content_receiver (strm, last_connection, req,
2924- res, receiver);
2925- } else {
2926- return read_content (strm, last_connection, req, res);
2927- }
2928- } else if (req.method == " PRI" ) {
2929- return read_content (strm, last_connection, req, res);
2930- }
2931- return true ;
2932- };
2933-
29342926 // Rounting
2935- if (routing (req, res, content_reader )) {
2927+ if (routing (req, res, strm, last_connection )) {
29362928 if (res.status == -1 ) { res.status = req.ranges .empty () ? 200 : 206 ; }
29372929 } else {
29382930 if (res.status == -1 ) { res.status = 404 ; }
0 commit comments