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; });