From 88a8b154e5ab548a9f8f01c2a971be2b2e76a5e0 Mon Sep 17 00:00:00 2001 From: eidheim Date: Mon, 24 Oct 2016 15:41:33 +0200 Subject: [PATCH] Simplified the default_resource example --- http_examples.cpp | 22 ++++++++++------------ https_examples.cpp | 22 ++++++++++------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/http_examples.cpp b/http_examples.cpp index dbea3a6..811e62e 100644 --- a/http_examples.cpp +++ b/http_examples.cpp @@ -21,7 +21,7 @@ typedef SimpleWeb::Client HttpClient; //Added for the default_resource example void default_resource_send(const HttpServer &server, const shared_ptr &response, - const shared_ptr &ifs, const shared_ptr > &buffer); + const shared_ptr &ifs); int main() { //HTTP-server at port 8080 using 1 thread @@ -121,17 +121,13 @@ int main() { ifs->open(path.string(), ifstream::in | ios::binary); if(*ifs) { - //read and send 128 KB at a time - streamsize buffer_size=131072; - auto buffer=make_shared >(buffer_size); - ifs->seekg(0, ios::end); auto length=ifs->tellg(); ifs->seekg(0, ios::beg); *response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; - default_resource_send(server, response, ifs, buffer); + default_resource_send(server, response, ifs); } else throw invalid_argument("could not read file"); @@ -168,14 +164,16 @@ int main() { } void default_resource_send(const HttpServer &server, const shared_ptr &response, - const shared_ptr &ifs, const shared_ptr > &buffer) { + const shared_ptr &ifs) { + //read and send 128 KB at a time + static vector buffer(131072); // Safe when server is running on one thread streamsize read_length; - if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) { - response->write(&(*buffer)[0], read_length); - if(read_length==static_cast(buffer->size())) { - server.send(response, [&server, response, ifs, buffer](const boost::system::error_code &ec) { + if((read_length=ifs->read(&buffer[0], buffer.size()).gcount())>0) { + response->write(&buffer[0], read_length); + if(read_length==static_cast(buffer.size())) { + server.send(response, [&server, response, ifs](const boost::system::error_code &ec) { if(!ec) - default_resource_send(server, response, ifs, buffer); + default_resource_send(server, response, ifs); else cerr << "Connection interrupted" << endl; }); diff --git a/https_examples.cpp b/https_examples.cpp index 8642a42..259e766 100644 --- a/https_examples.cpp +++ b/https_examples.cpp @@ -21,7 +21,7 @@ typedef SimpleWeb::Client HttpsClient; //Added for the default_resource example void default_resource_send(const HttpsServer &server, const shared_ptr &response, - const shared_ptr &ifs, const shared_ptr > &buffer); + const shared_ptr &ifs); int main() { //HTTPS-server at port 8080 using 1 thread @@ -121,17 +121,13 @@ int main() { ifs->open(path.string(), ifstream::in | ios::binary); if(*ifs) { - //read and send 128 KB at a time - streamsize buffer_size=131072; - auto buffer=make_shared >(buffer_size); - ifs->seekg(0, ios::end); auto length=ifs->tellg(); ifs->seekg(0, ios::beg); *response << "HTTP/1.1 200 OK\r\nContent-Length: " << length << "\r\n\r\n"; - default_resource_send(server, response, ifs, buffer); + default_resource_send(server, response, ifs); } else throw invalid_argument("could not read file"); @@ -169,14 +165,16 @@ int main() { } void default_resource_send(const HttpsServer &server, const shared_ptr &response, - const shared_ptr &ifs, const shared_ptr > &buffer) { + const shared_ptr &ifs) { + //read and send 128 KB at a time + static vector buffer(131072); // Safe when server is running on one thread streamsize read_length; - if((read_length=ifs->read(&(*buffer)[0], buffer->size()).gcount())>0) { - response->write(&(*buffer)[0], read_length); - if(read_length==static_cast(buffer->size())) { - server.send(response, [&server, response, ifs, buffer](const boost::system::error_code &ec) { + if((read_length=ifs->read(&buffer[0], buffer.size()).gcount())>0) { + response->write(&buffer[0], read_length); + if(read_length==static_cast(buffer.size())) { + server.send(response, [&server, response, ifs](const boost::system::error_code &ec) { if(!ec) - default_resource_send(server, response, ifs, buffer); + default_resource_send(server, response, ifs); else cerr << "Connection interrupted" << endl; });