drogon/ChangeLog.md

22 KiB

Changelog

All notable changes to this project will be documented in this file.

Unreleased

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(MutliPart): 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 ' 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 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<bool>() 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