1
0
mirror of synced 2025-04-19 00:24:02 +03:00

Format code

This commit is contained in:
yhirose 2019-12-14 23:46:11 -05:00
parent 260422b7d7
commit 58b2814fda
3 changed files with 42 additions and 46 deletions

View File

@ -44,14 +44,10 @@ int main(void) {
#endif #endif
// Run servers // Run servers
auto httpThread = std::thread([&]() { auto httpThread = std::thread([&]() { http.listen("localhost", 8080); });
http.listen("localhost", 8080);
});
#ifdef CPPHTTPLIB_OPENSSL_SUPPORT #ifdef CPPHTTPLIB_OPENSSL_SUPPORT
auto httpsThread = std::thread([&]() { auto httpsThread = std::thread([&]() { https.listen("localhost", 8081); });
https.listen("localhost", 8081);
});
#endif #endif
httpThread.join(); httpThread.join();

View File

@ -5,13 +5,13 @@
// MIT License // MIT License
// //
#include <fstream>
#include <httplib.h> #include <httplib.h>
#include <iostream> #include <iostream>
#include <fstream>
using namespace httplib; using namespace httplib;
using namespace std; using namespace std;
const char* html = R"( const char *html = R"(
<form id="formElem"> <form id="formElem">
<input type="file" name="file" accept="image/*"> <input type="file" name="file" accept="image/*">
<input type="submit"> <input type="submit">
@ -35,9 +35,10 @@ int main(void) {
res.set_content(html, "text/html"); res.set_content(html, "text/html");
}); });
svr.Post("/post", [](const Request & req, Response &res) { svr.Post("/post", [](const Request &req, Response &res) {
auto file = req.get_file_value("file"); auto file = req.get_file_value("file");
cout << "file length: " << file.content.length() << ":" << file.filename << endl; cout << "file length: " << file.content.length() << ":" << file.filename
<< endl;
ofstream ofs(file.filename, ios::binary); ofstream ofs(file.filename, ios::binary);
ofs << file.content; ofs << file.content;

View File

@ -30,10 +30,11 @@ const std::string JSON_DATA = "{\"hello\":\"world\"}";
const string LARGE_DATA = string(1024 * 1024 * 100, '@'); // 100MB const string LARGE_DATA = string(1024 * 1024 * 100, '@'); // 100MB
MultipartFormData& get_file_value(MultipartFormDataItems &files, const char *key) { MultipartFormData &get_file_value(MultipartFormDataItems &files,
auto it = std::find_if(files.begin(), files.end(), [&](const MultipartFormData &file) { const char *key) {
return file.name == key; auto it = std::find_if(
}); files.begin(), files.end(),
[&](const MultipartFormData &file) { return file.name == key; });
if (it != files.end()) { return *it; } if (it != files.end()) { return *it; }
throw std::runtime_error("invalid mulitpart form data name error"); throw std::runtime_error("invalid mulitpart form data name error");
} }
@ -496,15 +497,15 @@ TEST(DigestAuthTest, FromHTTPWatch) {
{ {
std::vector<std::string> paths = { std::vector<std::string> paths = {
"/digest-auth/auth/hello/world/MD5", "/digest-auth/auth/hello/world/MD5",
"/digest-auth/auth/hello/world/SHA-256", "/digest-auth/auth/hello/world/SHA-256",
"/digest-auth/auth/hello/world/SHA-512", "/digest-auth/auth/hello/world/SHA-512",
"/digest-auth/auth-init/hello/world/MD5", "/digest-auth/auth-init/hello/world/MD5",
"/digest-auth/auth-int/hello/world/MD5", "/digest-auth/auth-int/hello/world/MD5",
}; };
cli.set_auth("hello", "world"); cli.set_auth("hello", "world");
for (auto path: paths) { for (auto path : paths) {
auto res = cli.Get(path.c_str()); auto res = cli.Get(path.c_str());
ASSERT_TRUE(res != nullptr); ASSERT_TRUE(res != nullptr);
EXPECT_EQ(res->body, EXPECT_EQ(res->body,
@ -801,18 +802,19 @@ protected:
EXPECT_EQ("5", req.get_header_value("Content-Length")); EXPECT_EQ("5", req.get_header_value("Content-Length"));
}) })
.Post("/content_receiver", .Post("/content_receiver",
[&](const Request & req, Response &res, const ContentReader &content_reader) { [&](const Request &req, Response &res,
const ContentReader &content_reader) {
if (req.is_multipart_form_data()) { if (req.is_multipart_form_data()) {
MultipartFormDataItems files; MultipartFormDataItems files;
content_reader( content_reader(
[&](const MultipartFormData &file) { [&](const MultipartFormData &file) {
files.push_back(file); files.push_back(file);
return true; return true;
}, },
[&](const char *data, size_t data_length) { [&](const char *data, size_t data_length) {
files.back().content.append(data, data_length); files.back().content.append(data, data_length);
return true; return true;
}); });
EXPECT_EQ(5u, files.size()); EXPECT_EQ(5u, files.size());
@ -1814,7 +1816,7 @@ TEST_F(ServerTest, MultipartFormDataGzip) {
#endif #endif
// Sends a raw request to a server listening at HOST:PORT. // Sends a raw request to a server listening at HOST:PORT.
static bool send_request(time_t read_timeout_sec, const std::string& req) { static bool send_request(time_t read_timeout_sec, const std::string &req) {
auto client_sock = auto client_sock =
detail::create_client_socket(HOST, PORT, /*timeout_sec=*/5); detail::create_client_socket(HOST, PORT, /*timeout_sec=*/5);
@ -1822,8 +1824,8 @@ static bool send_request(time_t read_timeout_sec, const std::string& req) {
return detail::process_and_close_socket( return detail::process_and_close_socket(
true, client_sock, 1, read_timeout_sec, 0, true, client_sock, 1, read_timeout_sec, 0,
[&](Stream& strm, bool /*last_connection*/, [&](Stream &strm, bool /*last_connection*/, bool &
bool &/*connection_close*/) -> bool { /*connection_close*/) -> bool {
if (req.size() != if (req.size() !=
static_cast<size_t>(strm.write(req.data(), req.size()))) { static_cast<size_t>(strm.write(req.data(), req.size()))) {
return false; return false;
@ -1840,11 +1842,10 @@ static bool send_request(time_t read_timeout_sec, const std::string& req) {
TEST(ServerRequestParsingTest, TrimWhitespaceFromHeaderValues) { TEST(ServerRequestParsingTest, TrimWhitespaceFromHeaderValues) {
Server svr; Server svr;
std::string header_value; std::string header_value;
svr.Get("/validate-ws-in-headers", svr.Get("/validate-ws-in-headers", [&](const Request &req, Response &res) {
[&](const Request &req, Response &res) { header_value = req.get_header_value("foo");
header_value = req.get_header_value("foo"); res.set_content("ok", "text/plain");
res.set_content("ok", "text/plain"); });
});
thread t = thread([&] { svr.listen(HOST, PORT); }); thread t = thread([&] { svr.listen(HOST, PORT); });
while (!svr.is_running()) { while (!svr.is_running()) {
@ -1853,11 +1854,10 @@ TEST(ServerRequestParsingTest, TrimWhitespaceFromHeaderValues) {
// Only space and horizontal tab are whitespace. Make sure other whitespace- // Only space and horizontal tab are whitespace. Make sure other whitespace-
// like characters are not treated the same - use vertical tab and escape. // like characters are not treated the same - use vertical tab and escape.
const std::string req = const std::string req = "GET /validate-ws-in-headers HTTP/1.1\r\n"
"GET /validate-ws-in-headers HTTP/1.1\r\n" "foo: \t \v bar \e\t \r\n"
"foo: \t \v bar \e\t \r\n" "Connection: close\r\n"
"Connection: close\r\n" "\r\n";
"\r\n";
ASSERT_TRUE(send_request(5, req)); ASSERT_TRUE(send_request(5, req));
svr.stop(); svr.stop();
@ -1867,10 +1867,9 @@ TEST(ServerRequestParsingTest, TrimWhitespaceFromHeaderValues) {
TEST(ServerRequestParsingTest, ReadHeadersRegexComplexity) { TEST(ServerRequestParsingTest, ReadHeadersRegexComplexity) {
Server svr; Server svr;
svr.Get("/hi", svr.Get("/hi", [&](const Request & /*req*/, Response &res) {
[&](const Request & /*req*/, Response &res) { res.set_content("ok", "text/plain");
res.set_content("ok", "text/plain"); });
});
// Server read timeout must be longer than the client read timeout for the // Server read timeout must be longer than the client read timeout for the
// bug to reproduce, probably to force the server to process a request // bug to reproduce, probably to force the server to process a request