From fcadacb0adc58b5d58a608ca68ebec91b9c2c1d8 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 14 Apr 2020 16:12:05 +0400 Subject: [PATCH 1/4] Resources are compiled as needed Correct dependencies are set up for resource compilation and build_always_stale is set to false. --- static/meson.build | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/static/meson.build b/static/meson.build index 353f5266e..cf43624ea 100644 --- a/static/meson.build +++ b/static/meson.build @@ -1,3 +1,8 @@ +resource_files = run_command(find_program('python'), + '-c', + 'import sys; f=open(sys.argv[1]); print(f.read())', + files('resources_list.txt') + ).stdout().strip().split('\n') lib_resources = custom_target('resources', input: 'resources_list.txt', @@ -7,5 +12,5 @@ lib_resources = custom_target('resources', '--hfile', '@OUTPUT1@', '--source_dir', '@OUTDIR@', '@INPUT@'], - build_always_stale: true + depend_files: resource_files ) From 9bf6d0621f7a1ccee81ab9b7dfccfd0a0ac22c72 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Tue, 14 Apr 2020 20:07:04 +0400 Subject: [PATCH 2/4] Introducing 1st real unit test of the server Added a new unit test 'test/server.cpp'. The pre-existing unit test test/kiwixserve.cpp tests kiwixlib indirectly by running the kiwix-serve executable which may be built with another version of the library. Included with this commit is the cpp-httplib C++ HTTP/HTTPS library (https://github.com/yhirose/cpp-httplib, v0.5.11). The new file test/httplib.h was copied from https://raw.githubusercontent.com/yhirose/cpp-httplib/v0.5.11/httplib.h --- .../wikipedia_en_ray_charles_mini_2020-03.zim | Bin 0 -> 569304 bytes test/httplib.h | 5101 +++++++++++++++++ test/meson.build | 10 +- test/server.cpp | 223 + 4 files changed, 5333 insertions(+), 1 deletion(-) create mode 100644 test/data/wikipedia_en_ray_charles_mini_2020-03.zim create mode 100644 test/httplib.h create mode 100644 test/server.cpp diff --git a/test/data/wikipedia_en_ray_charles_mini_2020-03.zim b/test/data/wikipedia_en_ray_charles_mini_2020-03.zim new file mode 100644 index 0000000000000000000000000000000000000000..e0edcca508649e06c78b750dd93e095fc281ef46 GIT binary patch literal 569304 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

0LkxcGq7m;|AW0EFDeP{EBk|_VYaA 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%0AI`*>B0cR$H2WoJ3gU~!On8YZ@@Jh%!>>p%J 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

;heIfNw1A)o;A8FtUNtp(}e<-D2l!+rgL>!D;* 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%0AC zQu_K1&{}6wiMDUN0qFo(KPQMq7uVUNYH(MS!6@R%9ub9#8*aNjQzj^L1&qBun-Cq; z?4wKvq+{};o1{LaK6#}Bg+IJTRlUFwDxufeHaV4v3G3ms5Y9RTtKW>^&*)ky3If#U z-DpFXD|$R$^7u-sedMzUaz9s`M`DVy$A6M!yEU?V=XZ@56<)SNHYUAfwkdyE-Hf&4RIaHFeWo2zF1L?q&j<3tlwumgH8opg zE2$GgJtkKwYKpJ>ltBccUn*?%aH`WMXnLm4dqR(U|IaJT?Vp{nLt2EkK%J!vX5tG< z=Wj^O*{8?ux%W)jA5>KlX%tnSkA{Trf8(R+th5~&BJI@Nk$>)$RWGa-^v&?vP~fDP z*&3}vnj=gC4Q1_%mJS4{0{R-2F_?|&JNv8Dy-Jbw2G!N>-)R<(Bdk)nsph{5cf|P= zNw@b#rB4>Zzpjl`PK>P;x3R*+ahHzNG}>zmIn(w

#p_m?CtS3JED3o-TN2z)EG- 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�)&q7@s6qKpDJu;%s#I{n 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

o5R_{1wZE?){ZK?Bh236;u7no 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 Q&+6pq4{Cc=Whhwx12XzZr2qf` literal 0 HcmV?d00001 diff --git a/test/httplib.h b/test/httplib.h new file mode 100644 index 000000000..d9611df35 --- /dev/null +++ b/test/httplib.h @@ -0,0 +1,5101 @@ +// +// httplib.h +// +// Copyright (c) 2020 Yuji Hirose. All rights reserved. +// MIT License +// + +#ifndef CPPHTTPLIB_HTTPLIB_H +#define CPPHTTPLIB_HTTPLIB_H + +/* + * Configuration + */ + +#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND +#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND 5 +#endif + +#ifndef CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND +#define CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND 0 +#endif + +#ifndef CPPHTTPLIB_KEEPALIVE_MAX_COUNT +#define CPPHTTPLIB_KEEPALIVE_MAX_COUNT 5 +#endif + +#ifndef CPPHTTPLIB_READ_TIMEOUT_SECOND +#define CPPHTTPLIB_READ_TIMEOUT_SECOND 5 +#endif + +#ifndef CPPHTTPLIB_READ_TIMEOUT_USECOND +#define CPPHTTPLIB_READ_TIMEOUT_USECOND 0 +#endif + +#ifndef CPPHTTPLIB_REQUEST_URI_MAX_LENGTH +#define CPPHTTPLIB_REQUEST_URI_MAX_LENGTH 8192 +#endif + +#ifndef CPPHTTPLIB_REDIRECT_MAX_COUNT +#define CPPHTTPLIB_REDIRECT_MAX_COUNT 20 +#endif + +#ifndef CPPHTTPLIB_PAYLOAD_MAX_LENGTH +#define CPPHTTPLIB_PAYLOAD_MAX_LENGTH ((std::numeric_limits::max)()) +#endif + +#ifndef CPPHTTPLIB_RECV_BUFSIZ +#define CPPHTTPLIB_RECV_BUFSIZ size_t(4096u) +#endif + +#ifndef CPPHTTPLIB_THREAD_POOL_COUNT +#define CPPHTTPLIB_THREAD_POOL_COUNT \ + ((std::max)(1u, std::thread::hardware_concurrency() - 1)) +#endif + +/* + * Headers + */ + +#ifdef _WIN32 +#ifndef _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_WARNINGS +#endif //_CRT_SECURE_NO_WARNINGS + +#ifndef _CRT_NONSTDC_NO_DEPRECATE +#define _CRT_NONSTDC_NO_DEPRECATE +#endif //_CRT_NONSTDC_NO_DEPRECATE + +#if defined(_MSC_VER) +#ifdef _WIN64 +using ssize_t = __int64; +#else +using ssize_t = int; +#endif + +#if _MSC_VER < 1900 +#define snprintf _snprintf_s +#endif +#endif // _MSC_VER + +#ifndef S_ISREG +#define S_ISREG(m) (((m)&S_IFREG) == S_IFREG) +#endif // S_ISREG + +#ifndef S_ISDIR +#define S_ISDIR(m) (((m)&S_IFDIR) == S_IFDIR) +#endif // S_ISDIR + +#ifndef NOMINMAX +#define NOMINMAX +#endif // NOMINMAX + +#include +#include +#include + +#ifndef WSA_FLAG_NO_HANDLE_INHERIT +#define WSA_FLAG_NO_HANDLE_INHERIT 0x80 +#endif + +#ifdef _MSC_VER +#pragma comment(lib, "ws2_32.lib") +#endif + +#ifndef strcasecmp +#define strcasecmp _stricmp +#endif // strcasecmp + +using socket_t = SOCKET; +#ifdef CPPHTTPLIB_USE_POLL +#define poll(fds, nfds, timeout) WSAPoll(fds, nfds, timeout) +#endif + +#else // not _WIN32 + +#include +#include +#include +#include +#include +#ifdef CPPHTTPLIB_USE_POLL +#include +#endif +#include +#include +#include +#include +#include + +using socket_t = int; +#define INVALID_SOCKET (-1) +#endif //_WIN32 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +#include +#include +#include +#include + +#include +#include +#include + +// #if OPENSSL_VERSION_NUMBER < 0x1010100fL +// #error Sorry, OpenSSL versions prior to 1.1.1 are not supported +// #endif + +#if OPENSSL_VERSION_NUMBER < 0x10100000L +#include +inline const unsigned char *ASN1_STRING_get0_data(const ASN1_STRING *asn1) { + return M_ASN1_STRING_data(asn1); +} +#endif +#endif + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT +#include +#endif +/* + * Declaration + */ +namespace httplib { + +namespace detail { + +struct ci { + bool operator()(const std::string &s1, const std::string &s2) const { + return std::lexicographical_compare( + s1.begin(), s1.end(), s2.begin(), s2.end(), + [](char c1, char c2) { return ::tolower(c1) < ::tolower(c2); }); + } +}; + +} // namespace detail + +using Headers = std::multimap; + +using Params = std::multimap; +using Match = std::smatch; + +using Progress = std::function; + +struct Response; +using ResponseHandler = std::function; + +struct MultipartFormData { + std::string name; + std::string content; + std::string filename; + std::string content_type; +}; +using MultipartFormDataItems = std::vector; +using MultipartFormDataMap = std::multimap; + +class DataSink { +public: + DataSink() = default; + DataSink(const DataSink &) = delete; + DataSink &operator=(const DataSink &) = delete; + DataSink(DataSink &&) = delete; + DataSink &operator=(DataSink &&) = delete; + + std::function write; + std::function done; + std::function is_writable; +}; + +using ContentProvider = + std::function; + +using ContentReceiver = + std::function; + +using MultipartContentHeader = + std::function; + +class ContentReader { +public: + using Reader = std::function; + using MultipartReader = std::function; + + ContentReader(Reader reader, MultipartReader muitlpart_reader) + : reader_(reader), muitlpart_reader_(muitlpart_reader) {} + + bool operator()(MultipartContentHeader header, + ContentReceiver receiver) const { + return muitlpart_reader_(header, receiver); + } + + bool operator()(ContentReceiver receiver) const { return reader_(receiver); } + + Reader reader_; + MultipartReader muitlpart_reader_; +}; + +using Range = std::pair; +using Ranges = std::vector; + +struct Request { + std::string method; + std::string path; + Headers headers; + std::string body; + + std::string remote_addr; + int remote_port = -1; + + // for server + std::string version; + std::string target; + Params params; + MultipartFormDataMap files; + Ranges ranges; + Match matches; + + // for client + size_t redirect_count = CPPHTTPLIB_REDIRECT_MAX_COUNT; + ResponseHandler response_handler; + ContentReceiver content_receiver; + Progress progress; + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + const SSL *ssl; +#endif + + bool has_header(const char *key) const; + std::string get_header_value(const char *key, size_t id = 0) const; + size_t get_header_value_count(const char *key) const; + void set_header(const char *key, const char *val); + void set_header(const char *key, const std::string &val); + + bool has_param(const char *key) const; + std::string get_param_value(const char *key, size_t id = 0) const; + size_t get_param_value_count(const char *key) const; + + bool is_multipart_form_data() const; + + bool has_file(const char *key) const; + MultipartFormData get_file_value(const char *key) const; + + // private members... + size_t content_length; + ContentProvider content_provider; +}; + +struct Response { + std::string version; + int status = -1; + Headers headers; + std::string body; + + bool has_header(const char *key) const; + std::string get_header_value(const char *key, size_t id = 0) const; + size_t get_header_value_count(const char *key) const; + void set_header(const char *key, const char *val); + void set_header(const char *key, const std::string &val); + + void set_redirect(const char *url, int status = 302); + void set_content(const char *s, size_t n, const char *content_type); + void set_content(std::string s, const char *content_type); + + void set_content_provider( + size_t length, + std::function + provider, + std::function resource_releaser = [] {}); + + void set_chunked_content_provider( + std::function provider, + std::function resource_releaser = [] {}); + + Response() = default; + Response(const Response &) = default; + Response &operator=(const Response &) = default; + Response(Response &&) = default; + Response &operator=(Response &&) = default; + ~Response() { + if (content_provider_resource_releaser) { + content_provider_resource_releaser(); + } + } + + // private members... + size_t content_length = 0; + ContentProvider content_provider; + std::function content_provider_resource_releaser; +}; + +class Stream { +public: + virtual ~Stream() = default; + + virtual bool is_readable() const = 0; + virtual bool is_writable() const = 0; + + virtual ssize_t read(char *ptr, size_t size) = 0; + virtual ssize_t write(const char *ptr, size_t size) = 0; + virtual void get_remote_ip_and_port(std::string &ip, int &port) const = 0; + + template + ssize_t write_format(const char *fmt, const Args &... args); + ssize_t write(const char *ptr); + ssize_t write(const std::string &s); +}; + +class TaskQueue { +public: + TaskQueue() = default; + virtual ~TaskQueue() = default; + + virtual void enqueue(std::function fn) = 0; + virtual void shutdown() = 0; + + virtual void on_idle(){}; +}; + +class ThreadPool : public TaskQueue { +public: + explicit ThreadPool(size_t n) : shutdown_(false) { + while (n) { + threads_.emplace_back(worker(*this)); + n--; + } + } + + ThreadPool(const ThreadPool &) = delete; + ~ThreadPool() override = default; + + void enqueue(std::function fn) override { + std::unique_lock lock(mutex_); + jobs_.push_back(fn); + cond_.notify_one(); + } + + void shutdown() override { + // Stop all worker threads... + { + std::unique_lock lock(mutex_); + shutdown_ = true; + } + + cond_.notify_all(); + + // Join... + for (auto &t : threads_) { + t.join(); + } + } + +private: + struct worker { + explicit worker(ThreadPool &pool) : pool_(pool) {} + + void operator()() { + for (;;) { + std::function fn; + { + std::unique_lock lock(pool_.mutex_); + + pool_.cond_.wait( + lock, [&] { return !pool_.jobs_.empty() || pool_.shutdown_; }); + + if (pool_.shutdown_ && pool_.jobs_.empty()) { break; } + + fn = pool_.jobs_.front(); + pool_.jobs_.pop_front(); + } + + assert(true == static_cast(fn)); + fn(); + } + } + + ThreadPool &pool_; + }; + friend struct worker; + + std::vector threads_; + std::list> jobs_; + + bool shutdown_; + + std::condition_variable cond_; + std::mutex mutex_; +}; + +using Logger = std::function; + +class Server { +public: + using Handler = std::function; + using HandlerWithContentReader = std::function; + using Expect100ContinueHandler = + std::function; + + Server(); + + virtual ~Server(); + + virtual bool is_valid() const; + + Server &Get(const char *pattern, Handler handler); + Server &Post(const char *pattern, Handler handler); + Server &Post(const char *pattern, HandlerWithContentReader handler); + Server &Put(const char *pattern, Handler handler); + Server &Put(const char *pattern, HandlerWithContentReader handler); + Server &Patch(const char *pattern, Handler handler); + Server &Patch(const char *pattern, HandlerWithContentReader handler); + Server &Delete(const char *pattern, Handler handler); + Server &Delete(const char *pattern, HandlerWithContentReader handler); + Server &Options(const char *pattern, Handler handler); + + [[deprecated]] bool set_base_dir(const char *dir, + const char *mount_point = nullptr); + bool set_mount_point(const char *mount_point, const char *dir); + bool remove_mount_point(const char *mount_point); + void set_file_extension_and_mimetype_mapping(const char *ext, + const char *mime); + void set_file_request_handler(Handler handler); + + void set_error_handler(Handler handler); + void set_logger(Logger logger); + + void set_expect_100_continue_handler(Expect100ContinueHandler handler); + + void set_keep_alive_max_count(size_t count); + void set_read_timeout(time_t sec, time_t usec); + void set_payload_max_length(size_t length); + + bool bind_to_port(const char *host, int port, int socket_flags = 0); + int bind_to_any_port(const char *host, int socket_flags = 0); + bool listen_after_bind(); + + bool listen(const char *host, int port, int socket_flags = 0); + + bool is_running() const; + void stop(); + + std::function new_task_queue; + +protected: + bool process_request(Stream &strm, bool last_connection, + bool &connection_close, + const std::function &setup_request); + + size_t keep_alive_max_count_; + time_t read_timeout_sec_; + time_t read_timeout_usec_; + size_t payload_max_length_; + +private: + using Handlers = std::vector>; + using HandlersForContentReader = + std::vector>; + + socket_t create_server_socket(const char *host, int port, + int socket_flags) const; + int bind_internal(const char *host, int port, int socket_flags); + bool listen_internal(); + + bool routing(Request &req, Response &res, Stream &strm); + bool handle_file_request(Request &req, Response &res, bool head = false); + bool dispatch_request(Request &req, Response &res, Handlers &handlers); + bool dispatch_request_for_content_reader(Request &req, Response &res, + ContentReader content_reader, + HandlersForContentReader &handlers); + + bool parse_request_line(const char *s, Request &req); + bool write_response(Stream &strm, bool last_connection, const Request &req, + Response &res); + bool write_content_with_provider(Stream &strm, const Request &req, + Response &res, const std::string &boundary, + const std::string &content_type); + bool read_content(Stream &strm, Request &req, Response &res); + bool + read_content_with_content_receiver(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver); + bool read_content_core(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader mulitpart_header, + ContentReceiver multipart_receiver); + + virtual bool process_and_close_socket(socket_t sock); + + std::atomic is_running_; + std::atomic svr_sock_; + std::vector> base_dirs_; + std::map file_extension_and_mimetype_map_; + Handler file_request_handler_; + Handlers get_handlers_; + Handlers post_handlers_; + HandlersForContentReader post_handlers_for_content_reader_; + Handlers put_handlers_; + HandlersForContentReader put_handlers_for_content_reader_; + Handlers patch_handlers_; + HandlersForContentReader patch_handlers_for_content_reader_; + Handlers delete_handlers_; + HandlersForContentReader delete_handlers_for_content_reader_; + Handlers options_handlers_; + Handler error_handler_; + Logger logger_; + Expect100ContinueHandler expect_100_continue_handler_; +}; + +class Client { +public: + explicit Client(const std::string &host, int port = 80, + const std::string &client_cert_path = std::string(), + const std::string &client_key_path = std::string()); + + virtual ~Client(); + + virtual bool is_valid() const; + + std::shared_ptr Get(const char *path); + + std::shared_ptr Get(const char *path, const Headers &headers); + + std::shared_ptr Get(const char *path, Progress progress); + + std::shared_ptr Get(const char *path, const Headers &headers, + Progress progress); + + std::shared_ptr Get(const char *path, + ContentReceiver content_receiver); + + std::shared_ptr Get(const char *path, const Headers &headers, + ContentReceiver content_receiver); + + std::shared_ptr + Get(const char *path, ContentReceiver content_receiver, Progress progress); + + std::shared_ptr Get(const char *path, const Headers &headers, + ContentReceiver content_receiver, + Progress progress); + + std::shared_ptr Get(const char *path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver); + + std::shared_ptr Get(const char *path, const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, + Progress progress); + + std::shared_ptr Head(const char *path); + + std::shared_ptr Head(const char *path, const Headers &headers); + + std::shared_ptr Post(const char *path); + + std::shared_ptr Post(const char *path, const std::string &body, + const char *content_type); + + std::shared_ptr Post(const char *path, const Headers &headers, + const std::string &body, + const char *content_type); + + std::shared_ptr Post(const char *path, size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Post(const char *path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Post(const char *path, const Params ¶ms); + + std::shared_ptr Post(const char *path, const Headers &headers, + const Params ¶ms); + + std::shared_ptr Post(const char *path, + const MultipartFormDataItems &items); + + std::shared_ptr Post(const char *path, const Headers &headers, + const MultipartFormDataItems &items); + + std::shared_ptr Put(const char *path); + + std::shared_ptr Put(const char *path, const std::string &body, + const char *content_type); + + std::shared_ptr Put(const char *path, const Headers &headers, + const std::string &body, + const char *content_type); + + std::shared_ptr Put(const char *path, size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Put(const char *path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Put(const char *path, const Params ¶ms); + + std::shared_ptr Put(const char *path, const Headers &headers, + const Params ¶ms); + + std::shared_ptr Patch(const char *path, const std::string &body, + const char *content_type); + + std::shared_ptr Patch(const char *path, const Headers &headers, + const std::string &body, + const char *content_type); + + std::shared_ptr Patch(const char *path, size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Patch(const char *path, const Headers &headers, + size_t content_length, + ContentProvider content_provider, + const char *content_type); + + std::shared_ptr Delete(const char *path); + + std::shared_ptr Delete(const char *path, const std::string &body, + const char *content_type); + + std::shared_ptr Delete(const char *path, const Headers &headers); + + std::shared_ptr Delete(const char *path, const Headers &headers, + const std::string &body, + const char *content_type); + + std::shared_ptr Options(const char *path); + + std::shared_ptr Options(const char *path, const Headers &headers); + + bool send(const Request &req, Response &res); + + bool send(const std::vector &requests, + std::vector &responses); + + void stop(); + + void set_timeout_sec(time_t timeout_sec); + + void set_read_timeout(time_t sec, time_t usec); + + void set_keep_alive_max_count(size_t count); + + void set_basic_auth(const char *username, const char *password); + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + void set_digest_auth(const char *username, const char *password); +#endif + + void set_follow_location(bool on); + + void set_compress(bool on); + + void set_interface(const char *intf); + + void set_proxy(const char *host, int port); + + void set_proxy_basic_auth(const char *username, const char *password); + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + void set_proxy_digest_auth(const char *username, const char *password); +#endif + + void set_logger(Logger logger); + +protected: + bool process_request(Stream &strm, const Request &req, Response &res, + bool last_connection, bool &connection_close); + + std::atomic sock_; + + const std::string host_; + const int port_; + const std::string host_and_port_; + + // Settings + std::string client_cert_path_; + std::string client_key_path_; + + time_t timeout_sec_ = 300; + time_t read_timeout_sec_ = CPPHTTPLIB_READ_TIMEOUT_SECOND; + time_t read_timeout_usec_ = CPPHTTPLIB_READ_TIMEOUT_USECOND; + + size_t keep_alive_max_count_ = CPPHTTPLIB_KEEPALIVE_MAX_COUNT; + + std::string basic_auth_username_; + std::string basic_auth_password_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + std::string digest_auth_username_; + std::string digest_auth_password_; +#endif + + bool follow_location_ = false; + + bool compress_ = false; + + std::string interface_; + + std::string proxy_host_; + int proxy_port_; + + std::string proxy_basic_auth_username_; + std::string proxy_basic_auth_password_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + std::string proxy_digest_auth_username_; + std::string proxy_digest_auth_password_; +#endif + + Logger logger_; + + void copy_settings(const Client &rhs) { + client_cert_path_ = rhs.client_cert_path_; + client_key_path_ = rhs.client_key_path_; + timeout_sec_ = rhs.timeout_sec_; + read_timeout_sec_ = rhs.read_timeout_sec_; + read_timeout_usec_ = rhs.read_timeout_usec_; + keep_alive_max_count_ = rhs.keep_alive_max_count_; + basic_auth_username_ = rhs.basic_auth_username_; + basic_auth_password_ = rhs.basic_auth_password_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + digest_auth_username_ = rhs.digest_auth_username_; + digest_auth_password_ = rhs.digest_auth_password_; +#endif + follow_location_ = rhs.follow_location_; + compress_ = rhs.compress_; + interface_ = rhs.interface_; + proxy_host_ = rhs.proxy_host_; + proxy_port_ = rhs.proxy_port_; + proxy_basic_auth_username_ = rhs.proxy_basic_auth_username_; + proxy_basic_auth_password_ = rhs.proxy_basic_auth_password_; +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + proxy_digest_auth_username_ = rhs.proxy_digest_auth_username_; + proxy_digest_auth_password_ = rhs.proxy_digest_auth_password_; +#endif + logger_ = rhs.logger_; + } + +private: + socket_t create_client_socket() const; + bool read_response_line(Stream &strm, Response &res); + bool write_request(Stream &strm, const Request &req, bool last_connection); + bool redirect(const Request &req, Response &res); + bool handle_request(Stream &strm, const Request &req, Response &res, + bool last_connection, bool &connection_close); +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + bool connect(socket_t sock, Response &res, bool &error); +#endif + + std::shared_ptr send_with_content_provider( + const char *method, const char *path, const Headers &headers, + const std::string &body, size_t content_length, + ContentProvider content_provider, const char *content_type); + + virtual bool process_and_close_socket( + socket_t sock, size_t request_count, + std::function + callback); + + virtual bool is_ssl() const; +}; + +inline void Get(std::vector &requests, const char *path, + const Headers &headers) { + Request req; + req.method = "GET"; + req.path = path; + req.headers = headers; + requests.emplace_back(std::move(req)); +} + +inline void Get(std::vector &requests, const char *path) { + Get(requests, path, Headers()); +} + +inline void Post(std::vector &requests, const char *path, + const Headers &headers, const std::string &body, + const char *content_type) { + Request req; + req.method = "POST"; + req.path = path; + req.headers = headers; + if (content_type) { req.headers.emplace("Content-Type", content_type); } + req.body = body; + requests.emplace_back(std::move(req)); +} + +inline void Post(std::vector &requests, const char *path, + const std::string &body, const char *content_type) { + Post(requests, path, Headers(), body, content_type); +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +class SSLServer : public Server { +public: + SSLServer(const char *cert_path, const char *private_key_path, + const char *client_ca_cert_file_path = nullptr, + const char *client_ca_cert_dir_path = nullptr); + + SSLServer(X509 *cert, EVP_PKEY *private_key, + X509_STORE *client_ca_cert_store = nullptr); + + ~SSLServer() override; + + bool is_valid() const override; + +private: + bool process_and_close_socket(socket_t sock) override; + + SSL_CTX *ctx_; + std::mutex ctx_mutex_; +}; + +class SSLClient : public Client { +public: + explicit SSLClient(const std::string &host, int port = 443, + const std::string &client_cert_path = std::string(), + const std::string &client_key_path = std::string()); + + SSLClient(const std::string &host, int port, X509 *client_cert, + EVP_PKEY *client_key); + + ~SSLClient() override; + + bool is_valid() const override; + + void set_ca_cert_path(const char *ca_ceert_file_path, + const char *ca_cert_dir_path = nullptr); + + void set_ca_cert_store(X509_STORE *ca_cert_store); + + void enable_server_certificate_verification(bool enabled); + + long get_openssl_verify_result() const; + + SSL_CTX *ssl_context() const; + +private: + bool process_and_close_socket( + socket_t sock, size_t request_count, + std::function + callback) override; + bool is_ssl() const override; + + bool verify_host(X509 *server_cert) const; + bool verify_host_with_subject_alt_name(X509 *server_cert) const; + bool verify_host_with_common_name(X509 *server_cert) const; + bool check_host_name(const char *pattern, size_t pattern_len) const; + + SSL_CTX *ctx_; + std::mutex ctx_mutex_; + std::vector host_components_; + + std::string ca_cert_file_path_; + std::string ca_cert_dir_path_; + X509_STORE *ca_cert_store_ = nullptr; + bool server_certificate_verification_ = false; + long verify_result_ = 0; +}; +#endif + +// ---------------------------------------------------------------------------- + +/* + * Implementation + */ + +namespace detail { + +inline bool is_hex(char c, int &v) { + if (0x20 <= c && isdigit(c)) { + v = c - '0'; + return true; + } else if ('A' <= c && c <= 'F') { + v = c - 'A' + 10; + return true; + } else if ('a' <= c && c <= 'f') { + v = c - 'a' + 10; + return true; + } + return false; +} + +inline bool from_hex_to_i(const std::string &s, size_t i, size_t cnt, + int &val) { + if (i >= s.size()) { return false; } + + val = 0; + for (; cnt; i++, cnt--) { + if (!s[i]) { return false; } + int v = 0; + if (is_hex(s[i], v)) { + val = val * 16 + v; + } else { + return false; + } + } + return true; +} + +inline std::string from_i_to_hex(size_t n) { + const char *charset = "0123456789abcdef"; + std::string ret; + do { + ret = charset[n & 15] + ret; + n >>= 4; + } while (n > 0); + return ret; +} + +inline size_t to_utf8(int code, char *buff) { + if (code < 0x0080) { + buff[0] = (code & 0x7F); + return 1; + } else if (code < 0x0800) { + buff[0] = static_cast(0xC0 | ((code >> 6) & 0x1F)); + buff[1] = static_cast(0x80 | (code & 0x3F)); + return 2; + } else if (code < 0xD800) { + buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); + buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[2] = static_cast(0x80 | (code & 0x3F)); + return 3; + } else if (code < 0xE000) { // D800 - DFFF is invalid... + return 0; + } else if (code < 0x10000) { + buff[0] = static_cast(0xE0 | ((code >> 12) & 0xF)); + buff[1] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[2] = static_cast(0x80 | (code & 0x3F)); + return 3; + } else if (code < 0x110000) { + buff[0] = static_cast(0xF0 | ((code >> 18) & 0x7)); + buff[1] = static_cast(0x80 | ((code >> 12) & 0x3F)); + buff[2] = static_cast(0x80 | ((code >> 6) & 0x3F)); + buff[3] = static_cast(0x80 | (code & 0x3F)); + return 4; + } + + // NOTREACHED + return 0; +} + +// NOTE: This code came up with the following stackoverflow post: +// https://stackoverflow.com/questions/180947/base64-decode-snippet-in-c +inline std::string base64_encode(const std::string &in) { + static const auto lookup = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + std::string out; + out.reserve(in.size()); + + int val = 0; + int valb = -6; + + for (auto c : in) { + val = (val << 8) + static_cast(c); + valb += 8; + while (valb >= 0) { + out.push_back(lookup[(val >> valb) & 0x3F]); + valb -= 6; + } + } + + if (valb > -6) { out.push_back(lookup[((val << 8) >> (valb + 8)) & 0x3F]); } + + while (out.size() % 4) { + out.push_back('='); + } + + return out; +} + +inline bool is_file(const std::string &path) { + struct stat st; + return stat(path.c_str(), &st) >= 0 && S_ISREG(st.st_mode); +} + +inline bool is_dir(const std::string &path) { + struct stat st; + return stat(path.c_str(), &st) >= 0 && S_ISDIR(st.st_mode); +} + +inline bool is_valid_path(const std::string &path) { + size_t level = 0; + size_t i = 0; + + // Skip slash + while (i < path.size() && path[i] == '/') { + i++; + } + + while (i < path.size()) { + // Read component + auto beg = i; + while (i < path.size() && path[i] != '/') { + i++; + } + + auto len = i - beg; + assert(len > 0); + + if (!path.compare(beg, len, ".")) { + ; + } else if (!path.compare(beg, len, "..")) { + if (level == 0) { return false; } + level--; + } else { + level++; + } + + // Skip slash + while (i < path.size() && path[i] == '/') { + i++; + } + } + + return true; +} + +inline void read_file(const std::string &path, std::string &out) { + std::ifstream fs(path, std::ios_base::binary); + fs.seekg(0, std::ios_base::end); + auto size = fs.tellg(); + fs.seekg(0); + out.resize(static_cast(size)); + fs.read(&out[0], size); +} + +inline std::string file_extension(const std::string &path) { + std::smatch m; + static auto re = std::regex("\\.([a-zA-Z0-9]+)$"); + if (std::regex_search(path, m, re)) { return m[1].str(); } + return std::string(); +} + +template void split(const char *b, const char *e, char d, Fn fn) { + int i = 0; + int beg = 0; + + while (e ? (b + i != e) : (b[i] != '\0')) { + if (b[i] == d) { + fn(&b[beg], &b[i]); + beg = i + 1; + } + i++; + } + + if (i) { fn(&b[beg], &b[i]); } +} + +// NOTE: until the read size reaches `fixed_buffer_size`, use `fixed_buffer` +// to store data. The call can set memory on stack for performance. +class stream_line_reader { +public: + stream_line_reader(Stream &strm, char *fixed_buffer, size_t fixed_buffer_size) + : strm_(strm), fixed_buffer_(fixed_buffer), + fixed_buffer_size_(fixed_buffer_size) {} + + const char *ptr() const { + if (glowable_buffer_.empty()) { + return fixed_buffer_; + } else { + return glowable_buffer_.data(); + } + } + + size_t size() const { + if (glowable_buffer_.empty()) { + return fixed_buffer_used_size_; + } else { + return glowable_buffer_.size(); + } + } + + bool end_with_crlf() const { + auto end = ptr() + size(); + return size() >= 2 && end[-2] == '\r' && end[-1] == '\n'; + } + + bool getline() { + fixed_buffer_used_size_ = 0; + glowable_buffer_.clear(); + + for (size_t i = 0;; i++) { + char byte; + auto n = strm_.read(&byte, 1); + + if (n < 0) { + return false; + } else if (n == 0) { + if (i == 0) { + return false; + } else { + break; + } + } + + append(byte); + + if (byte == '\n') { break; } + } + + return true; + } + +private: + void append(char c) { + if (fixed_buffer_used_size_ < fixed_buffer_size_ - 1) { + fixed_buffer_[fixed_buffer_used_size_++] = c; + fixed_buffer_[fixed_buffer_used_size_] = '\0'; + } else { + if (glowable_buffer_.empty()) { + assert(fixed_buffer_[fixed_buffer_used_size_] == '\0'); + glowable_buffer_.assign(fixed_buffer_, fixed_buffer_used_size_); + } + glowable_buffer_ += c; + } + } + + Stream &strm_; + char *fixed_buffer_; + const size_t fixed_buffer_size_; + size_t fixed_buffer_used_size_ = 0; + std::string glowable_buffer_; +}; + +inline int close_socket(socket_t sock) { +#ifdef _WIN32 + return closesocket(sock); +#else + return close(sock); +#endif +} + +inline int select_read(socket_t sock, time_t sec, time_t usec) { +#ifdef CPPHTTPLIB_USE_POLL + struct pollfd pfd_read; + pfd_read.fd = sock; + pfd_read.events = POLLIN; + + auto timeout = static_cast(sec * 1000 + usec / 1000); + + return poll(&pfd_read, 1, timeout); +#else + fd_set fds; + FD_ZERO(&fds); + FD_SET(sock, &fds); + + timeval tv; + tv.tv_sec = static_cast(sec); + tv.tv_usec = static_cast(usec); + + return select(static_cast(sock + 1), &fds, nullptr, nullptr, &tv); +#endif +} + +inline int select_write(socket_t sock, time_t sec, time_t usec) { +#ifdef CPPHTTPLIB_USE_POLL + struct pollfd pfd_read; + pfd_read.fd = sock; + pfd_read.events = POLLOUT; + + auto timeout = static_cast(sec * 1000 + usec / 1000); + + return poll(&pfd_read, 1, timeout); +#else + fd_set fds; + FD_ZERO(&fds); + FD_SET(sock, &fds); + + timeval tv; + tv.tv_sec = static_cast(sec); + tv.tv_usec = static_cast(usec); + + return select(static_cast(sock + 1), nullptr, &fds, nullptr, &tv); +#endif +} + +inline bool wait_until_socket_is_ready(socket_t sock, time_t sec, time_t usec) { +#ifdef CPPHTTPLIB_USE_POLL + struct pollfd pfd_read; + pfd_read.fd = sock; + pfd_read.events = POLLIN | POLLOUT; + + auto timeout = static_cast(sec * 1000 + usec / 1000); + + if (poll(&pfd_read, 1, timeout) > 0 && + pfd_read.revents & (POLLIN | POLLOUT)) { + int error = 0; + socklen_t len = sizeof(error); + return getsockopt(sock, SOL_SOCKET, SO_ERROR, + reinterpret_cast(&error), &len) >= 0 && + !error; + } + return false; +#else + fd_set fdsr; + FD_ZERO(&fdsr); + FD_SET(sock, &fdsr); + + auto fdsw = fdsr; + auto fdse = fdsr; + + timeval tv; + tv.tv_sec = static_cast(sec); + tv.tv_usec = static_cast(usec); + + if (select(static_cast(sock + 1), &fdsr, &fdsw, &fdse, &tv) > 0 && + (FD_ISSET(sock, &fdsr) || FD_ISSET(sock, &fdsw))) { + int error = 0; + socklen_t len = sizeof(error); + return getsockopt(sock, SOL_SOCKET, SO_ERROR, + reinterpret_cast(&error), &len) >= 0 && + !error; + } + return false; +#endif +} + +class SocketStream : public Stream { +public: + SocketStream(socket_t sock, time_t read_timeout_sec, + time_t read_timeout_usec); + ~SocketStream() override; + + bool is_readable() const override; + bool is_writable() const override; + ssize_t read(char *ptr, size_t size) override; + ssize_t write(const char *ptr, size_t size) override; + void get_remote_ip_and_port(std::string &ip, int &port) const override; + +private: + socket_t sock_; + time_t read_timeout_sec_; + time_t read_timeout_usec_; +}; + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +class SSLSocketStream : public Stream { +public: + SSLSocketStream(socket_t sock, SSL *ssl, time_t read_timeout_sec, + time_t read_timeout_usec); + ~SSLSocketStream() override; + + bool is_readable() const override; + bool is_writable() const override; + ssize_t read(char *ptr, size_t size) override; + ssize_t write(const char *ptr, size_t size) override; + void get_remote_ip_and_port(std::string &ip, int &port) const override; + +private: + socket_t sock_; + SSL *ssl_; + time_t read_timeout_sec_; + time_t read_timeout_usec_; +}; +#endif + +class BufferStream : public Stream { +public: + BufferStream() = default; + ~BufferStream() override = default; + + bool is_readable() const override; + bool is_writable() const override; + ssize_t read(char *ptr, size_t size) override; + ssize_t write(const char *ptr, size_t size) override; + void get_remote_ip_and_port(std::string &ip, int &port) const override; + + const std::string &get_buffer() const; + +private: + std::string buffer; + size_t position = 0; +}; + +template +inline bool process_socket(bool is_client_request, socket_t sock, + size_t keep_alive_max_count, time_t read_timeout_sec, + time_t read_timeout_usec, T callback) { + assert(keep_alive_max_count > 0); + + auto ret = false; + + if (keep_alive_max_count > 1) { + auto count = keep_alive_max_count; + while (count > 0 && + (is_client_request || + select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, + CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { + SocketStream strm(sock, read_timeout_sec, read_timeout_usec); + auto last_connection = count == 1; + auto connection_close = false; + + ret = callback(strm, last_connection, connection_close); + if (!ret || connection_close) { break; } + + count--; + } + } else { // keep_alive_max_count is 0 or 1 + SocketStream strm(sock, read_timeout_sec, read_timeout_usec); + auto dummy_connection_close = false; + ret = callback(strm, true, dummy_connection_close); + } + + return ret; +} + +template +inline bool process_and_close_socket(bool is_client_request, socket_t sock, + size_t keep_alive_max_count, + time_t read_timeout_sec, + time_t read_timeout_usec, T callback) { + auto ret = process_socket(is_client_request, sock, keep_alive_max_count, + read_timeout_sec, read_timeout_usec, callback); + close_socket(sock); + return ret; +} + +inline int shutdown_socket(socket_t sock) { +#ifdef _WIN32 + return shutdown(sock, SD_BOTH); +#else + return shutdown(sock, SHUT_RDWR); +#endif +} + +template +socket_t create_socket(const char *host, int port, Fn fn, + int socket_flags = 0) { +#ifdef _WIN32 +#define SO_SYNCHRONOUS_NONALERT 0x20 +#define SO_OPENTYPE 0x7008 + + int opt = SO_SYNCHRONOUS_NONALERT; + setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *)&opt, + sizeof(opt)); +#endif + + // Get address info + struct addrinfo hints; + struct addrinfo *result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = socket_flags; + hints.ai_protocol = 0; + + auto service = std::to_string(port); + + if (getaddrinfo(host, service.c_str(), &hints, &result)) { + return INVALID_SOCKET; + } + + for (auto rp = result; rp; rp = rp->ai_next) { + // Create a socket +#ifdef _WIN32 + auto sock = WSASocketW(rp->ai_family, rp->ai_socktype, rp->ai_protocol, + nullptr, 0, WSA_FLAG_NO_HANDLE_INHERIT); + /** + * Since the WSA_FLAG_NO_HANDLE_INHERIT is only supported on Windows 7 SP1 + * and above the socket creation fails on older Windows Systems. + * + * Let's try to create a socket the old way in this case. + * + * Reference: + * https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketa + * + * WSA_FLAG_NO_HANDLE_INHERIT: + * This flag is supported on Windows 7 with SP1, Windows Server 2008 R2 with + * SP1, and later + * + */ + if (sock == INVALID_SOCKET) { + sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + } +#else + auto sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); +#endif + if (sock == INVALID_SOCKET) { continue; } + +#ifndef _WIN32 + if (fcntl(sock, F_SETFD, FD_CLOEXEC) == -1) { continue; } +#endif + + // Make 'reuse address' option available + int yes = 1; + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, reinterpret_cast(&yes), + sizeof(yes)); +#ifdef SO_REUSEPORT + setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, reinterpret_cast(&yes), + sizeof(yes)); +#endif + + // bind or connect + if (fn(sock, *rp)) { + freeaddrinfo(result); + return sock; + } + + close_socket(sock); + } + + freeaddrinfo(result); + return INVALID_SOCKET; +} + +inline void set_nonblocking(socket_t sock, bool nonblocking) { +#ifdef _WIN32 + auto flags = nonblocking ? 1UL : 0UL; + ioctlsocket(sock, FIONBIO, &flags); +#else + auto flags = fcntl(sock, F_GETFL, 0); + fcntl(sock, F_SETFL, + nonblocking ? (flags | O_NONBLOCK) : (flags & (~O_NONBLOCK))); +#endif +} + +inline bool is_connection_error() { +#ifdef _WIN32 + return WSAGetLastError() != WSAEWOULDBLOCK; +#else + return errno != EINPROGRESS; +#endif +} + +inline bool bind_ip_address(socket_t sock, const char *host) { + struct addrinfo hints; + struct addrinfo *result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = 0; + + if (getaddrinfo(host, "0", &hints, &result)) { return false; } + + auto ret = false; + for (auto rp = result; rp; rp = rp->ai_next) { + const auto &ai = *rp; + if (!::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { + ret = true; + break; + } + } + + freeaddrinfo(result); + return ret; +} + +inline std::string if2ip(const std::string &ifn) { +#ifndef _WIN32 + struct ifaddrs *ifap; + getifaddrs(&ifap); + for (auto ifa = ifap; ifa; ifa = ifa->ifa_next) { + if (ifa->ifa_addr && ifn == ifa->ifa_name) { + if (ifa->ifa_addr->sa_family == AF_INET) { + auto sa = reinterpret_cast(ifa->ifa_addr); + char buf[INET_ADDRSTRLEN]; + if (inet_ntop(AF_INET, &sa->sin_addr, buf, INET_ADDRSTRLEN)) { + freeifaddrs(ifap); + return std::string(buf, INET_ADDRSTRLEN); + } + } + } + } + freeifaddrs(ifap); +#endif + return std::string(); +} + +inline socket_t create_client_socket(const char *host, int port, + time_t timeout_sec, + const std::string &intf) { + return create_socket( + host, port, [&](socket_t sock, struct addrinfo &ai) -> bool { + if (!intf.empty()) { + auto ip = if2ip(intf); + if (ip.empty()) { ip = intf; } + if (!bind_ip_address(sock, ip.c_str())) { return false; } + } + + set_nonblocking(sock, true); + + auto ret = + ::connect(sock, ai.ai_addr, static_cast(ai.ai_addrlen)); + if (ret < 0) { + if (is_connection_error() || + !wait_until_socket_is_ready(sock, timeout_sec, 0)) { + close_socket(sock); + return false; + } + } + + set_nonblocking(sock, false); + return true; + }); +} + +inline void get_remote_ip_and_port(const struct sockaddr_storage &addr, + socklen_t addr_len, std::string &ip, + int &port) { + if (addr.ss_family == AF_INET) { + port = ntohs(reinterpret_cast(&addr)->sin_port); + } else if (addr.ss_family == AF_INET6) { + port = + ntohs(reinterpret_cast(&addr)->sin6_port); + } + + std::array ipstr{}; + if (!getnameinfo(reinterpret_cast(&addr), addr_len, + ipstr.data(), static_cast(ipstr.size()), nullptr, + 0, NI_NUMERICHOST)) { + ip = ipstr.data(); + } +} + +inline void get_remote_ip_and_port(socket_t sock, std::string &ip, int &port) { + struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + + if (!getpeername(sock, reinterpret_cast(&addr), + &addr_len)) { + get_remote_ip_and_port(addr, addr_len, ip, port); + } +} + +inline const char * +find_content_type(const std::string &path, + const std::map &user_data) { + auto ext = file_extension(path); + + auto it = user_data.find(ext); + if (it != user_data.end()) { return it->second.c_str(); } + + if (ext == "txt") { + return "text/plain"; + } else if (ext == "html" || ext == "htm") { + return "text/html"; + } else if (ext == "css") { + return "text/css"; + } else if (ext == "jpeg" || ext == "jpg") { + return "image/jpg"; + } else if (ext == "png") { + return "image/png"; + } else if (ext == "gif") { + return "image/gif"; + } else if (ext == "svg") { + return "image/svg+xml"; + } else if (ext == "ico") { + return "image/x-icon"; + } else if (ext == "json") { + return "application/json"; + } else if (ext == "pdf") { + return "application/pdf"; + } else if (ext == "js") { + return "application/javascript"; + } else if (ext == "wasm") { + return "application/wasm"; + } else if (ext == "xml") { + return "application/xml"; + } else if (ext == "xhtml") { + return "application/xhtml+xml"; + } + return nullptr; +} + +inline const char *status_message(int status) { + switch (status) { + case 100: return "Continue"; + case 101: return "Switching Protocol"; + case 102: return "Processing"; + case 103: return "Early Hints"; + case 200: return "OK"; + case 201: return "Created"; + case 202: return "Accepted"; + case 203: return "Non-Authoritative Information"; + case 204: return "No Content"; + case 205: return "Reset Content"; + case 206: return "Partial Content"; + case 207: return "Multi-Status"; + case 208: return "Already Reported"; + case 226: return "IM Used"; + case 300: return "Multiple Choice"; + case 301: return "Moved Permanently"; + case 302: return "Found"; + case 303: return "See Other"; + case 304: return "Not Modified"; + case 305: return "Use Proxy"; + case 306: return "unused"; + case 307: return "Temporary Redirect"; + case 308: return "Permanent Redirect"; + case 400: return "Bad Request"; + case 401: return "Unauthorized"; + case 402: return "Payment Required"; + case 403: return "Forbidden"; + case 404: return "Not Found"; + case 405: return "Method Not Allowed"; + case 406: return "Not Acceptable"; + case 407: return "Proxy Authentication Required"; + case 408: return "Request Timeout"; + case 409: return "Conflict"; + case 410: return "Gone"; + case 411: return "Length Required"; + case 412: return "Precondition Failed"; + case 413: return "Payload Too Large"; + case 414: return "URI Too Long"; + case 415: return "Unsupported Media Type"; + case 416: return "Range Not Satisfiable"; + case 417: return "Expectation Failed"; + case 418: return "I'm a teapot"; + case 421: return "Misdirected Request"; + case 422: return "Unprocessable Entity"; + case 423: return "Locked"; + case 424: return "Failed Dependency"; + case 425: return "Too Early"; + case 426: return "Upgrade Required"; + case 428: return "Precondition Required"; + case 429: return "Too Many Requests"; + case 431: return "Request Header Fields Too Large"; + case 451: return "Unavailable For Legal Reasons"; + case 501: return "Not Implemented"; + case 502: return "Bad Gateway"; + case 503: return "Service Unavailable"; + case 504: return "Gateway Timeout"; + case 505: return "HTTP Version Not Supported"; + case 506: return "Variant Also Negotiates"; + case 507: return "Insufficient Storage"; + case 508: return "Loop Detected"; + case 510: return "Not Extended"; + case 511: return "Network Authentication Required"; + + default: + case 500: return "Internal Server Error"; + } +} + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT +inline bool can_compress(const std::string &content_type) { + return !content_type.find("text/") || content_type == "image/svg+xml" || + content_type == "application/javascript" || + content_type == "application/json" || + content_type == "application/xml" || + content_type == "application/xhtml+xml"; +} + +inline bool compress(std::string &content) { + z_stream strm; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + auto ret = deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 31, 8, + Z_DEFAULT_STRATEGY); + if (ret != Z_OK) { return false; } + + strm.avail_in = static_cast(content.size()); + strm.next_in = + const_cast(reinterpret_cast(content.data())); + + std::string compressed; + + std::array buff{}; + do { + strm.avail_out = buff.size(); + strm.next_out = reinterpret_cast(buff.data()); + ret = deflate(&strm, Z_FINISH); + assert(ret != Z_STREAM_ERROR); + compressed.append(buff.data(), buff.size() - strm.avail_out); + } while (strm.avail_out == 0); + + assert(ret == Z_STREAM_END); + assert(strm.avail_in == 0); + + content.swap(compressed); + + deflateEnd(&strm); + return true; +} + +class decompressor { +public: + decompressor() { + std::memset(&strm, 0, sizeof(strm)); + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + + // 15 is the value of wbits, which should be at the maximum possible value + // to ensure that any gzip stream can be decoded. The offset of 32 specifies + // that the stream type should be automatically detected either gzip or + // deflate. + is_valid_ = inflateInit2(&strm, 32 + 15) == Z_OK; + } + + ~decompressor() { inflateEnd(&strm); } + + bool is_valid() const { return is_valid_; } + + template + bool decompress(const char *data, size_t data_length, T callback) { + int ret = Z_OK; + + strm.avail_in = static_cast(data_length); + strm.next_in = const_cast(reinterpret_cast(data)); + + std::array buff{}; + do { + strm.avail_out = buff.size(); + strm.next_out = reinterpret_cast(buff.data()); + + ret = inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); + switch (ret) { + case Z_NEED_DICT: + case Z_DATA_ERROR: + case Z_MEM_ERROR: inflateEnd(&strm); return false; + } + + if (!callback(buff.data(), buff.size() - strm.avail_out)) { + return false; + } + } while (strm.avail_out == 0); + + return ret == Z_OK || ret == Z_STREAM_END; + } + +private: + bool is_valid_; + z_stream strm; +}; +#endif + +inline bool has_header(const Headers &headers, const char *key) { + return headers.find(key) != headers.end(); +} + +inline const char *get_header_value(const Headers &headers, const char *key, + size_t id = 0, const char *def = nullptr) { + auto it = headers.find(key); + std::advance(it, static_cast(id)); + if (it != headers.end()) { return it->second.c_str(); } + return def; +} + +inline uint64_t get_header_value_uint64(const Headers &headers, const char *key, + uint64_t def = 0) { + auto it = headers.find(key); + if (it != headers.end()) { + return std::strtoull(it->second.data(), nullptr, 10); + } + return def; +} + +inline bool read_headers(Stream &strm, Headers &headers) { + const auto bufsiz = 2048; + char buf[bufsiz]; + stream_line_reader line_reader(strm, buf, bufsiz); + + for (;;) { + if (!line_reader.getline()) { return false; } + + // Check if the line ends with CRLF. + if (line_reader.end_with_crlf()) { + // Blank line indicates end of headers. + if (line_reader.size() == 2) { break; } + } else { + continue; // Skip invalid line. + } + + // Skip trailing spaces and tabs. + auto end = line_reader.ptr() + line_reader.size() - 2; + while (line_reader.ptr() < end && (end[-1] == ' ' || end[-1] == '\t')) { + end--; + } + + // Horizontal tab and ' ' are considered whitespace and are ignored when on + // the left or right side of the header value: + // - https://stackoverflow.com/questions/50179659/ + // - https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html + static const std::regex re(R"(([^:]+):[\t ]*(.+))"); + + std::cmatch m; + if (std::regex_match(line_reader.ptr(), end, m, re)) { + auto key = std::string(m[1]); + auto val = std::string(m[2]); + headers.emplace(key, val); + } + } + + return true; +} + +inline bool read_content_with_length(Stream &strm, uint64_t len, + Progress progress, ContentReceiver out) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + + uint64_t r = 0; + while (r < len) { + auto read_len = static_cast(len - r); + auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); + if (n <= 0) { return false; } + + if (!out(buf, static_cast(n))) { return false; } + + r += static_cast(n); + + if (progress) { + if (!progress(r, len)) { return false; } + } + } + + return true; +} + +inline void skip_content_with_length(Stream &strm, uint64_t len) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + uint64_t r = 0; + while (r < len) { + auto read_len = static_cast(len - r); + auto n = strm.read(buf, (std::min)(read_len, CPPHTTPLIB_RECV_BUFSIZ)); + if (n <= 0) { return; } + r += static_cast(n); + } +} + +inline bool read_content_without_length(Stream &strm, ContentReceiver out) { + char buf[CPPHTTPLIB_RECV_BUFSIZ]; + for (;;) { + auto n = strm.read(buf, CPPHTTPLIB_RECV_BUFSIZ); + if (n < 0) { + return false; + } else if (n == 0) { + return true; + } + if (!out(buf, static_cast(n))) { return false; } + } + + return true; +} + +inline bool read_content_chunked(Stream &strm, ContentReceiver out) { + const auto bufsiz = 16; + char buf[bufsiz]; + + stream_line_reader line_reader(strm, buf, bufsiz); + + if (!line_reader.getline()) { return false; } + + unsigned long chunk_len; + while (true) { + char *end_ptr; + + chunk_len = std::strtoul(line_reader.ptr(), &end_ptr, 16); + + if (end_ptr == line_reader.ptr()) { return false; } + if (chunk_len == ULONG_MAX) { return false; } + + if (chunk_len == 0) { break; } + + if (!read_content_with_length(strm, chunk_len, nullptr, out)) { + return false; + } + + if (!line_reader.getline()) { return false; } + + if (strcmp(line_reader.ptr(), "\r\n")) { break; } + + if (!line_reader.getline()) { return false; } + } + + if (chunk_len == 0) { + // Reader terminator after chunks + if (!line_reader.getline() || strcmp(line_reader.ptr(), "\r\n")) + return false; + } + + return true; +} + +inline bool is_chunked_transfer_encoding(const Headers &headers) { + return !strcasecmp(get_header_value(headers, "Transfer-Encoding", 0, ""), + "chunked"); +} + +template +bool read_content(Stream &strm, T &x, size_t payload_max_length, int &status, + Progress progress, ContentReceiver receiver) { + + ContentReceiver out = [&](const char *buf, size_t n) { + return receiver(buf, n); + }; + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + decompressor decompressor; + + std::string content_encoding = x.get_header_value("Content-Encoding"); + if (content_encoding.find("gzip") != std::string::npos || + content_encoding.find("deflate") != std::string::npos) { + if (!decompressor.is_valid()) { + status = 500; + return false; + } + + out = [&](const char *buf, size_t n) { + return decompressor.decompress( + buf, n, [&](const char *buf, size_t n) { return receiver(buf, n); }); + }; + } +#else + if (x.get_header_value("Content-Encoding") == "gzip") { + status = 415; + return false; + } +#endif + + auto ret = true; + auto exceed_payload_max_length = false; + + if (is_chunked_transfer_encoding(x.headers)) { + ret = read_content_chunked(strm, out); + } else if (!has_header(x.headers, "Content-Length")) { + ret = read_content_without_length(strm, out); + } else { + auto len = get_header_value_uint64(x.headers, "Content-Length", 0); + if (len > payload_max_length) { + exceed_payload_max_length = true; + skip_content_with_length(strm, len); + ret = false; + } else if (len > 0) { + ret = read_content_with_length(strm, len, progress, out); + } + } + + if (!ret) { status = exceed_payload_max_length ? 413 : 400; } + + return ret; +} + +template +inline ssize_t write_headers(Stream &strm, const T &info, + const Headers &headers) { + ssize_t write_len = 0; + for (const auto &x : info.headers) { + if (x.first == "EXCEPTION_WHAT") { continue; } + auto len = + strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); + if (len < 0) { return len; } + write_len += len; + } + for (const auto &x : headers) { + auto len = + strm.write_format("%s: %s\r\n", x.first.c_str(), x.second.c_str()); + if (len < 0) { return len; } + write_len += len; + } + auto len = strm.write("\r\n"); + if (len < 0) { return len; } + write_len += len; + return write_len; +} + +inline ssize_t write_content(Stream &strm, ContentProvider content_provider, + size_t offset, size_t length) { + size_t begin_offset = offset; + size_t end_offset = offset + length; + while (offset < end_offset) { + ssize_t written_length = 0; + + DataSink data_sink; + data_sink.write = [&](const char *d, size_t l) { + offset += l; + written_length = strm.write(d, l); + }; + data_sink.done = [&](void) { written_length = -1; }; + data_sink.is_writable = [&](void) { return strm.is_writable(); }; + + content_provider(offset, end_offset - offset, data_sink); + if (written_length < 0) { return written_length; } + } + return static_cast(offset - begin_offset); +} + +template +inline ssize_t write_content_chunked(Stream &strm, + ContentProvider content_provider, + T is_shutting_down) { + size_t offset = 0; + auto data_available = true; + ssize_t total_written_length = 0; + while (data_available && !is_shutting_down()) { + ssize_t written_length = 0; + + DataSink data_sink; + data_sink.write = [&](const char *d, size_t l) { + data_available = l > 0; + offset += l; + + // Emit chunked response header and footer for each chunk + auto chunk = from_i_to_hex(l) + "\r\n" + std::string(d, l) + "\r\n"; + written_length = strm.write(chunk); + }; + data_sink.done = [&](void) { + data_available = false; + written_length = strm.write("0\r\n\r\n"); + }; + data_sink.is_writable = [&](void) { return strm.is_writable(); }; + + content_provider(offset, 0, data_sink); + + if (written_length < 0) { return written_length; } + total_written_length += written_length; + } + return total_written_length; +} + +template +inline bool redirect(T &cli, const Request &req, Response &res, + const std::string &path) { + Request new_req = req; + new_req.path = path; + new_req.redirect_count -= 1; + + if (res.status == 303 && (req.method != "GET" && req.method != "HEAD")) { + new_req.method = "GET"; + new_req.body.clear(); + new_req.headers.clear(); + } + + Response new_res; + + auto ret = cli.send(new_req, new_res); + if (ret) { res = new_res; } + return ret; +} + +inline std::string encode_url(const std::string &s) { + std::string result; + + for (size_t i = 0; s[i]; i++) { + switch (s[i]) { + case ' ': result += "%20"; break; + case '+': result += "%2B"; break; + case '\r': result += "%0D"; break; + case '\n': result += "%0A"; break; + case '\'': result += "%27"; break; + case ',': result += "%2C"; break; + // case ':': result += "%3A"; break; // ok? probably... + case ';': result += "%3B"; break; + default: + auto c = static_cast(s[i]); + if (c >= 0x80) { + result += '%'; + char hex[4]; + auto len = snprintf(hex, sizeof(hex) - 1, "%02X", c); + assert(len == 2); + result.append(hex, static_cast(len)); + } else { + result += s[i]; + } + break; + } + } + + return result; +} + +inline std::string decode_url(const std::string &s, + bool convert_plus_to_space) { + std::string result; + + for (size_t i = 0; i < s.size(); i++) { + if (s[i] == '%' && i + 1 < s.size()) { + if (s[i + 1] == 'u') { + int val = 0; + if (from_hex_to_i(s, i + 2, 4, val)) { + // 4 digits Unicode codes + char buff[4]; + size_t len = to_utf8(val, buff); + if (len > 0) { result.append(buff, len); } + i += 5; // 'u0000' + } else { + result += s[i]; + } + } else { + int val = 0; + if (from_hex_to_i(s, i + 1, 2, val)) { + // 2 digits hex codes + result += static_cast(val); + i += 2; // '00' + } else { + result += s[i]; + } + } + } else if (convert_plus_to_space && s[i] == '+') { + result += ' '; + } else { + result += s[i]; + } + } + + return result; +} + +inline std::string params_to_query_str(const Params ¶ms) { + std::string query; + + for (auto it = params.begin(); it != params.end(); ++it) { + if (it != params.begin()) { query += "&"; } + query += it->first; + query += "="; + query += detail::encode_url(it->second); + } + + return query; +} + +inline void parse_query_text(const std::string &s, Params ¶ms) { + split(&s[0], &s[s.size()], '&', [&](const char *b, const char *e) { + std::string key; + std::string val; + split(b, e, '=', [&](const char *b2, const char *e2) { + if (key.empty()) { + key.assign(b2, e2); + } else { + val.assign(b2, e2); + } + }); + params.emplace(decode_url(key, true), decode_url(val, true)); + }); +} + +inline bool parse_multipart_boundary(const std::string &content_type, + std::string &boundary) { + auto pos = content_type.find("boundary="); + if (pos == std::string::npos) { return false; } + + boundary = content_type.substr(pos + 9); + return true; +} + +inline bool parse_range_header(const std::string &s, Ranges &ranges) { + static auto re_first_range = std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))"); + std::smatch m; + if (std::regex_match(s, m, re_first_range)) { + auto pos = static_cast(m.position(1)); + auto len = static_cast(m.length(1)); + bool all_valid_ranges = true; + split(&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) { + if (!all_valid_ranges) return; + static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))"); + std::cmatch cm; + if (std::regex_match(b, e, cm, re_another_range)) { + ssize_t first = -1; + if (!cm.str(1).empty()) { + first = static_cast(std::stoll(cm.str(1))); + } + + ssize_t last = -1; + if (!cm.str(2).empty()) { + last = static_cast(std::stoll(cm.str(2))); + } + + if (first != -1 && last != -1 && first > last) { + all_valid_ranges = false; + return; + } + ranges.emplace_back(std::make_pair(first, last)); + } + }); + return all_valid_ranges; + } + return false; +} + +class MultipartFormDataParser { +public: + MultipartFormDataParser() = default; + + void set_boundary(std::string boundary) { boundary_ = std::move(boundary); } + + bool is_valid() const { return is_valid_; } + + template + bool parse(const char *buf, size_t n, T content_callback, U header_callback) { + static const std::regex re_content_type(R"(^Content-Type:\s*(.*?)\s*$)", + std::regex_constants::icase); + + static const std::regex re_content_disposition( + "^Content-Disposition:\\s*form-data;\\s*name=\"(.*?)\"(?:;\\s*filename=" + "\"(.*?)\")?\\s*$", + std::regex_constants::icase); + static const std::string dash_ = "--"; + static const std::string crlf_ = "\r\n"; + + buf_.append(buf, n); // TODO: performance improvement + + while (!buf_.empty()) { + switch (state_) { + case 0: { // Initial boundary + auto pattern = dash_ + boundary_ + crlf_; + if (pattern.size() > buf_.size()) { return true; } + auto pos = buf_.find(pattern); + if (pos != 0) { + is_done_ = true; + return false; + } + buf_.erase(0, pattern.size()); + off_ += pattern.size(); + state_ = 1; + break; + } + case 1: { // New entry + clear_file_info(); + state_ = 2; + break; + } + case 2: { // Headers + auto pos = buf_.find(crlf_); + while (pos != std::string::npos) { + // Empty line + if (pos == 0) { + if (!header_callback(file_)) { + is_valid_ = false; + is_done_ = false; + return false; + } + buf_.erase(0, crlf_.size()); + off_ += crlf_.size(); + state_ = 3; + break; + } + + auto header = buf_.substr(0, pos); + { + std::smatch m; + if (std::regex_match(header, m, re_content_type)) { + file_.content_type = m[1]; + } else if (std::regex_match(header, m, re_content_disposition)) { + file_.name = m[1]; + file_.filename = m[2]; + } + } + + buf_.erase(0, pos + crlf_.size()); + off_ += pos + crlf_.size(); + pos = buf_.find(crlf_); + } + break; + } + case 3: { // Body + { + auto pattern = crlf_ + dash_; + if (pattern.size() > buf_.size()) { return true; } + + auto pos = buf_.find(pattern); + if (pos == std::string::npos) { pos = buf_.size(); } + if (!content_callback(buf_.data(), pos)) { + is_valid_ = false; + is_done_ = false; + return false; + } + + off_ += pos; + buf_.erase(0, pos); + } + + { + auto pattern = crlf_ + dash_ + boundary_; + if (pattern.size() > buf_.size()) { return true; } + + auto pos = buf_.find(pattern); + if (pos != std::string::npos) { + if (!content_callback(buf_.data(), pos)) { + is_valid_ = false; + is_done_ = false; + return false; + } + + off_ += pos + pattern.size(); + buf_.erase(0, pos + pattern.size()); + state_ = 4; + } else { + if (!content_callback(buf_.data(), pattern.size())) { + is_valid_ = false; + is_done_ = false; + return false; + } + + off_ += pattern.size(); + buf_.erase(0, pattern.size()); + } + } + break; + } + case 4: { // Boundary + if (crlf_.size() > buf_.size()) { return true; } + if (buf_.find(crlf_) == 0) { + buf_.erase(0, crlf_.size()); + off_ += crlf_.size(); + state_ = 1; + } else { + auto pattern = dash_ + crlf_; + if (pattern.size() > buf_.size()) { return true; } + if (buf_.find(pattern) == 0) { + buf_.erase(0, pattern.size()); + off_ += pattern.size(); + is_valid_ = true; + state_ = 5; + } else { + is_done_ = true; + return true; + } + } + break; + } + case 5: { // Done + is_valid_ = false; + return false; + } + } + } + + return true; + } + +private: + void clear_file_info() { + file_.name.clear(); + file_.filename.clear(); + file_.content_type.clear(); + } + + std::string boundary_; + + std::string buf_; + size_t state_ = 0; + size_t is_valid_ = false; + size_t is_done_ = false; + size_t off_ = 0; + MultipartFormData file_; +}; + +inline std::string to_lower(const char *beg, const char *end) { + std::string out; + auto it = beg; + while (it != end) { + out += static_cast(::tolower(*it)); + it++; + } + return out; +} + +inline std::string make_multipart_data_boundary() { + static const char data[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + + std::random_device seed_gen; + std::mt19937 engine(seed_gen()); + + std::string result = "--cpp-httplib-multipart-data-"; + + for (auto i = 0; i < 16; i++) { + result += data[engine() % (sizeof(data) - 1)]; + } + + return result; +} + +inline std::pair +get_range_offset_and_length(const Request &req, size_t content_length, + size_t index) { + auto r = req.ranges[index]; + + if (r.first == -1 && r.second == -1) { + return std::make_pair(0, content_length); + } + + auto slen = static_cast(content_length); + + if (r.first == -1) { + r.first = slen - r.second; + r.second = slen - 1; + } + + if (r.second == -1) { r.second = slen - 1; } + + return std::make_pair(r.first, r.second - r.first + 1); +} + +inline std::string make_content_range_header_field(size_t offset, size_t length, + size_t content_length) { + std::string field = "bytes "; + field += std::to_string(offset); + field += "-"; + field += std::to_string(offset + length - 1); + field += "/"; + field += std::to_string(content_length); + return field; +} + +template +bool process_multipart_ranges_data(const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type, + SToken stoken, CToken ctoken, + Content content) { + for (size_t i = 0; i < req.ranges.size(); i++) { + ctoken("--"); + stoken(boundary); + ctoken("\r\n"); + if (!content_type.empty()) { + ctoken("Content-Type: "); + stoken(content_type); + ctoken("\r\n"); + } + + auto offsets = get_range_offset_and_length(req, res.body.size(), i); + auto offset = offsets.first; + auto length = offsets.second; + + ctoken("Content-Range: "); + stoken(make_content_range_header_field(offset, length, res.body.size())); + ctoken("\r\n"); + ctoken("\r\n"); + if (!content(offset, length)) { return false; } + ctoken("\r\n"); + } + + ctoken("--"); + stoken(boundary); + ctoken("--\r\n"); + + return true; +} + +inline std::string make_multipart_ranges_data(const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type) { + std::string data; + + process_multipart_ranges_data( + req, res, boundary, content_type, + [&](const std::string &token) { data += token; }, + [&](const char *token) { data += token; }, + [&](size_t offset, size_t length) { + data += res.body.substr(offset, length); + return true; + }); + + return data; +} + +inline size_t +get_multipart_ranges_data_length(const Request &req, Response &res, + const std::string &boundary, + const std::string &content_type) { + size_t data_length = 0; + + process_multipart_ranges_data( + req, res, boundary, content_type, + [&](const std::string &token) { data_length += token.size(); }, + [&](const char *token) { data_length += strlen(token); }, + [&](size_t /*offset*/, size_t length) { + data_length += length; + return true; + }); + + return data_length; +} + +inline bool write_multipart_ranges_data(Stream &strm, const Request &req, + Response &res, + const std::string &boundary, + const std::string &content_type) { + return process_multipart_ranges_data( + req, res, boundary, content_type, + [&](const std::string &token) { strm.write(token); }, + [&](const char *token) { strm.write(token); }, + [&](size_t offset, size_t length) { + return write_content(strm, res.content_provider, offset, length) >= 0; + }); +} + +inline std::pair +get_range_offset_and_length(const Request &req, const Response &res, + size_t index) { + auto r = req.ranges[index]; + + if (r.second == -1) { + r.second = static_cast(res.content_length) - 1; + } + + return std::make_pair(r.first, r.second - r.first + 1); +} + +inline bool expect_content(const Request &req) { + if (req.method == "POST" || req.method == "PUT" || req.method == "PATCH" || + req.method == "PRI" || req.method == "DELETE") { + return true; + } + // TODO: check if Content-Length is set + return false; +} + +inline bool has_crlf(const char *s) { + auto p = s; + while (*p) { + if (*p == '\r' || *p == '\n') { return true; } + p++; + } + return false; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +template +inline std::string message_digest(const std::string &s, Init init, + Update update, Final final, + size_t digest_length) { + using namespace std; + + std::vector md(digest_length, 0); + CTX ctx; + init(&ctx); + update(&ctx, s.data(), s.size()); + final(md.data(), &ctx); + + stringstream ss; + for (auto c : md) { + ss << setfill('0') << setw(2) << hex << (unsigned int)c; + } + return ss.str(); +} + +inline std::string MD5(const std::string &s) { + return message_digest(s, MD5_Init, MD5_Update, MD5_Final, + MD5_DIGEST_LENGTH); +} + +inline std::string SHA_256(const std::string &s) { + return message_digest(s, SHA256_Init, SHA256_Update, SHA256_Final, + SHA256_DIGEST_LENGTH); +} + +inline std::string SHA_512(const std::string &s) { + return message_digest(s, SHA512_Init, SHA512_Update, SHA512_Final, + SHA512_DIGEST_LENGTH); +} +#endif + +#ifdef _WIN32 +class WSInit { +public: + WSInit() { + WSADATA wsaData; + WSAStartup(0x0002, &wsaData); + } + + ~WSInit() { WSACleanup(); } +}; + +static WSInit wsinit_; +#endif + +} // namespace detail + +// Header utilities +inline std::pair make_range_header(Ranges ranges) { + std::string field = "bytes="; + auto i = 0; + for (auto r : ranges) { + if (i != 0) { field += ", "; } + if (r.first != -1) { field += std::to_string(r.first); } + field += '-'; + if (r.second != -1) { field += std::to_string(r.second); } + i++; + } + return std::make_pair("Range", field); +} + +inline std::pair +make_basic_authentication_header(const std::string &username, + const std::string &password, + bool is_proxy = false) { + auto field = "Basic " + detail::base64_encode(username + ":" + password); + auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; + return std::make_pair(key, field); +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +inline std::pair make_digest_authentication_header( + const Request &req, const std::map &auth, + size_t cnonce_count, const std::string &cnonce, const std::string &username, + const std::string &password, bool is_proxy = false) { + using namespace std; + + string nc; + { + stringstream ss; + ss << setfill('0') << setw(8) << hex << cnonce_count; + nc = ss.str(); + } + + auto qop = auth.at("qop"); + if (qop.find("auth-int") != std::string::npos) { + qop = "auth-int"; + } else { + qop = "auth"; + } + + std::string algo = "MD5"; + if (auth.find("algorithm") != auth.end()) { algo = auth.at("algorithm"); } + + string response; + { + auto H = algo == "SHA-256" + ? detail::SHA_256 + : algo == "SHA-512" ? detail::SHA_512 : detail::MD5; + + auto A1 = username + ":" + auth.at("realm") + ":" + password; + + auto A2 = req.method + ":" + req.path; + if (qop == "auth-int") { A2 += ":" + H(req.body); } + + response = H(H(A1) + ":" + auth.at("nonce") + ":" + nc + ":" + cnonce + + ":" + qop + ":" + H(A2)); + } + + auto field = "Digest username=\"hello\", realm=\"" + auth.at("realm") + + "\", nonce=\"" + auth.at("nonce") + "\", uri=\"" + req.path + + "\", algorithm=" + algo + ", qop=" + qop + ", nc=\"" + nc + + "\", cnonce=\"" + cnonce + "\", response=\"" + response + "\""; + + auto key = is_proxy ? "Proxy-Authorization" : "Authorization"; + return std::make_pair(key, field); +} +#endif + +inline bool parse_www_authenticate(const httplib::Response &res, + std::map &auth, + bool is_proxy) { + auto auth_key = is_proxy ? "Proxy-Authenticate" : "WWW-Authenticate"; + if (res.has_header(auth_key)) { + static auto re = std::regex(R"~((?:(?:,\s*)?(.+?)=(?:"(.*?)"|([^,]*))))~"); + auto s = res.get_header_value(auth_key); + auto pos = s.find(' '); + if (pos != std::string::npos) { + auto type = s.substr(0, pos); + if (type == "Basic") { + return false; + } else if (type == "Digest") { + s = s.substr(pos + 1); + auto beg = std::sregex_iterator(s.begin(), s.end(), re); + for (auto i = beg; i != std::sregex_iterator(); ++i) { + auto m = *i; + auto key = s.substr(static_cast(m.position(1)), + static_cast(m.length(1))); + auto val = m.length(2) > 0 + ? s.substr(static_cast(m.position(2)), + static_cast(m.length(2))) + : s.substr(static_cast(m.position(3)), + static_cast(m.length(3))); + auth[key] = val; + } + return true; + } + } + } + return false; +} + +// https://stackoverflow.com/questions/440133/how-do-i-create-a-random-alpha-numeric-string-in-c/440240#answer-440240 +inline std::string random_string(size_t length) { + auto randchar = []() -> char { + const char charset[] = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz"; + const size_t max_index = (sizeof(charset) - 1); + return charset[static_cast(rand()) % max_index]; + }; + std::string str(length, 0); + std::generate_n(str.begin(), length, randchar); + return str; +} + +// Request implementation +inline bool Request::has_header(const char *key) const { + return detail::has_header(headers, key); +} + +inline std::string Request::get_header_value(const char *key, size_t id) const { + return detail::get_header_value(headers, key, id, ""); +} + +inline size_t Request::get_header_value_count(const char *key) const { + auto r = headers.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +inline void Request::set_header(const char *key, const char *val) { + if (!detail::has_crlf(key) && !detail::has_crlf(val)) { + headers.emplace(key, val); + } +} + +inline void Request::set_header(const char *key, const std::string &val) { + if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { + headers.emplace(key, val); + } +} + +inline bool Request::has_param(const char *key) const { + return params.find(key) != params.end(); +} + +inline std::string Request::get_param_value(const char *key, size_t id) const { + auto it = params.find(key); + std::advance(it, static_cast(id)); + if (it != params.end()) { return it->second; } + return std::string(); +} + +inline size_t Request::get_param_value_count(const char *key) const { + auto r = params.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +inline bool Request::is_multipart_form_data() const { + const auto &content_type = get_header_value("Content-Type"); + return !content_type.find("multipart/form-data"); +} + +inline bool Request::has_file(const char *key) const { + return files.find(key) != files.end(); +} + +inline MultipartFormData Request::get_file_value(const char *key) const { + auto it = files.find(key); + if (it != files.end()) { return it->second; } + return MultipartFormData(); +} + +// Response implementation +inline bool Response::has_header(const char *key) const { + return headers.find(key) != headers.end(); +} + +inline std::string Response::get_header_value(const char *key, + size_t id) const { + return detail::get_header_value(headers, key, id, ""); +} + +inline size_t Response::get_header_value_count(const char *key) const { + auto r = headers.equal_range(key); + return static_cast(std::distance(r.first, r.second)); +} + +inline void Response::set_header(const char *key, const char *val) { + if (!detail::has_crlf(key) && !detail::has_crlf(val)) { + headers.emplace(key, val); + } +} + +inline void Response::set_header(const char *key, const std::string &val) { + if (!detail::has_crlf(key) && !detail::has_crlf(val.c_str())) { + headers.emplace(key, val); + } +} + +inline void Response::set_redirect(const char *url, int status) { + if (!detail::has_crlf(url)) { + set_header("Location", url); + if (300 <= status && status < 400) { + this->status = status; + } else { + this->status = 302; + } + } +} + +inline void Response::set_content(const char *s, size_t n, + const char *content_type) { + body.assign(s, n); + set_header("Content-Type", content_type); +} + +inline void Response::set_content(std::string s, const char *content_type) { + body = std::move(s); + set_header("Content-Type", content_type); +} + +inline void Response::set_content_provider( + size_t in_length, + std::function provider, + std::function resource_releaser) { + assert(in_length > 0); + content_length = in_length; + content_provider = [provider](size_t offset, size_t length, DataSink &sink) { + provider(offset, length, sink); + }; + content_provider_resource_releaser = resource_releaser; +} + +inline void Response::set_chunked_content_provider( + std::function provider, + std::function resource_releaser) { + content_length = 0; + content_provider = [provider](size_t offset, size_t, DataSink &sink) { + provider(offset, sink); + }; + content_provider_resource_releaser = resource_releaser; +} + +// Rstream implementation +inline ssize_t Stream::write(const char *ptr) { + return write(ptr, strlen(ptr)); +} + +inline ssize_t Stream::write(const std::string &s) { + return write(s.data(), s.size()); +} + +template +inline ssize_t Stream::write_format(const char *fmt, const Args &... args) { + std::array buf; + +#if defined(_MSC_VER) && _MSC_VER < 1900 + auto sn = _snprintf_s(buf, bufsiz, buf.size() - 1, fmt, args...); +#else + auto sn = snprintf(buf.data(), buf.size() - 1, fmt, args...); +#endif + if (sn <= 0) { return sn; } + + auto n = static_cast(sn); + + if (n >= buf.size() - 1) { + std::vector glowable_buf(buf.size()); + + while (n >= glowable_buf.size() - 1) { + glowable_buf.resize(glowable_buf.size() * 2); +#if defined(_MSC_VER) && _MSC_VER < 1900 + n = static_cast(_snprintf_s(&glowable_buf[0], glowable_buf.size(), + glowable_buf.size() - 1, fmt, + args...)); +#else + n = static_cast( + snprintf(&glowable_buf[0], glowable_buf.size() - 1, fmt, args...)); +#endif + } + return write(&glowable_buf[0], n); + } else { + return write(buf.data(), n); + } +} + +namespace detail { + +// Socket stream implementation +inline SocketStream::SocketStream(socket_t sock, time_t read_timeout_sec, + time_t read_timeout_usec) + : sock_(sock), read_timeout_sec_(read_timeout_sec), + read_timeout_usec_(read_timeout_usec) {} + +inline SocketStream::~SocketStream() {} + +inline bool SocketStream::is_readable() const { + return select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; +} + +inline bool SocketStream::is_writable() const { + return select_write(sock_, 0, 0) > 0; +} + +inline ssize_t SocketStream::read(char *ptr, size_t size) { + if (!is_readable()) { return -1; } + +#ifdef _WIN32 + if (size > static_cast(std::numeric_limits::max())) { + return -1; + } + return recv(sock_, ptr, static_cast(size), 0); +#else + return recv(sock_, ptr, size, 0); +#endif +} + +inline ssize_t SocketStream::write(const char *ptr, size_t size) { + if (!is_writable()) { return -1; } + +#ifdef _WIN32 + if (size > static_cast(std::numeric_limits::max())) { + return -1; + } + return send(sock_, ptr, static_cast(size), 0); +#else + return send(sock_, ptr, size, 0); +#endif +} + +inline void SocketStream::get_remote_ip_and_port(std::string &ip, + int &port) const { + return detail::get_remote_ip_and_port(sock_, ip, port); +} + +// Buffer stream implementation +inline bool BufferStream::is_readable() const { return true; } + +inline bool BufferStream::is_writable() const { return true; } + +inline ssize_t BufferStream::read(char *ptr, size_t size) { +#if defined(_MSC_VER) && _MSC_VER < 1900 + auto len_read = buffer._Copy_s(ptr, size, size, position); +#else + auto len_read = buffer.copy(ptr, size, position); +#endif + position += static_cast(len_read); + return static_cast(len_read); +} + +inline ssize_t BufferStream::write(const char *ptr, size_t size) { + buffer.append(ptr, size); + return static_cast(size); +} + +inline void BufferStream::get_remote_ip_and_port(std::string & /*ip*/, + int & /*port*/) const {} + +inline const std::string &BufferStream::get_buffer() const { return buffer; } + +} // namespace detail + +// HTTP server implementation +inline Server::Server() + : keep_alive_max_count_(CPPHTTPLIB_KEEPALIVE_MAX_COUNT), + read_timeout_sec_(CPPHTTPLIB_READ_TIMEOUT_SECOND), + read_timeout_usec_(CPPHTTPLIB_READ_TIMEOUT_USECOND), + payload_max_length_(CPPHTTPLIB_PAYLOAD_MAX_LENGTH), is_running_(false), + svr_sock_(INVALID_SOCKET) { +#ifndef _WIN32 + signal(SIGPIPE, SIG_IGN); +#endif + new_task_queue = [] { return new ThreadPool(CPPHTTPLIB_THREAD_POOL_COUNT); }; +} + +inline Server::~Server() {} + +inline Server &Server::Get(const char *pattern, Handler handler) { + get_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Post(const char *pattern, Handler handler) { + post_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Post(const char *pattern, + HandlerWithContentReader handler) { + post_handlers_for_content_reader_.push_back( + std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Put(const char *pattern, Handler handler) { + put_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Put(const char *pattern, + HandlerWithContentReader handler) { + put_handlers_for_content_reader_.push_back( + std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Patch(const char *pattern, Handler handler) { + patch_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Patch(const char *pattern, + HandlerWithContentReader handler) { + patch_handlers_for_content_reader_.push_back( + std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Delete(const char *pattern, Handler handler) { + delete_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Delete(const char *pattern, + HandlerWithContentReader handler) { + delete_handlers_for_content_reader_.push_back( + std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline Server &Server::Options(const char *pattern, Handler handler) { + options_handlers_.push_back(std::make_pair(std::regex(pattern), handler)); + return *this; +} + +inline bool Server::set_base_dir(const char *dir, const char *mount_point) { + return set_mount_point(mount_point, dir); +} + +inline bool Server::set_mount_point(const char *mount_point, const char *dir) { + if (detail::is_dir(dir)) { + std::string mnt = mount_point ? mount_point : "/"; + if (!mnt.empty() && mnt[0] == '/') { + base_dirs_.emplace_back(mnt, dir); + return true; + } + } + return false; +} + +inline bool Server::remove_mount_point(const char *mount_point) { + for (auto it = base_dirs_.begin(); it != base_dirs_.end(); ++it) { + if (it->first == mount_point) { + base_dirs_.erase(it); + return true; + } + } + return false; +} + +inline void Server::set_file_extension_and_mimetype_mapping(const char *ext, + const char *mime) { + file_extension_and_mimetype_map_[ext] = mime; +} + +inline void Server::set_file_request_handler(Handler handler) { + file_request_handler_ = std::move(handler); +} + +inline void Server::set_error_handler(Handler handler) { + error_handler_ = std::move(handler); +} + +inline void Server::set_logger(Logger logger) { logger_ = std::move(logger); } + +inline void +Server::set_expect_100_continue_handler(Expect100ContinueHandler handler) { + expect_100_continue_handler_ = std::move(handler); +} + +inline void Server::set_keep_alive_max_count(size_t count) { + keep_alive_max_count_ = count; +} + +inline void Server::set_read_timeout(time_t sec, time_t usec) { + read_timeout_sec_ = sec; + read_timeout_usec_ = usec; +} + +inline void Server::set_payload_max_length(size_t length) { + payload_max_length_ = length; +} + +inline bool Server::bind_to_port(const char *host, int port, int socket_flags) { + if (bind_internal(host, port, socket_flags) < 0) return false; + return true; +} +inline int Server::bind_to_any_port(const char *host, int socket_flags) { + return bind_internal(host, 0, socket_flags); +} + +inline bool Server::listen_after_bind() { return listen_internal(); } + +inline bool Server::listen(const char *host, int port, int socket_flags) { + return bind_to_port(host, port, socket_flags) && listen_internal(); +} + +inline bool Server::is_running() const { return is_running_; } + +inline void Server::stop() { + if (is_running_) { + assert(svr_sock_ != INVALID_SOCKET); + std::atomic sock(svr_sock_.exchange(INVALID_SOCKET)); + detail::shutdown_socket(sock); + detail::close_socket(sock); + } +} + +inline bool Server::parse_request_line(const char *s, Request &req) { + const static std::regex re( + "(GET|HEAD|POST|PUT|DELETE|CONNECT|OPTIONS|TRACE|PATCH|PRI) " + "(([^?]+)(?:\\?(.*?))?) (HTTP/1\\.[01])\r\n"); + + std::cmatch m; + if (std::regex_match(s, m, re)) { + req.version = std::string(m[5]); + req.method = std::string(m[1]); + req.target = std::string(m[2]); + req.path = detail::decode_url(m[3], false); + + // Parse query text + auto len = std::distance(m[4].first, m[4].second); + if (len > 0) { detail::parse_query_text(m[4], req.params); } + + return true; + } + + return false; +} + +inline bool Server::write_response(Stream &strm, bool last_connection, + const Request &req, Response &res) { + assert(res.status != -1); + + if (400 <= res.status && error_handler_) { error_handler_(req, res); } + + detail::BufferStream bstrm; + + // Response line + if (!bstrm.write_format("HTTP/1.1 %d %s\r\n", res.status, + detail::status_message(res.status))) { + return false; + } + + // Headers + if (last_connection || req.get_header_value("Connection") == "close") { + res.set_header("Connection", "close"); + } + + if (!last_connection && req.get_header_value("Connection") == "Keep-Alive") { + res.set_header("Connection", "Keep-Alive"); + } + + if (!res.has_header("Content-Type") && + (!res.body.empty() || res.content_length > 0)) { + res.set_header("Content-Type", "text/plain"); + } + + if (!res.has_header("Accept-Ranges") && req.method == "HEAD") { + res.set_header("Accept-Ranges", "bytes"); + } + + std::string content_type; + std::string boundary; + + if (req.ranges.size() > 1) { + boundary = detail::make_multipart_data_boundary(); + + auto it = res.headers.find("Content-Type"); + if (it != res.headers.end()) { + content_type = it->second; + res.headers.erase(it); + } + + res.headers.emplace("Content-Type", + "multipart/byteranges; boundary=" + boundary); + } + + if (res.body.empty()) { + if (res.content_length > 0) { + size_t length = 0; + if (req.ranges.empty()) { + length = res.content_length; + } else if (req.ranges.size() == 1) { + auto offsets = + detail::get_range_offset_and_length(req, res.content_length, 0); + auto offset = offsets.first; + length = offsets.second; + auto content_range = detail::make_content_range_header_field( + offset, length, res.content_length); + res.set_header("Content-Range", content_range); + } else { + length = detail::get_multipart_ranges_data_length(req, res, boundary, + content_type); + } + res.set_header("Content-Length", std::to_string(length)); + } else { + if (res.content_provider) { + res.set_header("Transfer-Encoding", "chunked"); + } else { + res.set_header("Content-Length", "0"); + } + } + } else { + if (req.ranges.empty()) { + ; + } else if (req.ranges.size() == 1) { + auto offsets = + detail::get_range_offset_and_length(req, res.body.size(), 0); + auto offset = offsets.first; + auto length = offsets.second; + auto content_range = detail::make_content_range_header_field( + offset, length, res.body.size()); + res.set_header("Content-Range", content_range); + res.body = res.body.substr(offset, length); + } else { + res.body = + detail::make_multipart_ranges_data(req, res, boundary, content_type); + } + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + // TODO: 'Accept-Encoding' has gzip, not gzip;q=0 + const auto &encodings = req.get_header_value("Accept-Encoding"); + if (encodings.find("gzip") != std::string::npos && + detail::can_compress(res.get_header_value("Content-Type"))) { + if (detail::compress(res.body)) { + res.set_header("Content-Encoding", "gzip"); + } + } +#endif + + auto length = std::to_string(res.body.size()); + res.set_header("Content-Length", length); + } + + if (!detail::write_headers(bstrm, res, Headers())) { return false; } + + // Flush buffer + auto &data = bstrm.get_buffer(); + strm.write(data.data(), data.size()); + + // Body + if (req.method != "HEAD") { + if (!res.body.empty()) { + if (!strm.write(res.body)) { return false; } + } else if (res.content_provider) { + if (!write_content_with_provider(strm, req, res, boundary, + content_type)) { + return false; + } + } + } + + // Log + if (logger_) { logger_(req, res); } + + return true; +} + +inline bool +Server::write_content_with_provider(Stream &strm, const Request &req, + Response &res, const std::string &boundary, + const std::string &content_type) { + if (res.content_length) { + if (req.ranges.empty()) { + if (detail::write_content(strm, res.content_provider, 0, + res.content_length) < 0) { + return false; + } + } else if (req.ranges.size() == 1) { + auto offsets = + detail::get_range_offset_and_length(req, res.content_length, 0); + auto offset = offsets.first; + auto length = offsets.second; + if (detail::write_content(strm, res.content_provider, offset, length) < + 0) { + return false; + } + } else { + if (!detail::write_multipart_ranges_data(strm, req, res, boundary, + content_type)) { + return false; + } + } + } else { + auto is_shutting_down = [this]() { + return this->svr_sock_ == INVALID_SOCKET; + }; + if (detail::write_content_chunked(strm, res.content_provider, + is_shutting_down) < 0) { + return false; + } + } + return true; +} + +inline bool Server::read_content(Stream &strm, Request &req, Response &res) { + MultipartFormDataMap::iterator cur; + if (read_content_core( + strm, req, res, + // Regular + [&](const char *buf, size_t n) { + if (req.body.size() + n > req.body.max_size()) { return false; } + req.body.append(buf, n); + return true; + }, + // Multipart + [&](const MultipartFormData &file) { + cur = req.files.emplace(file.name, file); + return true; + }, + [&](const char *buf, size_t n) { + auto &content = cur->second.content; + if (content.size() + n > content.max_size()) { return false; } + content.append(buf, n); + return true; + })) { + const auto &content_type = req.get_header_value("Content-Type"); + if (!content_type.find("application/x-www-form-urlencoded")) { + detail::parse_query_text(req.body, req.params); + } + return true; + } + return false; +} + +inline bool Server::read_content_with_content_receiver( + Stream &strm, Request &req, Response &res, ContentReceiver receiver, + MultipartContentHeader multipart_header, + ContentReceiver multipart_receiver) { + return read_content_core(strm, req, res, receiver, multipart_header, + multipart_receiver); +} + +inline bool Server::read_content_core(Stream &strm, Request &req, Response &res, + ContentReceiver receiver, + MultipartContentHeader mulitpart_header, + ContentReceiver multipart_receiver) { + detail::MultipartFormDataParser multipart_form_data_parser; + ContentReceiver out; + + if (req.is_multipart_form_data()) { + const auto &content_type = req.get_header_value("Content-Type"); + std::string boundary; + if (!detail::parse_multipart_boundary(content_type, boundary)) { + res.status = 400; + return false; + } + + multipart_form_data_parser.set_boundary(std::move(boundary)); + out = [&](const char *buf, size_t n) { + return multipart_form_data_parser.parse(buf, n, multipart_receiver, + mulitpart_header); + }; + } else { + out = receiver; + } + + if (!detail::read_content(strm, req, payload_max_length_, res.status, + Progress(), out)) { + return false; + } + + if (req.is_multipart_form_data()) { + if (!multipart_form_data_parser.is_valid()) { + res.status = 400; + return false; + } + } + + return true; +} + +inline bool Server::handle_file_request(Request &req, Response &res, + bool head) { + for (const auto &kv : base_dirs_) { + const auto &mount_point = kv.first; + const auto &base_dir = kv.second; + + // Prefix match + if (!req.path.find(mount_point)) { + std::string sub_path = "/" + req.path.substr(mount_point.size()); + if (detail::is_valid_path(sub_path)) { + auto path = base_dir + sub_path; + if (path.back() == '/') { path += "index.html"; } + + if (detail::is_file(path)) { + detail::read_file(path, res.body); + auto type = + detail::find_content_type(path, file_extension_and_mimetype_map_); + if (type) { res.set_header("Content-Type", type); } + res.status = 200; + if (!head && file_request_handler_) { + file_request_handler_(req, res); + } + return true; + } + } + } + } + return false; +} + +inline socket_t Server::create_server_socket(const char *host, int port, + int socket_flags) const { + return detail::create_socket( + host, port, + [](socket_t sock, struct addrinfo &ai) -> bool { + if (::bind(sock, ai.ai_addr, static_cast(ai.ai_addrlen))) { + return false; + } + if (::listen(sock, 5)) { // Listen through 5 channels + return false; + } + return true; + }, + socket_flags); +} + +inline int Server::bind_internal(const char *host, int port, int socket_flags) { + if (!is_valid()) { return -1; } + + svr_sock_ = create_server_socket(host, port, socket_flags); + if (svr_sock_ == INVALID_SOCKET) { return -1; } + + if (port == 0) { + struct sockaddr_storage addr; + socklen_t addr_len = sizeof(addr); + if (getsockname(svr_sock_, reinterpret_cast(&addr), + &addr_len) == -1) { + return -1; + } + if (addr.ss_family == AF_INET) { + return ntohs(reinterpret_cast(&addr)->sin_port); + } else if (addr.ss_family == AF_INET6) { + return ntohs(reinterpret_cast(&addr)->sin6_port); + } else { + return -1; + } + } else { + return port; + } +} + +inline bool Server::listen_internal() { + auto ret = true; + is_running_ = true; + + { + std::unique_ptr task_queue(new_task_queue()); + + for (;;) { + if (svr_sock_ == INVALID_SOCKET) { + // The server socket was closed by 'stop' method. + break; + } + + auto val = detail::select_read(svr_sock_, 0, 100000); + + if (val == 0) { // Timeout + task_queue->on_idle(); + continue; + } + + socket_t sock = accept(svr_sock_, nullptr, nullptr); + + if (sock == INVALID_SOCKET) { + if (errno == EMFILE) { + // The per-process limit of open file descriptors has been reached. + // Try to accept new connections after a short sleep. + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + if (svr_sock_ != INVALID_SOCKET) { + detail::close_socket(svr_sock_); + ret = false; + } else { + ; // The server socket was closed by user. + } + break; + } + +#if __cplusplus > 201703L + task_queue->enqueue([=, this]() { process_and_close_socket(sock); }); +#else + task_queue->enqueue([=]() { process_and_close_socket(sock); }); +#endif + } + + task_queue->shutdown(); + } + + is_running_ = false; + return ret; +} + +inline bool Server::routing(Request &req, Response &res, Stream &strm) { + // File handler + bool is_head_request = req.method == "HEAD"; + if ((req.method == "GET" || is_head_request) && + handle_file_request(req, res, is_head_request)) { + return true; + } + + if (detail::expect_content(req)) { + // Content reader handler + { + ContentReader reader( + [&](ContentReceiver receiver) { + return read_content_with_content_receiver(strm, req, res, receiver, + nullptr, nullptr); + }, + [&](MultipartContentHeader header, ContentReceiver receiver) { + return read_content_with_content_receiver(strm, req, res, nullptr, + header, receiver); + }); + + if (req.method == "POST") { + if (dispatch_request_for_content_reader( + req, res, reader, post_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "PUT") { + if (dispatch_request_for_content_reader( + req, res, reader, put_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "PATCH") { + if (dispatch_request_for_content_reader( + req, res, reader, patch_handlers_for_content_reader_)) { + return true; + } + } else if (req.method == "DELETE") { + if (dispatch_request_for_content_reader( + req, res, reader, delete_handlers_for_content_reader_)) { + return true; + } + } + } + + // Read content into `req.body` + if (!read_content(strm, req, res)) { return false; } + } + + // Regular handler + if (req.method == "GET" || req.method == "HEAD") { + return dispatch_request(req, res, get_handlers_); + } else if (req.method == "POST") { + return dispatch_request(req, res, post_handlers_); + } else if (req.method == "PUT") { + return dispatch_request(req, res, put_handlers_); + } else if (req.method == "DELETE") { + return dispatch_request(req, res, delete_handlers_); + } else if (req.method == "OPTIONS") { + return dispatch_request(req, res, options_handlers_); + } else if (req.method == "PATCH") { + return dispatch_request(req, res, patch_handlers_); + } + + res.status = 400; + return false; +} + +inline bool Server::dispatch_request(Request &req, Response &res, + Handlers &handlers) { + + try { + for (const auto &x : handlers) { + const auto &pattern = x.first; + const auto &handler = x.second; + + if (std::regex_match(req.path, req.matches, pattern)) { + handler(req, res); + return true; + } + } + } catch (const std::exception &ex) { + res.status = 500; + res.set_header("EXCEPTION_WHAT", ex.what()); + } catch (...) { + res.status = 500; + res.set_header("EXCEPTION_WHAT", "UNKNOWN"); + } + return false; +} + +inline bool Server::dispatch_request_for_content_reader( + Request &req, Response &res, ContentReader content_reader, + HandlersForContentReader &handlers) { + for (const auto &x : handlers) { + const auto &pattern = x.first; + const auto &handler = x.second; + + if (std::regex_match(req.path, req.matches, pattern)) { + handler(req, res, content_reader); + return true; + } + } + return false; +} + +inline bool +Server::process_request(Stream &strm, bool last_connection, + bool &connection_close, + const std::function &setup_request) { + std::array buf{}; + + detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); + + // Connection has been closed on client + if (!line_reader.getline()) { return false; } + + Request req; + Response res; + + res.version = "HTTP/1.1"; + + // Check if the request URI doesn't exceed the limit + if (line_reader.size() > CPPHTTPLIB_REQUEST_URI_MAX_LENGTH) { + Headers dummy; + detail::read_headers(strm, dummy); + res.status = 414; + return write_response(strm, last_connection, req, res); + } + + // Request line and headers + if (!parse_request_line(line_reader.ptr(), req) || + !detail::read_headers(strm, req.headers)) { + res.status = 400; + return write_response(strm, last_connection, req, res); + } + + if (req.get_header_value("Connection") == "close") { + connection_close = true; + } + + if (req.version == "HTTP/1.0" && + req.get_header_value("Connection") != "Keep-Alive") { + connection_close = true; + } + + strm.get_remote_ip_and_port(req.remote_addr, req.remote_port); + req.set_header("REMOTE_ADDR", req.remote_addr); + req.set_header("REMOTE_PORT", std::to_string(req.remote_port)); + + if (req.has_header("Range")) { + const auto &range_header_value = req.get_header_value("Range"); + if (!detail::parse_range_header(range_header_value, req.ranges)) { + // TODO: error + } + } + + if (setup_request) { setup_request(req); } + + if (req.get_header_value("Expect") == "100-continue") { + auto status = 100; + if (expect_100_continue_handler_) { + status = expect_100_continue_handler_(req, res); + } + switch (status) { + case 100: + case 417: + strm.write_format("HTTP/1.1 %d %s\r\n\r\n", status, + detail::status_message(status)); + break; + default: return write_response(strm, last_connection, req, res); + } + } + + // Rounting + if (routing(req, res, strm)) { + if (res.status == -1) { res.status = req.ranges.empty() ? 200 : 206; } + } else { + if (res.status == -1) { res.status = 404; } + } + + return write_response(strm, last_connection, req, res); +} + +inline bool Server::is_valid() const { return true; } + +inline bool Server::process_and_close_socket(socket_t sock) { + return detail::process_and_close_socket( + false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, + [this](Stream &strm, bool last_connection, bool &connection_close) { + return process_request(strm, last_connection, connection_close, + nullptr); + }); +} + +// HTTP client implementation +inline Client::Client(const std::string &host, int port, + const std::string &client_cert_path, + const std::string &client_key_path) + : sock_(INVALID_SOCKET), host_(host), port_(port), + host_and_port_(host_ + ":" + std::to_string(port_)), + client_cert_path_(client_cert_path), client_key_path_(client_key_path) {} + +inline Client::~Client() {} + +inline bool Client::is_valid() const { return true; } + +inline socket_t Client::create_client_socket() const { + if (!proxy_host_.empty()) { + return detail::create_client_socket(proxy_host_.c_str(), proxy_port_, + timeout_sec_, interface_); + } + return detail::create_client_socket(host_.c_str(), port_, timeout_sec_, + interface_); +} + +inline bool Client::read_response_line(Stream &strm, Response &res) { + std::array buf; + + detail::stream_line_reader line_reader(strm, buf.data(), buf.size()); + + if (!line_reader.getline()) { return false; } + + const static std::regex re("(HTTP/1\\.[01]) (\\d+?) .*\r\n"); + + std::cmatch m; + if (std::regex_match(line_reader.ptr(), m, re)) { + res.version = std::string(m[1]); + res.status = std::stoi(std::string(m[2])); + } + + return true; +} + +inline bool Client::send(const Request &req, Response &res) { + sock_ = create_client_socket(); + if (sock_ == INVALID_SOCKET) { return false; } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (is_ssl() && !proxy_host_.empty()) { + bool error; + if (!connect(sock_, res, error)) { return error; } + } +#endif + + return process_and_close_socket( + sock_, 1, + [&](Stream &strm, bool last_connection, bool &connection_close) { + return handle_request(strm, req, res, last_connection, + connection_close); + }); +} + +inline bool Client::send(const std::vector &requests, + std::vector &responses) { + size_t i = 0; + while (i < requests.size()) { + sock_ = create_client_socket(); + if (sock_ == INVALID_SOCKET) { return false; } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (is_ssl() && !proxy_host_.empty()) { + Response res; + bool error; + if (!connect(sock_, res, error)) { return false; } + } +#endif + + if (!process_and_close_socket(sock_, requests.size() - i, + [&](Stream &strm, bool last_connection, + bool &connection_close) -> bool { + auto &req = requests[i++]; + auto res = Response(); + auto ret = handle_request(strm, req, res, + last_connection, + connection_close); + if (ret) { + responses.emplace_back(std::move(res)); + } + return ret; + })) { + return false; + } + } + + return true; +} + +inline bool Client::handle_request(Stream &strm, const Request &req, + Response &res, bool last_connection, + bool &connection_close) { + if (req.path.empty()) { return false; } + + bool ret; + + if (!is_ssl() && !proxy_host_.empty()) { + auto req2 = req; + req2.path = "http://" + host_and_port_ + req.path; + ret = process_request(strm, req2, res, last_connection, connection_close); + } else { + ret = process_request(strm, req, res, last_connection, connection_close); + } + + if (!ret) { return false; } + + if (300 < res.status && res.status < 400 && follow_location_) { + ret = redirect(req, res); + } + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + if (res.status == 401 || res.status == 407) { + auto is_proxy = res.status == 407; + const auto &username = + is_proxy ? proxy_digest_auth_username_ : digest_auth_username_; + const auto &password = + is_proxy ? proxy_digest_auth_password_ : digest_auth_password_; + + if (!username.empty() && !password.empty()) { + std::map auth; + if (parse_www_authenticate(res, auth, is_proxy)) { + Request new_req = req; + auto key = is_proxy ? "Proxy-Authorization" : "WWW-Authorization"; + new_req.headers.erase(key); + new_req.headers.insert(make_digest_authentication_header( + req, auth, 1, random_string(10), username, password, is_proxy)); + + Response new_res; + + ret = send(new_req, new_res); + if (ret) { res = new_res; } + } + } + } +#endif + + return ret; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +inline bool Client::connect(socket_t sock, Response &res, bool &error) { + error = true; + Response res2; + + if (!detail::process_socket( + true, sock, 1, read_timeout_sec_, read_timeout_usec_, + [&](Stream &strm, bool /*last_connection*/, bool &connection_close) { + Request req2; + req2.method = "CONNECT"; + req2.path = host_and_port_; + return process_request(strm, req2, res2, false, connection_close); + })) { + detail::close_socket(sock); + error = false; + return false; + } + + if (res2.status == 407) { + if (!proxy_digest_auth_username_.empty() && + !proxy_digest_auth_password_.empty()) { + std::map auth; + if (parse_www_authenticate(res2, auth, true)) { + Response res3; + if (!detail::process_socket( + true, sock, 1, read_timeout_sec_, read_timeout_usec_, + [&](Stream &strm, bool /*last_connection*/, + bool &connection_close) { + Request req3; + req3.method = "CONNECT"; + req3.path = host_and_port_; + req3.headers.insert(make_digest_authentication_header( + req3, auth, 1, random_string(10), + proxy_digest_auth_username_, proxy_digest_auth_password_, + true)); + return process_request(strm, req3, res3, false, + connection_close); + })) { + detail::close_socket(sock); + error = false; + return false; + } + } + } else { + res = res2; + return false; + } + } + + return true; +} +#endif + +inline bool Client::redirect(const Request &req, Response &res) { + if (req.redirect_count == 0) { return false; } + + auto location = res.get_header_value("location"); + if (location.empty()) { return false; } + + const static std::regex re( + R"(^(?:(https?):)?(?://([^:/?#]*)(?::(\d+))?)?([^?#]*(?:\?[^#]*)?)(?:#.*)?)"); + + std::smatch m; + if (!std::regex_match(location, m, re)) { return false; } + + auto scheme = is_ssl() ? "https" : "http"; + + auto next_scheme = m[1].str(); + auto next_host = m[2].str(); + auto port_str = m[3].str(); + auto next_path = m[4].str(); + + auto next_port = port_; + if (!port_str.empty()) { + next_port = std::stoi(port_str); + } else if (!next_scheme.empty()) { + next_port = next_scheme == "https" ? 443 : 80; + } + + if (next_scheme.empty()) { next_scheme = scheme; } + if (next_host.empty()) { next_host = host_; } + if (next_path.empty()) { next_path = "/"; } + + if (next_scheme == scheme && next_host == host_ && next_port == port_) { + return detail::redirect(*this, req, res, next_path); + } else { + if (next_scheme == "https") { +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + SSLClient cli(next_host.c_str(), next_port); + cli.copy_settings(*this); + return detail::redirect(cli, req, res, next_path); +#else + return false; +#endif + } else { + Client cli(next_host.c_str(), next_port); + cli.copy_settings(*this); + return detail::redirect(cli, req, res, next_path); + } + } +} + +inline bool Client::write_request(Stream &strm, const Request &req, + bool last_connection) { + detail::BufferStream bstrm; + + // Request line + const auto &path = detail::encode_url(req.path); + + bstrm.write_format("%s %s HTTP/1.1\r\n", req.method.c_str(), path.c_str()); + + // Additonal headers + Headers headers; + if (last_connection) { headers.emplace("Connection", "close"); } + + if (!req.has_header("Host")) { + if (is_ssl()) { + if (port_ == 443) { + headers.emplace("Host", host_); + } else { + headers.emplace("Host", host_and_port_); + } + } else { + if (port_ == 80) { + headers.emplace("Host", host_); + } else { + headers.emplace("Host", host_and_port_); + } + } + } + + if (!req.has_header("Accept")) { headers.emplace("Accept", "*/*"); } + + if (!req.has_header("User-Agent")) { + headers.emplace("User-Agent", "cpp-httplib/0.5"); + } + + if (req.body.empty()) { + if (req.content_provider) { + auto length = std::to_string(req.content_length); + headers.emplace("Content-Length", length); + } else { + headers.emplace("Content-Length", "0"); + } + } else { + if (!req.has_header("Content-Type")) { + headers.emplace("Content-Type", "text/plain"); + } + + if (!req.has_header("Content-Length")) { + auto length = std::to_string(req.body.size()); + headers.emplace("Content-Length", length); + } + } + + if (!basic_auth_username_.empty() && !basic_auth_password_.empty()) { + headers.insert(make_basic_authentication_header( + basic_auth_username_, basic_auth_password_, false)); + } + + if (!proxy_basic_auth_username_.empty() && + !proxy_basic_auth_password_.empty()) { + headers.insert(make_basic_authentication_header( + proxy_basic_auth_username_, proxy_basic_auth_password_, true)); + } + + detail::write_headers(bstrm, req, headers); + + // Flush buffer + auto &data = bstrm.get_buffer(); + strm.write(data.data(), data.size()); + + // Body + if (req.body.empty()) { + if (req.content_provider) { + size_t offset = 0; + size_t end_offset = req.content_length; + + DataSink data_sink; + data_sink.write = [&](const char *d, size_t l) { + auto written_length = strm.write(d, l); + offset += static_cast(written_length); + }; + data_sink.is_writable = [&](void) { return strm.is_writable(); }; + + while (offset < end_offset) { + req.content_provider(offset, end_offset - offset, data_sink); + } + } + } else { + strm.write(req.body); + } + + return true; +} + +inline std::shared_ptr Client::send_with_content_provider( + const char *method, const char *path, const Headers &headers, + const std::string &body, size_t content_length, + ContentProvider content_provider, const char *content_type) { + Request req; + req.method = method; + req.headers = headers; + req.path = path; + + if (content_type) { req.headers.emplace("Content-Type", content_type); } + +#ifdef CPPHTTPLIB_ZLIB_SUPPORT + if (compress_) { + if (content_provider) { + size_t offset = 0; + + DataSink data_sink; + data_sink.write = [&](const char *data, size_t data_len) { + req.body.append(data, data_len); + offset += data_len; + }; + data_sink.is_writable = [&](void) { return true; }; + + while (offset < content_length) { + content_provider(offset, content_length - offset, data_sink); + } + } else { + req.body = body; + } + + if (!detail::compress(req.body)) { return nullptr; } + req.headers.emplace("Content-Encoding", "gzip"); + } else +#endif + { + if (content_provider) { + req.content_length = content_length; + req.content_provider = content_provider; + } else { + req.body = body; + } + } + + auto res = std::make_shared(); + + return send(req, *res) ? res : nullptr; +} + +inline bool Client::process_request(Stream &strm, const Request &req, + Response &res, bool last_connection, + bool &connection_close) { + // Send request + if (!write_request(strm, req, last_connection)) { return false; } + + // Receive response and headers + if (!read_response_line(strm, res) || + !detail::read_headers(strm, res.headers)) { + return false; + } + + if (res.get_header_value("Connection") == "close" || + res.version == "HTTP/1.0") { + connection_close = true; + } + + if (req.response_handler) { + if (!req.response_handler(res)) { return false; } + } + + // Body + if (req.method != "HEAD" && req.method != "CONNECT") { + auto out = + req.content_receiver + ? static_cast([&](const char *buf, size_t n) { + return req.content_receiver(buf, n); + }) + : static_cast([&](const char *buf, size_t n) { + if (res.body.size() + n > res.body.max_size()) { return false; } + res.body.append(buf, n); + return true; + }); + + int dummy_status; + if (!detail::read_content(strm, res, (std::numeric_limits::max)(), + dummy_status, req.progress, out)) { + return false; + } + } + + // Log + if (logger_) { logger_(req, res); } + + return true; +} + +inline bool Client::process_and_close_socket( + socket_t sock, size_t request_count, + std::function + callback) { + request_count = (std::min)(request_count, keep_alive_max_count_); + return detail::process_and_close_socket(true, sock, request_count, + read_timeout_sec_, read_timeout_usec_, + callback); +} + +inline bool Client::is_ssl() const { return false; } + +inline std::shared_ptr Client::Get(const char *path) { + return Get(path, Headers(), Progress()); +} + +inline std::shared_ptr Client::Get(const char *path, + Progress progress) { + return Get(path, Headers(), std::move(progress)); +} + +inline std::shared_ptr Client::Get(const char *path, + const Headers &headers) { + return Get(path, headers, Progress()); +} + +inline std::shared_ptr +Client::Get(const char *path, const Headers &headers, Progress progress) { + Request req; + req.method = "GET"; + req.path = path; + req.headers = headers; + req.progress = std::move(progress); + + auto res = std::make_shared(); + return send(req, *res) ? res : nullptr; +} + +inline std::shared_ptr Client::Get(const char *path, + ContentReceiver content_receiver) { + return Get(path, Headers(), nullptr, std::move(content_receiver), Progress()); +} + +inline std::shared_ptr Client::Get(const char *path, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, Headers(), nullptr, std::move(content_receiver), + std::move(progress)); +} + +inline std::shared_ptr Client::Get(const char *path, + const Headers &headers, + ContentReceiver content_receiver) { + return Get(path, headers, nullptr, std::move(content_receiver), Progress()); +} + +inline std::shared_ptr Client::Get(const char *path, + const Headers &headers, + ContentReceiver content_receiver, + Progress progress) { + return Get(path, headers, nullptr, std::move(content_receiver), + std::move(progress)); +} + +inline std::shared_ptr Client::Get(const char *path, + const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver) { + return Get(path, headers, std::move(response_handler), content_receiver, + Progress()); +} + +inline std::shared_ptr Client::Get(const char *path, + const Headers &headers, + ResponseHandler response_handler, + ContentReceiver content_receiver, + Progress progress) { + Request req; + req.method = "GET"; + req.path = path; + req.headers = headers; + req.response_handler = std::move(response_handler); + req.content_receiver = std::move(content_receiver); + req.progress = std::move(progress); + + auto res = std::make_shared(); + return send(req, *res) ? res : nullptr; +} + +inline std::shared_ptr Client::Head(const char *path) { + return Head(path, Headers()); +} + +inline std::shared_ptr Client::Head(const char *path, + const Headers &headers) { + Request req; + req.method = "HEAD"; + req.headers = headers; + req.path = path; + + auto res = std::make_shared(); + + return send(req, *res) ? res : nullptr; +} + +inline std::shared_ptr Client::Post(const char *path) { + return Post(path, std::string(), nullptr); +} + +inline std::shared_ptr Client::Post(const char *path, + const std::string &body, + const char *content_type) { + return Post(path, Headers(), body, content_type); +} + +inline std::shared_ptr Client::Post(const char *path, + const Headers &headers, + const std::string &body, + const char *content_type) { + return send_with_content_provider("POST", path, headers, body, 0, nullptr, + content_type); +} + +inline std::shared_ptr Client::Post(const char *path, + const Params ¶ms) { + return Post(path, Headers(), params); +} + +inline std::shared_ptr Client::Post(const char *path, + size_t content_length, + ContentProvider content_provider, + const char *content_type) { + return Post(path, Headers(), content_length, content_provider, content_type); +} + +inline std::shared_ptr +Client::Post(const char *path, const Headers &headers, size_t content_length, + ContentProvider content_provider, const char *content_type) { + return send_with_content_provider("POST", path, headers, std::string(), + content_length, content_provider, + content_type); +} + +inline std::shared_ptr +Client::Post(const char *path, const Headers &headers, const Params ¶ms) { + auto query = detail::params_to_query_str(params); + return Post(path, headers, query, "application/x-www-form-urlencoded"); +} + +inline std::shared_ptr +Client::Post(const char *path, const MultipartFormDataItems &items) { + return Post(path, Headers(), items); +} + +inline std::shared_ptr +Client::Post(const char *path, const Headers &headers, + const MultipartFormDataItems &items) { + auto boundary = detail::make_multipart_data_boundary(); + + std::string body; + + for (const auto &item : items) { + body += "--" + boundary + "\r\n"; + body += "Content-Disposition: form-data; name=\"" + item.name + "\""; + if (!item.filename.empty()) { + body += "; filename=\"" + item.filename + "\""; + } + body += "\r\n"; + if (!item.content_type.empty()) { + body += "Content-Type: " + item.content_type + "\r\n"; + } + body += "\r\n"; + body += item.content + "\r\n"; + } + + body += "--" + boundary + "--\r\n"; + + std::string content_type = "multipart/form-data; boundary=" + boundary; + return Post(path, headers, body, content_type.c_str()); +} + +inline std::shared_ptr Client::Put(const char *path) { + return Put(path, std::string(), nullptr); +} + +inline std::shared_ptr Client::Put(const char *path, + const std::string &body, + const char *content_type) { + return Put(path, Headers(), body, content_type); +} + +inline std::shared_ptr Client::Put(const char *path, + const Headers &headers, + const std::string &body, + const char *content_type) { + return send_with_content_provider("PUT", path, headers, body, 0, nullptr, + content_type); +} + +inline std::shared_ptr Client::Put(const char *path, + size_t content_length, + ContentProvider content_provider, + const char *content_type) { + return Put(path, Headers(), content_length, content_provider, content_type); +} + +inline std::shared_ptr +Client::Put(const char *path, const Headers &headers, size_t content_length, + ContentProvider content_provider, const char *content_type) { + return send_with_content_provider("PUT", path, headers, std::string(), + content_length, content_provider, + content_type); +} + +inline std::shared_ptr Client::Put(const char *path, + const Params ¶ms) { + return Put(path, Headers(), params); +} + +inline std::shared_ptr +Client::Put(const char *path, const Headers &headers, const Params ¶ms) { + auto query = detail::params_to_query_str(params); + return Put(path, headers, query, "application/x-www-form-urlencoded"); +} + +inline std::shared_ptr Client::Patch(const char *path, + const std::string &body, + const char *content_type) { + return Patch(path, Headers(), body, content_type); +} + +inline std::shared_ptr Client::Patch(const char *path, + const Headers &headers, + const std::string &body, + const char *content_type) { + return send_with_content_provider("PATCH", path, headers, body, 0, nullptr, + content_type); +} + +inline std::shared_ptr Client::Patch(const char *path, + size_t content_length, + ContentProvider content_provider, + const char *content_type) { + return Patch(path, Headers(), content_length, content_provider, content_type); +} + +inline std::shared_ptr +Client::Patch(const char *path, const Headers &headers, size_t content_length, + ContentProvider content_provider, const char *content_type) { + return send_with_content_provider("PATCH", path, headers, std::string(), + content_length, content_provider, + content_type); +} + +inline std::shared_ptr Client::Delete(const char *path) { + return Delete(path, Headers(), std::string(), nullptr); +} + +inline std::shared_ptr Client::Delete(const char *path, + const std::string &body, + const char *content_type) { + return Delete(path, Headers(), body, content_type); +} + +inline std::shared_ptr Client::Delete(const char *path, + const Headers &headers) { + return Delete(path, headers, std::string(), nullptr); +} + +inline std::shared_ptr Client::Delete(const char *path, + const Headers &headers, + const std::string &body, + const char *content_type) { + Request req; + req.method = "DELETE"; + req.headers = headers; + req.path = path; + + if (content_type) { req.headers.emplace("Content-Type", content_type); } + req.body = body; + + auto res = std::make_shared(); + + return send(req, *res) ? res : nullptr; +} + +inline std::shared_ptr Client::Options(const char *path) { + return Options(path, Headers()); +} + +inline std::shared_ptr Client::Options(const char *path, + const Headers &headers) { + Request req; + req.method = "OPTIONS"; + req.path = path; + req.headers = headers; + + auto res = std::make_shared(); + + return send(req, *res) ? res : nullptr; +} + +inline void Client::stop() { + if (sock_ != INVALID_SOCKET) { + std::atomic sock(sock_.exchange(INVALID_SOCKET)); + detail::shutdown_socket(sock); + detail::close_socket(sock); + } +} + +inline void Client::set_timeout_sec(time_t timeout_sec) { + timeout_sec_ = timeout_sec; +} + +inline void Client::set_read_timeout(time_t sec, time_t usec) { + read_timeout_sec_ = sec; + read_timeout_usec_ = usec; +} + +inline void Client::set_keep_alive_max_count(size_t count) { + keep_alive_max_count_ = count; +} + +inline void Client::set_basic_auth(const char *username, const char *password) { + basic_auth_username_ = username; + basic_auth_password_ = password; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +inline void Client::set_digest_auth(const char *username, + const char *password) { + digest_auth_username_ = username; + digest_auth_password_ = password; +} +#endif + +inline void Client::set_follow_location(bool on) { follow_location_ = on; } + +inline void Client::set_compress(bool on) { compress_ = on; } + +inline void Client::set_interface(const char *intf) { interface_ = intf; } + +inline void Client::set_proxy(const char *host, int port) { + proxy_host_ = host; + proxy_port_ = port; +} + +inline void Client::set_proxy_basic_auth(const char *username, + const char *password) { + proxy_basic_auth_username_ = username; + proxy_basic_auth_password_ = password; +} + +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +inline void Client::set_proxy_digest_auth(const char *username, + const char *password) { + proxy_digest_auth_username_ = username; + proxy_digest_auth_password_ = password; +} +#endif + +inline void Client::set_logger(Logger logger) { logger_ = std::move(logger); } + +/* + * SSL Implementation + */ +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT +namespace detail { + +template +inline bool process_and_close_socket_ssl( + bool is_client_request, socket_t sock, size_t keep_alive_max_count, + time_t read_timeout_sec, time_t read_timeout_usec, SSL_CTX *ctx, + std::mutex &ctx_mutex, U SSL_connect_or_accept, V setup, T callback) { + assert(keep_alive_max_count > 0); + + SSL *ssl = nullptr; + { + std::lock_guard guard(ctx_mutex); + ssl = SSL_new(ctx); + } + + if (!ssl) { + close_socket(sock); + return false; + } + + auto bio = BIO_new_socket(static_cast(sock), BIO_NOCLOSE); + SSL_set_bio(ssl, bio, bio); + + if (!setup(ssl)) { + SSL_shutdown(ssl); + { + std::lock_guard guard(ctx_mutex); + SSL_free(ssl); + } + + close_socket(sock); + return false; + } + + auto ret = false; + + if (SSL_connect_or_accept(ssl) == 1) { + if (keep_alive_max_count > 1) { + auto count = keep_alive_max_count; + while (count > 0 && + (is_client_request || + select_read(sock, CPPHTTPLIB_KEEPALIVE_TIMEOUT_SECOND, + CPPHTTPLIB_KEEPALIVE_TIMEOUT_USECOND) > 0)) { + SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec); + auto last_connection = count == 1; + auto connection_close = false; + + ret = callback(ssl, strm, last_connection, connection_close); + if (!ret || connection_close) { break; } + + count--; + } + } else { + SSLSocketStream strm(sock, ssl, read_timeout_sec, read_timeout_usec); + auto dummy_connection_close = false; + ret = callback(ssl, strm, true, dummy_connection_close); + } + } + + if (ret) { + SSL_shutdown(ssl); // shutdown only if not already closed by remote + } + { + std::lock_guard guard(ctx_mutex); + SSL_free(ssl); + } + + close_socket(sock); + + return ret; +} + +#if OPENSSL_VERSION_NUMBER < 0x10100000L +static std::shared_ptr> openSSL_locks_; + +class SSLThreadLocks { +public: + SSLThreadLocks() { + openSSL_locks_ = + std::make_shared>(CRYPTO_num_locks()); + CRYPTO_set_locking_callback(locking_callback); + } + + ~SSLThreadLocks() { CRYPTO_set_locking_callback(nullptr); } + +private: + static void locking_callback(int mode, int type, const char * /*file*/, + int /*line*/) { + auto &lk = (*openSSL_locks_)[static_cast(type)]; + if (mode & CRYPTO_LOCK) { + lk.lock(); + } else { + lk.unlock(); + } + } +}; + +#endif + +class SSLInit { +public: + SSLInit() { +#if OPENSSL_VERSION_NUMBER < 0x1010001fL + SSL_load_error_strings(); + SSL_library_init(); +#else + OPENSSL_init_ssl( + OPENSSL_INIT_LOAD_SSL_STRINGS | OPENSSL_INIT_LOAD_CRYPTO_STRINGS, NULL); +#endif + } + + ~SSLInit() { +#if OPENSSL_VERSION_NUMBER < 0x1010001fL + ERR_free_strings(); +#endif + } + +private: +#if OPENSSL_VERSION_NUMBER < 0x10100000L + SSLThreadLocks thread_init_; +#endif +}; + +// SSL socket stream implementation +inline SSLSocketStream::SSLSocketStream(socket_t sock, SSL *ssl, + time_t read_timeout_sec, + time_t read_timeout_usec) + : sock_(sock), ssl_(ssl), read_timeout_sec_(read_timeout_sec), + read_timeout_usec_(read_timeout_usec) {} + +inline SSLSocketStream::~SSLSocketStream() {} + +inline bool SSLSocketStream::is_readable() const { + return detail::select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0; +} + +inline bool SSLSocketStream::is_writable() const { + return detail::select_write(sock_, 0, 0) > 0; +} + +inline ssize_t SSLSocketStream::read(char *ptr, size_t size) { + if (SSL_pending(ssl_) > 0 || + select_read(sock_, read_timeout_sec_, read_timeout_usec_) > 0) { + return SSL_read(ssl_, ptr, static_cast(size)); + } + return -1; +} + +inline ssize_t SSLSocketStream::write(const char *ptr, size_t size) { + if (is_writable()) { return SSL_write(ssl_, ptr, static_cast(size)); } + return -1; +} + +inline void SSLSocketStream::get_remote_ip_and_port(std::string &ip, + int &port) const { + detail::get_remote_ip_and_port(sock_, ip, port); +} + +static SSLInit sslinit_; + +} // namespace detail + +// SSL HTTP server implementation +inline SSLServer::SSLServer(const char *cert_path, const char *private_key_path, + const char *client_ca_cert_file_path, + const char *client_ca_cert_dir_path) { + ctx_ = SSL_CTX_new(SSLv23_server_method()); + + if (ctx_) { + SSL_CTX_set_options(ctx_, + SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | + SSL_OP_NO_COMPRESSION | + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); + + // auto ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); + // SSL_CTX_set_tmp_ecdh(ctx_, ecdh); + // EC_KEY_free(ecdh); + + if (SSL_CTX_use_certificate_chain_file(ctx_, cert_path) != 1 || + SSL_CTX_use_PrivateKey_file(ctx_, private_key_path, SSL_FILETYPE_PEM) != + 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } else if (client_ca_cert_file_path || client_ca_cert_dir_path) { + // if (client_ca_cert_file_path) { + // auto list = SSL_load_client_CA_file(client_ca_cert_file_path); + // SSL_CTX_set_client_CA_list(ctx_, list); + // } + + SSL_CTX_load_verify_locations(ctx_, client_ca_cert_file_path, + client_ca_cert_dir_path); + + SSL_CTX_set_verify( + ctx_, + SSL_VERIFY_PEER | + SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, + nullptr); + } + } +} + +inline SSLServer::SSLServer(X509 *cert, EVP_PKEY *private_key, + X509_STORE *client_ca_cert_store) { + ctx_ = SSL_CTX_new(SSLv23_server_method()); + + if (ctx_) { + SSL_CTX_set_options(ctx_, + SSL_OP_ALL | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | + SSL_OP_NO_COMPRESSION | + SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION); + + if (SSL_CTX_use_certificate(ctx_, cert) != 1 || + SSL_CTX_use_PrivateKey(ctx_, private_key) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } else if (client_ca_cert_store) { + + SSL_CTX_set_cert_store(ctx_, client_ca_cert_store); + + SSL_CTX_set_verify( + ctx_, + SSL_VERIFY_PEER | + SSL_VERIFY_FAIL_IF_NO_PEER_CERT, // SSL_VERIFY_CLIENT_ONCE, + nullptr); + } + } +} + +inline SSLServer::~SSLServer() { + if (ctx_) { SSL_CTX_free(ctx_); } +} + +inline bool SSLServer::is_valid() const { return ctx_; } + +inline bool SSLServer::process_and_close_socket(socket_t sock) { + return detail::process_and_close_socket_ssl( + false, sock, keep_alive_max_count_, read_timeout_sec_, read_timeout_usec_, + ctx_, ctx_mutex_, SSL_accept, [](SSL * /*ssl*/) { return true; }, + [this](SSL *ssl, Stream &strm, bool last_connection, + bool &connection_close) { + return process_request(strm, last_connection, connection_close, + [&](Request &req) { req.ssl = ssl; }); + }); +} + +// SSL HTTP client implementation +inline SSLClient::SSLClient(const std::string &host, int port, + const std::string &client_cert_path, + const std::string &client_key_path) + : Client(host, port, client_cert_path, client_key_path) { + ctx_ = SSL_CTX_new(SSLv23_client_method()); + + detail::split(&host_[0], &host_[host_.size()], '.', + [&](const char *b, const char *e) { + host_components_.emplace_back(std::string(b, e)); + }); + if (!client_cert_path.empty() && !client_key_path.empty()) { + if (SSL_CTX_use_certificate_file(ctx_, client_cert_path.c_str(), + SSL_FILETYPE_PEM) != 1 || + SSL_CTX_use_PrivateKey_file(ctx_, client_key_path.c_str(), + SSL_FILETYPE_PEM) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } + } +} + +inline SSLClient::SSLClient(const std::string &host, int port, + X509 *client_cert, EVP_PKEY *client_key) + : Client(host, port) { + ctx_ = SSL_CTX_new(SSLv23_client_method()); + + detail::split(&host_[0], &host_[host_.size()], '.', + [&](const char *b, const char *e) { + host_components_.emplace_back(std::string(b, e)); + }); + if (client_cert != nullptr && client_key != nullptr) { + if (SSL_CTX_use_certificate(ctx_, client_cert) != 1 || + SSL_CTX_use_PrivateKey(ctx_, client_key) != 1) { + SSL_CTX_free(ctx_); + ctx_ = nullptr; + } + } +} + +inline SSLClient::~SSLClient() { + if (ctx_) { SSL_CTX_free(ctx_); } +} + +inline bool SSLClient::is_valid() const { return ctx_; } + +inline void SSLClient::set_ca_cert_path(const char *ca_cert_file_path, + const char *ca_cert_dir_path) { + if (ca_cert_file_path) { ca_cert_file_path_ = ca_cert_file_path; } + if (ca_cert_dir_path) { ca_cert_dir_path_ = ca_cert_dir_path; } +} + +inline void SSLClient::set_ca_cert_store(X509_STORE *ca_cert_store) { + if (ca_cert_store) { ca_cert_store_ = ca_cert_store; } +} + +inline void SSLClient::enable_server_certificate_verification(bool enabled) { + server_certificate_verification_ = enabled; +} + +inline long SSLClient::get_openssl_verify_result() const { + return verify_result_; +} + +inline SSL_CTX *SSLClient::ssl_context() const { return ctx_; } + +inline bool SSLClient::process_and_close_socket( + socket_t sock, size_t request_count, + std::function + callback) { + + request_count = std::min(request_count, keep_alive_max_count_); + + return is_valid() && + detail::process_and_close_socket_ssl( + true, sock, request_count, read_timeout_sec_, read_timeout_usec_, + ctx_, ctx_mutex_, + [&](SSL *ssl) { + if (ca_cert_file_path_.empty() && ca_cert_store_ == nullptr) { + SSL_CTX_set_verify(ctx_, SSL_VERIFY_NONE, nullptr); + } else if (!ca_cert_file_path_.empty()) { + if (!SSL_CTX_load_verify_locations( + ctx_, ca_cert_file_path_.c_str(), nullptr)) { + return false; + } + SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); + } else if (ca_cert_store_ != nullptr) { + if (SSL_CTX_get_cert_store(ctx_) != ca_cert_store_) { + SSL_CTX_set_cert_store(ctx_, ca_cert_store_); + } + SSL_CTX_set_verify(ctx_, SSL_VERIFY_PEER, nullptr); + } + + if (SSL_connect(ssl) != 1) { return false; } + + if (server_certificate_verification_) { + verify_result_ = SSL_get_verify_result(ssl); + + if (verify_result_ != X509_V_OK) { return false; } + + auto server_cert = SSL_get_peer_certificate(ssl); + + if (server_cert == nullptr) { return false; } + + if (!verify_host(server_cert)) { + X509_free(server_cert); + return false; + } + X509_free(server_cert); + } + + return true; + }, + [&](SSL *ssl) { + SSL_set_tlsext_host_name(ssl, host_.c_str()); + return true; + }, + [&](SSL * /*ssl*/, Stream &strm, bool last_connection, + bool &connection_close) { + return callback(strm, last_connection, connection_close); + }); +} + +inline bool SSLClient::is_ssl() const { return true; } + +inline bool SSLClient::verify_host(X509 *server_cert) const { + /* Quote from RFC2818 section 3.1 "Server Identity" + + If a subjectAltName extension of type dNSName is present, that MUST + be used as the identity. Otherwise, the (most specific) Common Name + field in the Subject field of the certificate MUST be used. Although + the use of the Common Name is existing practice, it is deprecated and + Certification Authorities are encouraged to use the dNSName instead. + + Matching is performed using the matching rules specified by + [RFC2459]. If more than one identity of a given type is present in + the certificate (e.g., more than one dNSName name, a match in any one + of the set is considered acceptable.) Names may contain the wildcard + character * which is considered to match any single domain name + component or component fragment. E.g., *.a.com matches foo.a.com but + not bar.foo.a.com. f*.com matches foo.com but not bar.com. + + In some cases, the URI is specified as an IP address rather than a + hostname. In this case, the iPAddress subjectAltName must be present + in the certificate and must exactly match the IP in the URI. + + */ + return verify_host_with_subject_alt_name(server_cert) || + verify_host_with_common_name(server_cert); +} + +inline bool +SSLClient::verify_host_with_subject_alt_name(X509 *server_cert) const { + auto ret = false; + + auto type = GEN_DNS; + + struct in6_addr addr6; + struct in_addr addr; + size_t addr_len = 0; + +#ifndef __MINGW32__ + if (inet_pton(AF_INET6, host_.c_str(), &addr6)) { + type = GEN_IPADD; + addr_len = sizeof(struct in6_addr); + } else if (inet_pton(AF_INET, host_.c_str(), &addr)) { + type = GEN_IPADD; + addr_len = sizeof(struct in_addr); + } +#endif + + auto alt_names = static_cast( + X509_get_ext_d2i(server_cert, NID_subject_alt_name, nullptr, nullptr)); + + if (alt_names) { + auto dsn_matched = false; + auto ip_mached = false; + + auto count = sk_GENERAL_NAME_num(alt_names); + + for (auto i = 0; i < count && !dsn_matched; i++) { + auto val = sk_GENERAL_NAME_value(alt_names, i); + if (val->type == type) { + auto name = (const char *)ASN1_STRING_get0_data(val->d.ia5); + auto name_len = (size_t)ASN1_STRING_length(val->d.ia5); + + if (strlen(name) == name_len) { + switch (type) { + case GEN_DNS: dsn_matched = check_host_name(name, name_len); break; + + case GEN_IPADD: + if (!memcmp(&addr6, name, addr_len) || + !memcmp(&addr, name, addr_len)) { + ip_mached = true; + } + break; + } + } + } + } + + if (dsn_matched || ip_mached) { ret = true; } + } + + GENERAL_NAMES_free((STACK_OF(GENERAL_NAME) *)alt_names); + + return ret; +} + +inline bool SSLClient::verify_host_with_common_name(X509 *server_cert) const { + const auto subject_name = X509_get_subject_name(server_cert); + + if (subject_name != nullptr) { + char name[BUFSIZ]; + auto name_len = X509_NAME_get_text_by_NID(subject_name, NID_commonName, + name, sizeof(name)); + + if (name_len != -1) { + return check_host_name(name, static_cast(name_len)); + } + } + + return false; +} + +inline bool SSLClient::check_host_name(const char *pattern, + size_t pattern_len) const { + if (host_.size() == pattern_len && host_ == pattern) { return true; } + + // Wildcard match + // https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+bug/376484 + std::vector pattern_components; + detail::split(&pattern[0], &pattern[pattern_len], '.', + [&](const char *b, const char *e) { + pattern_components.emplace_back(std::string(b, e)); + }); + + if (host_components_.size() != pattern_components.size()) { return false; } + + auto itr = pattern_components.begin(); + for (const auto &h : host_components_) { + auto &p = *itr; + if (p != h && p != "*") { + auto partial_match = (p.size() > 0 && p[p.size() - 1] == '*' && + !p.compare(0, p.size() - 1, h)); + if (!partial_match) { return false; } + } + ++itr; + } + + return true; +} +#endif + +namespace url { + +struct Options { + // TODO: support more options... + bool follow_location = false; + std::string client_cert_path; + std::string client_key_path; + + std::string ca_cert_file_path; + std::string ca_cert_dir_path; + bool server_certificate_verification = false; +}; + +inline std::shared_ptr Get(const char *url, Options &options) { + const static std::regex re( + R"(^(https?)://([^:/?#]+)(?::(\d+))?([^?#]*(?:\?[^#]*)?)(?:#.*)?)"); + + std::cmatch m; + if (!std::regex_match(url, m, re)) { return nullptr; } + + auto next_scheme = m[1].str(); + auto next_host = m[2].str(); + auto port_str = m[3].str(); + auto next_path = m[4].str(); + + auto next_port = !port_str.empty() ? std::stoi(port_str) + : (next_scheme == "https" ? 443 : 80); + + if (next_path.empty()) { next_path = "/"; } + + if (next_scheme == "https") { +#ifdef CPPHTTPLIB_OPENSSL_SUPPORT + SSLClient cli(next_host.c_str(), next_port, options.client_cert_path, + options.client_key_path); + cli.set_follow_location(options.follow_location); + cli.set_ca_cert_path(options.ca_cert_file_path.c_str(), + options.ca_cert_dir_path.c_str()); + cli.enable_server_certificate_verification( + options.server_certificate_verification); + return cli.Get(next_path.c_str()); +#else + return nullptr; +#endif + } else { + Client cli(next_host.c_str(), next_port, options.client_cert_path, + options.client_key_path); + cli.set_follow_location(options.follow_location); + return cli.Get(next_path.c_str()); + } +} + +inline std::shared_ptr Get(const char *url) { + Options options; + return Get(url, options); +} + +} // namespace url + +// ---------------------------------------------------------------------------- + +} // namespace httplib + +#endif // CPPHTTPLIB_HTTPLIB_H diff --git a/test/meson.build b/test/meson.build index e52187688..2528c36b0 100644 --- a/test/meson.build +++ b/test/meson.build @@ -11,7 +11,8 @@ tests = [ 'pathTools', 'kiwixserve', 'book', - 'manager' + 'manager', + 'server' ] @@ -21,8 +22,15 @@ gtest_dep = dependency('gtest', required:false) if gtest_dep.found() and not meson.is_cross_build() + configure_file(input : 'data/wikipedia_en_ray_charles_mini_2020-03.zim', + output : 'zimfile.zim', + copy: true ) + foreach test_name : tests + # XXX: implicit_include_directories must be set to false, otherwise + # XXX: '#include ' includes the regex unit test binary test_exe = executable(test_name, [test_name+'.cpp'], + implicit_include_directories: false, link_with : kiwixlib, link_args: extra_link_args, dependencies : all_deps + [gtest_dep], diff --git a/test/server.cpp b/test/server.cpp new file mode 100644 index 000000000..58c8450d5 --- /dev/null +++ b/test/server.cpp @@ -0,0 +1,223 @@ +#include "gtest/gtest.h" + +#include "../include/manager.h" +#include "../include/server.h" +#include "../include/name_mapper.h" + +#include "./httplib.h" + +class ZimFileServer +{ +public: // types + typedef httplib::Headers Headers; + typedef std::shared_ptr Response; + +public: // functions + ZimFileServer(int serverPort, std::string zimpath); + ~ZimFileServer(); + + Response GET(const char* path, const Headers& headers = Headers()) + { + return client->Get(path, headers); + } + + Response HEAD(const char* path, const Headers& headers = Headers()) + { + return client->Head(path, headers); + } + +private: // data + kiwix::Library library; + kiwix::Manager manager; + std::unique_ptr nameMapper; + std::unique_ptr server; + std::unique_ptr client; +}; + +ZimFileServer::ZimFileServer(int serverPort, std::string zimpath) +: manager(&this->library) +{ + if (!manager.addBookFromPath(zimpath, zimpath, "", false)) + throw std::runtime_error("Unable to add the ZIM file '" + zimpath + "'"); + + const std::string address = "127.0.0.1"; + nameMapper.reset(new kiwix::HumanReadableNameMapper(library, false)); + server.reset(new kiwix::Server(&library, nameMapper.get())); + server->setAddress(address); + server->setPort(serverPort); + server->setNbThreads(2); + server->setVerbose(false); + + if ( !server->start() ) + throw std::runtime_error("ZimFileServer failed to start"); + + client.reset(new httplib::Client(address, serverPort)); +} + +ZimFileServer::~ZimFileServer() +{ + server->stop(); +} + +class ServerTest : public ::testing::Test +{ +protected: + std::unique_ptr zfs1_; + + const int PORT = 8001; + const std::string ZIMFILE = "./test/zimfile.zim"; + +protected: + void SetUp() override { + zfs1_.reset(new ZimFileServer(PORT, ZIMFILE)); + } + + void TearDown() override { + zfs1_.reset(); + } +}; + +struct Resource +{ + const char* url; +}; + +std::ostream& operator<<(std::ostream& out, const Resource& r) +{ + out << "url: " << r.url; + return out; +} + +Resource resources200Compressible[] = { + { "/" }, + + { "/skin/jquery-ui/jquery-ui.structure.min.css" }, + { "/skin/jquery-ui/jquery-ui.min.js" }, + { "/skin/jquery-ui/external/jquery/jquery.js" }, + { "/skin/jquery-ui/jquery-ui.theme.min.css" }, + { "/skin/jquery-ui/jquery-ui.min.css" }, + { "/skin/taskbar.js" }, + { "/skin/taskbar.css" }, + { "/skin/block_external.js" }, + + { "/search?content=zimfile&pattern=abcd" }, + + { "/suggest?content=zimfile&term=ray" }, + + { "/catch/external?source=www.example.com" }, + + { "/zimfile/A/index" }, + { "/zimfile/A/Ray_Charles" }, +}; + +Resource resources200Uncompressible[] = { + { "/skin/jquery-ui/images/ui-bg_flat_0_aaaaaa_40x100.png" }, + { "/skin/jquery-ui/images/ui-bg_flat_75_ffffff_40x100.png" }, + { "/skin/jquery-ui/images/ui-icons_222222_256x240.png" }, + { "/skin/jquery-ui/images/ui-bg_glass_55_fbf9ee_1x400.png" }, + { "/skin/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png" }, + { "/skin/jquery-ui/images/ui-bg_glass_65_ffffff_1x400.png" }, + { "/skin/jquery-ui/images/ui-icons_2e83ff_256x240.png" }, + { "/skin/jquery-ui/images/ui-icons_cd0a0a_256x240.png" }, + { "/skin/jquery-ui/images/ui-icons_888888_256x240.png" }, + { "/skin/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png" }, + { "/skin/jquery-ui/images/animated-overlay.gif" }, + { "/skin/jquery-ui/images/ui-bg_glass_75_dadada_1x400.png" }, + { "/skin/jquery-ui/images/ui-icons_454545_256x240.png" }, + { "/skin/jquery-ui/images/ui-bg_glass_95_fef1ec_1x400.png" }, + { "/skin/caret.png" }, + + { "/catalog/root.xml" }, + { "/catalog/searchdescription.xml" }, + { "/catalog/search" }, + + { "/meta?content=zimfile&name=title" }, + { "/meta?content=zimfile&name=description" }, + { "/meta?content=zimfile&name=language" }, + { "/meta?content=zimfile&name=name" }, + { "/meta?content=zimfile&name=tags" }, + { "/meta?content=zimfile&name=date" }, + { "/meta?content=zimfile&name=creator" }, + { "/meta?content=zimfile&name=publisher" }, + { "/meta?content=zimfile&name=favicon" }, + + { "/zimfile/I/m/Ray_Charles_classic_piano_pose.jpg" }, +}; + + +TEST_F(ServerTest, 200) +{ + for ( const Resource& res : resources200Compressible ) + EXPECT_EQ(200, zfs1_->GET(res.url)->status) << "res.url: " << res.url; + + for ( const Resource& res : resources200Uncompressible ) + EXPECT_EQ(200, zfs1_->GET(res.url)->status) << "res.url: " << res.url; +} + +TEST_F(ServerTest, CompressibleContentIsCompressedIfAcceptable) +{ + for ( const Resource& res : resources200Compressible ) { + const auto x = zfs1_->GET(res.url, { {"Accept-Encoding", "deflate"} }); + EXPECT_EQ(200, x->status) << res; + EXPECT_EQ("deflate", x->get_header_value("Content-Encoding")) << res; + EXPECT_EQ("Accept-Encoding", x->get_header_value("Vary")) << res; + } +} + +TEST_F(ServerTest, UncompressibleContentIsNotCompressed) +{ + for ( const Resource& res : resources200Uncompressible ) { + const auto x = zfs1_->GET(res.url, { {"Accept-Encoding", "deflate"} }); + EXPECT_EQ(200, x->status) << res; + EXPECT_EQ("", x->get_header_value("Content-Encoding")) << res; + } +} + +const char* urls404[] = { + "/non-existent-item", + "/skin/non-existent-skin-resource", + "/catalog", + "/catalog/non-existent-item", + "/meta", + "/meta?content=zimfile", + "/meta?content=zimfile&name=non-existent-item", + "/meta?content=non-existent-book&name=title", + "/random", + "/random?content=non-existent-book", + "/search", + "/suggest", + "/suggest?content=zimfile", + "/suggest?content=non-existent-book&term=abcd", + "/catch/external", + "/zimfile/A/non-existent-article", +}; + +TEST_F(ServerTest, 404) +{ + for ( const char* url : urls404 ) + EXPECT_EQ(404, zfs1_->GET(url)->status) << "url: " << url; +} + +TEST_F(ServerTest, SuccessfulSearchForAnArticleTitleRedirectsToTheArticle) +{ + auto g = zfs1_->GET("/search?content=zimfile&pattern=ray%20charles" ); + ASSERT_EQ(302, g->status); + ASSERT_TRUE(g->has_header("Location")); + ASSERT_EQ("/zimfile/A/Ray_Charles", g->get_header_value("Location")); +} + +TEST_F(ServerTest, RandomPageRedirectsToAnExistingArticle) +{ + auto g = zfs1_->GET("/random?content=zimfile"); + ASSERT_EQ(302, g->status); + ASSERT_TRUE(g->has_header("Location")); + ASSERT_TRUE(g->get_header_value("Location").find("/zimfile/A/") != std::string::npos); +} + +TEST_F(ServerTest, BookMainPageIsRedirectedToArticleIndex) +{ + auto g = zfs1_->GET("/zimfile"); + ASSERT_EQ(302, g->status); + ASSERT_TRUE(g->has_header("Location")); + ASSERT_EQ("/zimfile/A/index", g->get_header_value("Location")); +} From b0f65a02f2c5366de3e62da9f3dc6c04a89170d6 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sat, 18 Apr 2020 15:45:51 +0400 Subject: [PATCH 3/4] Server can be started on a random free port If the server is started with a port value of 0, it binds to a random free port. The bound port can be obtained with a `getPort()` method. --- include/server.h | 1 + src/server.cpp | 8 +++++++- test/server.cpp | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/server.h b/include/server.h index b38ad8c04..599db91d1 100644 --- a/include/server.h +++ b/include/server.h @@ -53,6 +53,7 @@ namespace kiwix void setRoot(const std::string& root); void setAddress(const std::string& addr) { m_addr = addr; } void setPort(int port) { m_port = port; } + int getPort() const { return m_port; } void setNbThreads(int threads) { m_nbThreads = threads; } void setVerbose(bool verbose) { m_verbose = verbose; } void setTaskbar(bool withTaskbar, bool withLibraryButton) diff --git a/src/server.cpp b/src/server.cpp index 511a8936d..b01469a85 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -109,6 +109,8 @@ class InternalServer { bool start(); void stop(); + int getPort() const { return m_port; } + private: Response handle_request(const RequestContext& request); Response build_500(const std::string& msg); @@ -162,7 +164,9 @@ bool Server::start() { m_withTaskbar, m_withLibraryButton, m_blockExternalLinks)); - return mp_server->start(); + auto s = mp_server->start(); + m_port = mp_server->getPort(); + return s; } void Server::stop() { @@ -245,6 +249,8 @@ bool InternalServer::start() { << std::endl; return false; } + if (m_port == 0) + m_port = MHD_get_daemon_info(mp_daemon, MHD_DAEMON_INFO_BIND_PORT)->port; return true; } diff --git a/test/server.cpp b/test/server.cpp index 58c8450d5..43fdd9caf 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -50,6 +50,8 @@ ZimFileServer::ZimFileServer(int serverPort, std::string zimpath) if ( !server->start() ) throw std::runtime_error("ZimFileServer failed to start"); + if ( serverPort == 0 ) + serverPort = server->getPort(); client.reset(new httplib::Client(address, serverPort)); } @@ -64,7 +66,7 @@ class ServerTest : public ::testing::Test protected: std::unique_ptr zfs1_; - const int PORT = 8001; + const int PORT = 0; const std::string ZIMFILE = "./test/zimfile.zim"; protected: From 9a893a854eb0f2f1fa9ef6aaca3f246e525549e4 Mon Sep 17 00:00:00 2001 From: Veloman Yunkan Date: Sat, 18 Apr 2020 17:00:28 +0400 Subject: [PATCH 4/4] Revert "Server can be started on a random free port" This change failed to build under the following platforms due to an older version of libmicrohttpd missing support for the MHD_DAEMON_INFO_BIND_PORT query: - Linux (native_dyn) - Linux (win32_dyn) --- include/server.h | 1 - src/server.cpp | 8 +------- test/server.cpp | 4 +--- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/include/server.h b/include/server.h index 599db91d1..b38ad8c04 100644 --- a/include/server.h +++ b/include/server.h @@ -53,7 +53,6 @@ namespace kiwix void setRoot(const std::string& root); void setAddress(const std::string& addr) { m_addr = addr; } void setPort(int port) { m_port = port; } - int getPort() const { return m_port; } void setNbThreads(int threads) { m_nbThreads = threads; } void setVerbose(bool verbose) { m_verbose = verbose; } void setTaskbar(bool withTaskbar, bool withLibraryButton) diff --git a/src/server.cpp b/src/server.cpp index b01469a85..511a8936d 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -109,8 +109,6 @@ class InternalServer { bool start(); void stop(); - int getPort() const { return m_port; } - private: Response handle_request(const RequestContext& request); Response build_500(const std::string& msg); @@ -164,9 +162,7 @@ bool Server::start() { m_withTaskbar, m_withLibraryButton, m_blockExternalLinks)); - auto s = mp_server->start(); - m_port = mp_server->getPort(); - return s; + return mp_server->start(); } void Server::stop() { @@ -249,8 +245,6 @@ bool InternalServer::start() { << std::endl; return false; } - if (m_port == 0) - m_port = MHD_get_daemon_info(mp_daemon, MHD_DAEMON_INFO_BIND_PORT)->port; return true; } diff --git a/test/server.cpp b/test/server.cpp index 43fdd9caf..58c8450d5 100644 --- a/test/server.cpp +++ b/test/server.cpp @@ -50,8 +50,6 @@ ZimFileServer::ZimFileServer(int serverPort, std::string zimpath) if ( !server->start() ) throw std::runtime_error("ZimFileServer failed to start"); - if ( serverPort == 0 ) - serverPort = server->getPort(); client.reset(new httplib::Client(address, serverPort)); } @@ -66,7 +64,7 @@ class ServerTest : public ::testing::Test protected: std::unique_ptr zfs1_; - const int PORT = 0; + const int PORT = 8001; const std::string ZIMFILE = "./test/zimfile.zim"; protected: