# Changelog All notable changes to this project will be documented in this file. ## [Unreleased] ## [1.9.3] - 2024-02-09 ### API changes list - Added getParameter() and getOptionalParameter(). - Change drogon::MultiPartParser's parameters data type. - Use std::string_view for WebSockets. ### Changed - Add support for gentoo linux, dev-db/mariadb contains mysql. - Introduce cpplint to the CI. - Enable readability/alt_tokens for cpplint. - Use clang-format-17. - Add newline at EOF. - Enable readability/inheritance for cpplint. - Enable build/explicit_make_pair for cpplint. - Enable build/include_order for cpplint. - Enable build/header_guard for cpplint. - Enable build/storage_class for cpplint. - Enable readability/multiline_string for cpplint. - Alias the safe hashmap template. - Simplify traits in utils. - Enhancement: extend drogon::ContentType for file handling. ### Fixed - Fix a wrong place of return. - Fix drogon::util::fromString(). ## [1.9.2] - 2024-01-18 ### API changes list - Feature: Integrate spdlog as logging backend. - Support asynchronous sending of chunked responses. ### Changed - Modify the configuration file templates in drogon_ctl. - Use execute_process instead of exec_program in FindJsoncpp.cmake. - GitHub Action to find typos in the codebase using codespell. - add discord link to readme. - Add -k option to the drogon_ctl when running the press command. - Refine request routing process. - Add CI tests with more compilers. - Avoid a race condition in database listener tests. - Remove macos-11 CI; not supported by Homebrew. - Bump github/codeql-action from 2 to 3. - Move the RealIpResolver plugin to the PreRouting join point. ### Fixed - Fix: typo on Mapper method. - Fix a error of coroutines on Windows. - Fix ORM: The original way did not handle exceptions correctly. - Remove the default ctor of the Row class in ORM. - Set the url of trantor to the official repository. - Fix htonll/ntohll redefinition. - Fix building with MSYS2. - Fix name issue when cross-compiling. ## [1.9.1] - 2023-11-27 ### API changes list - Pass HttpRequestPtr to custom error handlers. - Provide some functions for incrementing the value of given columns. - Return HttpAppFramework by setExceptionHandler. ### Changed - Custom sessions. - Use the constexpr if instead of std::enable_if. - Make id generator consistent. - Update test_cmake.csp. - Simplify drogon test with c++17. - Remove unused and undefined overloads of isBase64. ### Fixed - Fix build due to trantor commit out of date and address warnings. - Fix a bug of the GlobalFilters plugin. - Fix: uuid formatting. ## [1.9.0] - 2023-10-29 ### API changes list - Added isTopicEmpty function; ### Changed - Update the ubuntu Dockerfile; - Add optional Criteria && || operator support; - Bump actions/checkout from 3 to 4; - Make & and * directly adjacent to variable names; - Use wss://echo.websocket.events/.ws in WebSocket client example; - Change logs in the AccessLogger plugin to TRACE level; ### Fixed - Fix an error in the secureRandomString function; - FIX int mapping to int64_t instead of uint64_t; ## [1.9.0-rc.1] - 2023-09-23 ### API changes list - Drop cpp14 build support. - Add isHead() method to HttpRequest, to preserve information about the original method for use in the controller. - Allow omitting template parameter in execCommandSync. - Add a method to HttpRequest to access the matched routing parameters. ### Changed - Update readme files. - Allow sync advice to be callable on websocket requests. - Set concurrency to prevent blocking CI queue. - Validate clang-format version & Customize clang-format path. - Extract format action into distinct job. - Split macOS and Ubuntu CIs for readability. - Set concurrency for CodeQL. - Add dependabot.yml for GH actions. - Replace sprintf with snprintf. - Use ninja to build faster. - Avoid using well-known ports for demoMain. - Simplify coroutine implementation. - Add a plugin for prometheus. - Optimize plugins with redirection functions. - Optimize regex generator. - Add override keyword to setSockOptCallback. - SlashRemover optimization. ### Fixed - Fix race condition when setting the secure flag during test. ## [1.8.6] - 2023-08-23 ### Changed - Show outputs of try_compile for UUID libs. - Update Trantor to fix a serious bug when sending files. ## [1.8.5] - 2023-08-19 ### API changes list - Add the forwardCoro method to HttpAppFramework. - Possibility to add plugins without config file. - Implement QueryBuilder. - Add getOriginalPath function. - Add setsockopt to HttpClient. - Add overload function of newHttpResponse. - Add getConnectionCount method. ### Changed - Add synchronization interface to model's associated query. - Use syncAdvices.empty() to check. - Remove the deprecated Json::Reader. - Adapt Drogon to take advitange of Trantor TLS refactor. - Add avatars of all contributors to the readme file. - Remove docsforge from readme. - Adapt to gcc13. - Modify the HttpMessageBody class. - Add the GlobalFilters plugin. - Add filters and plugins to the drogon.h header file. - Add webp and svg to the default file_types. - Update SqlBinder.h. - Remove path from COMPILER_COMMAND. - Hodor plugin - Use IP bytes for user IP identification. - Add SlashRemover plugin. - Support setting max_files in loggers. - Use shared_ptr to store plugins. - Throw custom exception in HttpClient. - Base64 improvements. - Add CT_TEXT_JAVASCRIPT. - Fix typo in newHttpJsonResponse documentation. - Add CodeQL workflow. - constexpr base64 length calculators. - Make isBase64() and isInteger() take string_view. - Chore: add package.xml. - Add an example of yaml config file. - Remove some unused functions. - Use unsigned char to call the std::isspace function. - Change options BUILD_CTL and BUILD_EXAMPLES and update readme with Building options. - Remove unused CI files and Jekyll config. - Ensure that all filters, AOP advices, and handlers are executed within the IO threads. - Update test.sh and build.sh by appending prefix "X" to string variable comparisons. - Recognize URI in request lines. - Address warnings on macOS CI. - Perform insensitive string compare of cookie SameSite attribute. ### Fixed - Temporary fix dead HttpClient. - Fix a configuration error when building drogon_ctl. - Fix generation of JSON field validation for short type. - Fix bug on Mac M1 with redis chat example code. - Fix error: conversion from ‘long int’ to ‘Json::Value’ is ambiguous. - Bugfix: PgBatchConnection did not report error message. - Fix typo in config file. - Fix a hanging bug when writing large string to text field. - Fixed logic error of limiterExpireTime_. - Fix Missing Header BaseBuilder.h in CMakeLists. - Fix: Coroutine handle should be captured by value. - Fix issues in the ListParaView and content types. - Fix target link libraries of yaml-cpp to comaptiable with vcpkg. - Fix build error on win32/mingw. - Fix CI in MacOS. - Fix broken link in CONTRIBUTING.md. ## [1.8.4] - 2023-03-19 ### API Changes list - Add a configuration option to display local time in logs. - Add the stackLimit option for jsoncpp. - Add coroutine to wait until event loop ends. - Add switchThreadCoro(). - Add queueInLoopCoro function. ### Changed - Reduce overhead of constructing string from request status. - Add coroutine parameter binding test and make tests not blocking. - Use weakptr instead of shared_ptr in HttpClient. - Refactor HttpServer codes. - Add an option in CMakeLists.txt to set how to use trantor. - Add support to yaml config file. - Changes to free http client if no request is pending. - Trigger error message in drogon test when faced with bad parameter. ### Fixed - Make the token bucket full when it is initialized - Fix file r/w race condition in integration test. - Postgresql: don't handle events anymore after connection closing. - Fix multipart boundary with charset. - Fix a conan issue in github actions. - Hold shared pointer from the very beginning in WebSocketConnectionImpl. ## [1.8.3] - 2023-01-23 ### API changes list - Add onSessionStart() and onSessionDestroy() events - Support postgresql asynchronous notification (LISTEN/NOTIFY). ### Changed - Update Utilities.cc - Drogon test refactor - Enable json entry as string - Mark awaiters as non-copyable ### Fixed - Fix HttpController regex path matching - Fix a memory leak in the redis example - Partial fix for MSYS2 compat ## [1.8.2] - 2022-11-11 ### API changes list - Add the queueInLoopCoro function. - Avoid HashDoS attacks via random per-session hash initial state. ### Changed - Support the mediumint column when generate the mysql model. - Set Hiredis_FOUND to true when finding Hiredis library. - Add rate limiter. - Add some test cases for the sqlite datetime type. ### Fixed - Fix typo in drogon_test.h. - Fix a date race in drogon_test. - Fix a deadlock bug when closing all database connections. ## [1.8.1] - 2022-09-25 ### API changes list - Support redis subscription. ### Changed - Remove redundant member functions of drogon::Task. - Small patches on orm_lib. - Add support for the string_view type to SqlBinder in orm. ### Fixed - Fix a conflict of ssize_t type with hiredis. - Fix a test bug when clients start before servers. - Fix model template file Unreachable code. - Use the mysql_library_end() function to avoid memory leaks. ## [1.8.0] - 2022-09-01 ### API changes list - Add ‘not like‘ criteria. - Add HttpResponse::newStreamResponse(). - Add the same site option for session cookie. - Add support for custom SQL query. ### Changed - Update issue templates. - Enable automatic reconnect in mysql. - Add typename for clang-14. - A workaround for redis sync exec. - Resolve redis server hostname from config file. - Add username option to redis databases. - Return nullptr if a plugin is not loaded when getting it. - Support controller registration in plugin. - Check mysql-optionsv support in cmake. - Check if host header is set before setting. - Clear all database connections before quitting. - Add namespace to views when using drogon_ctl. - Support pipeline mode on PostgreSQL 14+. - Add content type to multipart file upload. - Make orm::Result compatible with C++ STL container concepts. - Throw exceptions instead of exiting when loading configuration fails. - Rename BUILD_TRANTOR_SHARED to BUILD_SHARED_LIBS. - Support compressed request. - Prevent sending multiple responses for a single request. - Remove the virtual specifier from functions marked with override. - Remove redundancies from the CMake action. - Ensure requiring a semi-colon after macros. - Omit redundant virtual specifiers. - Refactor orm::SqlBinder. - Implement toJson to convert std::vector to Json::Value. - Resolve real ip from HttpRequest. - Delete the unmaintained test script. - Change the listener port of the cookie test. - Use a raw string literal for the drogon banner. - Change timeout of pipeline test for the CI environment. - Accept "postgres" for DbClient type as well. - Log remote real address in AccessLogger. - Support coroutine filter. - Refactor db_test.cc. - Use nullopt instead of the no-argument constructor. - Set the running flag to false after calling the quit() method. - Fix doc link in README files. ### Fixed - Fix XXXControllers created on MSVC even if specified not to do so. - To avoid accessing a null point, make sure `result == OK` before accessing the response ptr. - Fix a bug when stopping redis service. - Fix mutex lock missing. - Fix tolower with cfi sanitizer. - Add move constructor to fix clang-14 compile error. - Fix HttpClient dns cache. - Fix bug when resolving redis server hostname. - Reset timer afters relaunching on Linux. - Fix some configuration file issues. - Fix HttpFile unittest error on Windows. - Fix core dump causing by logging in destructor. - Fixing link error when linking with static c-ares. - Remove redundant resource release. - Install missing header file apply.h. - Fix deleteFutureByPrimaryKey compile fail. - Fix compilation failure without database support. - Fix Mapper::updateBy() async api. - Fix no BUILD_CTL with tests. - Fix some bugs in RedisClient. - Fix a misuse of std::move. - Fix a bug when creating models with composite keys in sqlite3. - Fix a bug when converting the content-length string to size_t. - Fix a bug when parsing multipart/form-data. - Export the getVersion method for Windows. - Add a pre-compilation macro in the pg pipeline test code. ## [1.7.5] - 2022-02-19 ### API changes list - Add toString for drogon::ReqResult. - Add max-age, samesite options to Cookie. - Enable setup output of logs to files at any time. ### Changed - Use operator<< to convert ReqResult to string. - Remove sudo from build.sh. - Remove sudo from dependencies in Dockerfile. - Avoid attempt linking to std::fs when target does not exist. - Destroy fastdb client on quit. - Check HTTP client is not sending requests in sync mode on the same event loop. - Start listening after beginning advices. - Allow using json_cpp in other sublibraries. - Accept system lib for uuid on macOS. - Add `Not In` to ORM Criteria. ### Fixed - Fix WS test potentially can get stuck. - Fix a bug in model generation. - Prevent malformed upload path causing arbitrary write. - Fix missing "using namespace drogon::orm;" at autogenerated restful controllers. ## [1.7.4] - 2021-12-11 ### API Change List - Support setting client certificate and SSL options on HTTP client - Add more method for mapper - Add overloads for SqlBinder::operator<< with non-const ref parameter ### Changes - Use decay_t instead of remove_cvref_t - Prevent `drogon_ctl create_view` appending empty new lines to resulting - Add an example for using coroutines of redis clients - Export some symbols for Windows - Mark all awaiters as nodiscard - Handle SIGINT too - Support CoroMapper method chaining - Remove setting c++17 in FindFilesystem ### Fixed - Fix Drogon not building caused by FindFilesystem - Fix deprecated warning when using openssl 3 - Fix coroutine object destructing before coroutine ends in async_run - Fix build fail on CentOS8 - Fix some compiler warnings - Fix the error with multiple results when calling a procedure in mysql - Fix an error when binding a function pointer to SqlBinder - Fix orm tests - Fix CI to actually build in C++14 - Fix a race condition when resetting ws - Fix an error of std::bad_function_call - Update Trantor (fix sending partial files) ## [1.7.3] - 2021-10-17 ### API Change List - Support sending files by range - Allow outside access to the file path of an HTTP response - Support custom MIME types and extensions - Add the getOptionalParameter method - Add async_run ### Changes - Experimental HaikuOS Support - Improve AccessLogger - Add Alpine Dockerfile - Add option to disable brotli if desired by the builder ### Fixed - Fix a bug in the getIOLoop method - Return on redis connection errors - Fix(MultiPart): Does not respect quotes in Content-Disposition header - Fix(cmake): error in FindFilesystem - Fix(style): Change the NotFound page text color - Fix a race condition in testing ## [1.7.2] - 2021-08-24 ### API Change List - Add port() and host() to HttpClient - Add stop() method to the WebSocketClient class ### Changes - Enables higher level of warnings when building on UNIX with GCC - Generic optimizations - Add redis example - Added support for paths containing unicode characters on Windows - Load ParseAndAddDrogonTests in DrogonConfig - Add BUILD_DOC to cmake options - Add websocket server example - CMake: Add CPack for .deb and .rpm package generation - cmake: Use GNUInstallDirs to figure out install dirs. ### Fixed - Fix WS client example not working with integration_test - Fix WS client example error when encountering bad IP addresses - CacheFile supports >2GB files on 64-bit Windows - `drogon_ctl` now emits error on failing to create view from CSP - Added the `make` program to Ubuntu docker environment - Correctly check the case-insensitive value of the upgrade header of responses in websocket connections - Fix incorrect MD5 hash when using internal MD5 implementation when input size == block size+1 - Fix test success message incorrectly shown for a failed test when -s is flag present - Force using boost::filesystem when building for Android - Escape connection string in drogon_ctl create model - Fix some memory leak and race conditions in WebSocketClient ## [1.7.1] - 2021-06-24 ### Changes - Updated Dockerfile to Ubuntu 20.04 & Fixed Timezone Hangup. - Add jsonstore example. - Fix some typos. ### Fixed - Fix single layer directory traversal in StaticFileRouter. ## [1.7.0] - 2021-06-18 ### API changes list - Add the PreSendingAdvice to AOP. - Make Json::Value as a SQL parameters type. - Add the int type for the Row index parameter. - Add SSL_CONF_cmd support. - Add the setCustomStatusCode method. ### Changes - Fix sync_wait/co_future use-after-free. - Add the AccessLogger plugin. - Make AsyncTask only destruct when the coroutine reaches end of executions. - Add Drogon test framework. - Improve WebSocket mask handling. - Add minimal server side examples. - Optimize HttpControllersRouter for cases where regex is not needed. - Create controller instances after running instead of after being called. ### Fixed - Move resolverPtr when destroying an HttpClientImpl object. - Modify the way to create sqlite3 client. - Fix a bug when a network failure occurs on Redis connections. - Fix a bug of string_view for MSVC. - Fix 'build.sh -tshared'. - Fix compiler warnings. - Fix CacheMap crash in CI tests. ## [1.6.0] - 2021-05-15 ### API changes list - Add option to set default handler. - Add the setTimeout() method to the DbClient class and the RedisClient class. - Add the validateCert parameter to the newWebSocketClient method. ### Changed - A few mini changes to drogon_ctl command. - Improve the MultiPartParser class. - Add GNU -Werror & fix warnings. - Enhancements on files part. - Add version/soversion to shared library. - Disallow coroutines to be resolved as plain subroutine handlers. - Send the content-length header even if the body(POST,PUT,OPTIONS,PATCH) is empty. - Use make_exception_ptr instead of throw/catch when possible. - Remove duplicated inclusion. - Print error before terminating in AsyncTask. - Allow users to override drogon Find modules. - Use two-phase construction for the DbClientImpl and the RedisClientImpl. - Add support 'select <db>' for redis. ### Fixed - Fix a bug of the Transaction class. - Copy CoroMapper.h to installation location. - Remove the related request from the buffer if it's not sent after the timeout. - Fix ORM with SQLite3 not compiling on Arch Linux. - Fix an error when constructing RedisClientImpl objects. - Fix coroutine frame leak upon assigning to awaitable. - Set running flag to true before installing plugins. - Fix double free in coroutine exception handling. ## [1.5.1] - 2021-04-10 ### Fixed - Fix a bug of reflection failure. ## [1.5.0] - 2021-04-10 ### API changes list - Add option to disable signal handling. - Added newFileResponse Support for buffers in memory. - Add a method to HttpRequest to set the user_agent header. - Catch exceptions thrown by handlers. ### Changed - Add convert method to models. - Add Arch Dockerfile. - Add Redis support. - Print error and exit when IP parsing failed in server startup. - Use a canonical way of calling max() function on Windows. - Remove an assertion statement in the HttpClientImpl class. - Send ping messages by default for WebSockets. - Use canonical cmake logic for cross-compilation. - set make job count to the number of threads in GitHub Actions workflow. - Use lambda instead of std::bind in HttpServer. - Add exports macro to allow Shared Library with hidden symbols by default. - Remove repeated class names on relationships from the model generator. ### Fixed - Fix compile warnings in SQL client. - Fix compilation errors for the TimeFilter example. - Fix build.sh missing nproc error in build for macOS. - Fix a bug when creating sqlite3 models. - Fix two building corner cases, CMake quality of life improvements. - Add CoroMapper to models' friends. ## [1.4.1] - 2021-03-07 ### Fixed - Fix a bug of DbClientImpl class that can lead to a crash when database connections are breaking. ## [1.4.0] - 2021-03-05 ### API changes list - Add coroutine support. - Add default value interface to SqlBinder for MySQL and PostgreSQL. - Support SNI in the HttpClient class. - Validate certificate in HttpClient. - HttpRequest: add a feature to avoid URL encoding of the path. ### Changed - Handle cross-compiling properly. - Lowercase all HTTP headers, add webp and avif types. - Modify FindMySQL.cmake ### Fixed - Fix an error in the HttpClient class when a response has no content-length. - Return 404 or 405 responses correctly. - Fix compilation errors on vs2019. - Fix stack use after scope error in client_example. - Fix the error when the SSL handshake fails. ## [1.3.0] - 2021-01-16 ### API changes list - Add an option for setting float precision in Json string. ### Fixed - Fix brotli link order. - Fix cmake with drogonctl cross-compilation. - sqlite3: Insert into stmtsMap_ as string_view. - Fix some bugs when creating models via drogon_ctl. - Fix an error in sqlite3 ORM generator. - Fix an error with missing composite key to sqlite3 ORM generator. ### Changed - Remove the use of std::filesystem to adapt to old compilers. - Add github actions. - Serve wasm files with the correct MIME type. ## [1.2.0] - 2020-12-12 ### Fixed - Fix error when receiving response without content-length header. - Fix a stack-overflow error when high concurrency happening on sqlite3. - Fix MinGW ORM building by enabling htonll and ntohll. ### Changed - Modify the WebSocketTest controller to create a simple chat room. - Add support for OpenBSD. - Return 400 if the content-length is invalid. - Don't send content type in a 304 response. - Add the reuse_port option to app() interface. - Add the 'std::optional' support in the SqlBinder class and the Session class. - Add implicit page resolving capability. ## [1.1.0] - 2020-10-31 ### Fixed - Fix failing to connect to DB if parameters contains spaces. - Fix a CMAKE bug when SHARED and EXAMPLES are on. - Fix the HttpServer::isWebSocket method. - Find MariaDB client library correctly on Ubuntu 20.04. - Fix a bug when creating sqlite3 database models. - Fix a bug in the Mapper::insertFuture method. ### Changed - Disable TLS1.0/1.1 on HTTPS by default. - Use explicit lambda capture lists. - Modify the procedure of the app().run() method. - Support namespaces when creating view source files. - Add --path-to-namespace option to drogon_ctl for creating views. - Add the Host and Sec-WebSocket-Version headers when connecting to a websocket server. ## [1.0.0] - 2020-09-27 ### Fixed - Fix an issue of simple_reverse_proxy when handling chunked transfer-encoding. - Fix a bug when losting connection to MySQL server during query. - Remove the expired std::iterator template. - Fix a bug when creating models in some special cases. ### API changes list - Modify methods related to headers. - Remove the expired std::iterator template. - Add getListeners() method to the HttpAppFramework class. - Remove the useless method stat() from the PluginBase class. - Add ConfigLoader::ConfigLoader(const Json::Value &data). ### Changed - Add support for status code 418. - Modify session handling. - Modify the FileUpload.csp in simple_example to avoid CORS. - remove execution permission on /tmp/drogon.lock. ## [1.0.0-beta21] - 2020-08-19 ### Changed - Modify the Result class in ORM. ### Fixed - Fix zlib link error on Windows for the latest vcpkg. ## [1.0.0-beta20] - 2020-08-15 ### API changes list - Provide users with a method to change the session ID of a session. ### Changed - Modify parseContentType function. - Modify the docker file to build release version in docker. - Set session to requests for websockets. - Modify parseContentType function. - Change the return value type of the mktime() function in models. - Fix compilation warning of sprintf function. ### Fixed - Fix a bug when saving uploaded files on Windows. - Fix a MySQL issue when connections are lost. - Resolve an issue when sending big files (>=2GB) on Windows. - Fix boost::string_view compilation error of MysqlConnection class. - Set the response Access-Control-Allow-Headers header correctly for CORS. - Fix a bug in drogon_ctl when creating a model, that causes to write source files multiple times. ## [1.0.0-beta19] - 2020-07-16 ### API changes list - Add a method to disable unicode escaping in json string. - Add a timeout parameter when sending HTTP requests. - Add the getJsonError method. ### Changed - Remove the restriction on the location of layout tags in views. - Add a way to set the character set when creating DbClient objects. - Make `GET` as the only method for accessing static files. - Modify the 404 pages generator. - Modify the DbClient class. - Optimize the HttpResponse class. ### Fixed - Properly handle chunked encoding requests. - Destroy DNS resolver of HttpClient in the correct thread. - Add the header <cctype> to resolve build errors in VS2017. ## [1.0.0-beta18] - 2020-06-14 ### API changes list - Add a new joinpoint of AOP for modification on each HTTP response. - Add a method for the TERM signal handling. - Add getContextRef method to the WebSocketConnection class. ### Changed - Create a class template for publish subscribe pattern. - Add contribution recommendations. - Send a close message when closing a web socket connection. - Add additional formats for getHttpDate function. - Make app().run() method callable on a non-main thread. - Add digest filter in examples. - Use string_view to parse multipart/form-data requests. ### Fixed - Fix building of ORM on FreeBSD. - Fix a Mysql connection error on Windows. - Fix a bug in ListenerManager::getIOLoop(). - Fix the count() method of Mysql ORM. - Fix a compilation issue on windows. - Fix model generation for PostgreSQL primary keys. - Fix a bug with quoted column names in sqlite3 databases. ## [1.0.0-beta17] - 2020-05-22 ### API changes list - Add methods to get DbClient connection status ### Changed - Add causal profiling with coz - Add filters on static file locations - Pass data from view to its layout container - Add additional HttpStatusCodes and implement a custom error handler - Modify drogon_ctl to show more compilation information ### Fixed - Fix a bug in drogon_ctl (when size of a line is larger than buffer size) - Fix a connection bug of MariaDB clients ## [1.0.0-beta16] - 2020-04-27 ### API changes list - Standardize Row and Result api in ORM ### Changed - Add support for brotli compression - Parse content-type of HTTP requests - Remove non standard macros - Support url safe base64 codec ## [1.0.0-beta15] - 2020-03-28 ### API changes list - Modify the Attributes interface of the HttpRequest class - Add the getHomePage() method to HttpAppFramework ### Changed - Support br compression files - Update Content-Type support for PDF - Add support for MSVC 2015 - Optimize the rendering of HTTP responses - Update the Dynamic Views Loading, add the `layout` tag - Graceful shutdown ### Fixed - Fix error when finding the jsoncpp library - Fix the 'many to many' relationship in ORM - Fix a bug when creating json responses - Fix a bug on filters with WebSocketControllers - Fix a fatal bug in the MysqlConnection class - Fix crash with partial matched url - Fix null jsonObject from newHttpJsonRequest ## [1.0.0-beta14] - 2020-02-17 ### API changes list - None ### Added - Add IOLoop access function ### Changed - Add support for regular expressions when routing - Add location configuration for static resources - Port drogon to Windows - Support 'password' keyword in configuration files - Remove get_version.sh - Modify dynamic view loading algorithm, add 'layout' tag for view generation. ### Fixed - Fix an issue of out-of-range (#334) - Fix a bug in views generation (#341) ## [1.0.0-beta13] - 2020-01-04 ### API changes list - None ### Changed - Add some unit tests (based on gtest) - Add a reverse proxy example - Make a patch to support the ossp UUID library - Make shared linking possible - Add the drogon::OStringStream class - Optimize ORM - Modify singleton logic of DrClassMap ### Fixed - Fix an error in the batch mode of libpq - Fix an error when clients use HTTP1.0 ## [1.0.0-beta12] - 2019-11-30 ### Changed - Make dg_ctl a symlink - Modify some code styles - Explicitly set path to '/' for JSESSIONID cookie - Handle gzip errors safely - Add the SecureSSLRedirector plugin ### Fixed - Fix a bug in dg_ctl for creating models of sqlite3 - Reset the flag used to parse json to false before recycling HttpRequest objects ## [1.0.0-beta11] - 2019-11-06 ### Changed - Delete useless log output ## [1.0.0-beta10] - 2019-11-04 ### API changes list - None ### Changed - Add the headers configuration option for static files ### Fixed - Fix(compilation on alpine): Replace u_short alias. ## [1.0.0-beta9] - 2019-10-28 ### API changes list - Add interfaces for accessing content of attachments. - Add option to disable setting the 404 status code of the custom 404 page. - Make user can use any string as a placeholder's name in routing patterns. - Add type conversion methods to the HttpRequest and HttpResponse classes. ### Changed - Modify cmake configuration. - Modify the quit() method. - Implement relationships in ORM. ### Fixed - Fix size_t underflow of drogon_ctl. - Fix some race conditions. - Fix a busy loop bug when connections to MySQL server are timeout. ## [1.0.0-beta8] - 2019-10-03 ### API changes list - Add length() method to the Field class. - Add `as()` function template specialization to the Field class. - Add add attribute store methods to the HttpRequest class. - Add the setCustomContentTypeString() method to the HttpRequest class. - Add thread storage. ### Changed - Use .find('x') instead of .find("x") in a string search. - Add the ability to create restful API controllers. ### Fixed - Fix a bug of creating models for MySQL. - Fix a bug when HTTP method is PUT. - Fix a bug when using 'is null' substatement in ORM. - Fix a sqlite3 bug when some SQL errors occur. - Fix bug with parsing json. - Fix url decode. - Fix a error in HttpClient. - Fix a error in setThreadNum method. - Fix some race conditions. ## [1.0.0-beta7] - 2019-08-31 ### API changes list - Remove the default value parameter of some methods (#220) ### Changed - Optimize DNS in HttpClient and WebSocketClient (support c-ares library). - Reduce dependencies between declarations. - Add database tests in the travis CI and add test cases to database tests. - Reduce size of docker image. - Make the framework API support chained calls. - Add a synchronous join point for AOP. - Modify the CMakeLists to modern cmake style. ### Fixed - Fix bugs in default return values of functions(#220), - Fix a bug in the cmake configuration file when there's '+' in the building path. - Fix a bug in drogon_ctl (when creating orm models) ## [1.0.0-beta6] - 2019-08-08 ### API changes list - None ### Changed - Modify the 'create view' sub-command of drogon_ctl - Optimize the transmission of pipelining responses. - Add the DrogonConfig.cmake file so that users can use drogon with the `find_package(Drogon)` command. ## [1.0.0-beta5] - 2019-08-01 ### API changes list - None ### Added - Add two methods to control if the Server header or the Date header is sent to clients with HTTP responses. * void HttpAppFramework::enableServerHeader(bool); * void HttpAppFramework::enableDateHeader(bool); ### Changed - Support high performance batch mode of libpq. ### Fixed - None ## [1.0.0-beta4] - 2019-07-30 ### API changes list - HttpRequest::query() returns a const reference of std::string instead of a string_view - WebSocketConnection::setContext(), WebSocketConnection::getContext(), etc. - Remove the config.h from public API. ### Added - None ### Changed - Modify the CMakeLists.txt - Modify the get_version.sh ### Fixed - None ## [1.0.0-beta3] - 2019-07-28 ### API changes list - None ### Added - Add a README file for examples. - Add some managers to reduce the size of the HttpAppFrameworkImpl code. - Add missing wasm ContentType. ### Changed - Update the submodule - trantor. - Optimize processing of HTTP pipelining. ### Fixed - Fix an error in the HttpClient class when sending a request using the HEAD method. ## [1.0.0-beta2] - 2019-07-10 ### API changes list - Add setBody methods to the HttpRequest class. - Add the setContentTypeCodeAndCustomString method to the HttpResponse class. ### Added - Add stress testing command to drogon_ctl. - Add -v, -h parameters to drogon_ctl. ### Changed - Update the submodule - trantor. - Modify the handling of CORS. - Optimize the htmlTranslate method and the Field class. - Make all listeners share IO threads in the MacOS/Unix system. ### Fixed - Fix a bug of the IsPlugin class. - Use default constructor of string_view to reset _statusMessage to fix a warning on GCC 9.1 on Arch Linux. ## [1.0.0-beta1] - 2019-06-11 [Unreleased]: https://github.com/an-tao/drogon/compare/v1.9.3...HEAD [1.9.3]: https://github.com/an-tao/drogon/compare/v1.9.2...v1.9.3 [1.9.2]: https://github.com/an-tao/drogon/compare/v1.9.1...v1.9.2 [1.9.1]: https://github.com/an-tao/drogon/compare/v1.9.0...v1.9.1 [1.9.0]: https://github.com/an-tao/drogon/compare/v1.9.0-rc.1...v1.9.0 [1.9.0-rc.1]: https://github.com/an-tao/drogon/compare/v1.8.6...v1.9.0-rc.1 [1.8.6]: https://github.com/an-tao/drogon/compare/v1.8.5...v1.8.6 [1.8.5]: https://github.com/an-tao/drogon/compare/v1.8.4...v1.8.5 [1.8.4]: https://github.com/an-tao/drogon/compare/v1.8.3...v1.8.4 [1.8.3]: https://github.com/an-tao/drogon/compare/v1.8.2...v1.8.3 [1.8.2]: https://github.com/an-tao/drogon/compare/v1.8.1...v1.8.2 [1.8.1]: https://github.com/an-tao/drogon/compare/v1.8.0...v1.8.1 [1.8.0]: https://github.com/an-tao/drogon/compare/v1.7.5...v1.8.0 [1.7.5]: https://github.com/an-tao/drogon/compare/v1.7.4...v1.7.5 [1.7.4]: https://github.com/an-tao/drogon/compare/v1.7.3...v1.7.4 [1.7.3]: https://github.com/an-tao/drogon/compare/v1.7.2...v1.7.3 [1.7.2]: https://github.com/an-tao/drogon/compare/v1.7.1...v1.7.2 [1.7.1]: https://github.com/an-tao/drogon/compare/v1.7.0...v1.7.1 [1.7.0]: https://github.com/an-tao/drogon/compare/v1.6.0...v1.7.0 [1.6.0]: https://github.com/an-tao/drogon/compare/v1.5.1...v1.6.0 [1.5.1]: https://github.com/an-tao/drogon/compare/v1.5.0...v1.5.1 [1.5.0]: https://github.com/an-tao/drogon/compare/v1.4.1...v1.5.0 [1.4.1]: https://github.com/an-tao/drogon/compare/v1.4.0...v1.4.1 [1.4.0]: https://github.com/an-tao/drogon/compare/v1.3.0...v1.4.0 [1.3.0]: https://github.com/an-tao/drogon/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/an-tao/drogon/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/an-tao/drogon/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/an-tao/drogon/compare/v1.0.0-beta21...v1.0.0 [1.0.0-beta21]: https://github.com/an-tao/drogon/compare/v1.0.0-beta20...v1.0.0-beta21 [1.0.0-beta20]: https://github.com/an-tao/drogon/compare/v1.0.0-beta19...v1.0.0-beta20 [1.0.0-beta19]: https://github.com/an-tao/drogon/compare/v1.0.0-beta18...v1.0.0-beta19 [1.0.0-beta18]: https://github.com/an-tao/drogon/compare/v1.0.0-beta17...v1.0.0-beta18 [1.0.0-beta17]: https://github.com/an-tao/drogon/compare/v1.0.0-beta16...v1.0.0-beta17 [1.0.0-beta16]: https://github.com/an-tao/drogon/compare/v1.0.0-beta15...v1.0.0-beta16 [1.0.0-beta15]: https://github.com/an-tao/drogon/compare/v1.0.0-beta14...v1.0.0-beta15 [1.0.0-beta14]: https://github.com/an-tao/drogon/compare/v1.0.0-beta13...v1.0.0-beta14 [1.0.0-beta13]: https://github.com/an-tao/drogon/compare/v1.0.0-beta12...v1.0.0-beta13 [1.0.0-beta12]: https://github.com/an-tao/drogon/compare/v1.0.0-beta11...v1.0.0-beta12 [1.0.0-beta11]: https://github.com/an-tao/drogon/compare/v1.0.0-beta10...v1.0.0-beta11 [1.0.0-beta10]: https://github.com/an-tao/drogon/compare/v1.0.0-beta9...v1.0.0-beta10 [1.0.0-beta9]: https://github.com/an-tao/drogon/compare/v1.0.0-beta8...v1.0.0-beta9 [1.0.0-beta8]: https://github.com/an-tao/drogon/compare/v1.0.0-beta7...v1.0.0-beta8 [1.0.0-beta7]: https://github.com/an-tao/drogon/compare/v1.0.0-beta6...v1.0.0-beta7 [1.0.0-beta6]: https://github.com/an-tao/drogon/compare/v1.0.0-beta5...v1.0.0-beta6 [1.0.0-beta5]: https://github.com/an-tao/drogon/compare/v1.0.0-beta4...v1.0.0-beta5 [1.0.0-beta4]: https://github.com/an-tao/drogon/compare/v1.0.0-beta3...v1.0.0-beta4 [1.0.0-beta3]: https://github.com/an-tao/drogon/compare/v1.0.0-beta2...v1.0.0-beta3 [1.0.0-beta2]: https://github.com/an-tao/drogon/compare/v1.0.0-beta1...v1.0.0-beta2 [1.0.0-beta1]: https://github.com/an-tao/drogon/releases/tag/v1.0.0-beta1