Showing preview only (3,571K chars total). Download the full file or copy to clipboard to get everything.
Repository: drogonframework/drogon
Branch: master
Commit: 9b9c49b05535
Files: 545
Total size: 3.3 MB
Directory structure:
gitextract_w7tbik7q/
├── .Doxyfile
├── .clang-format
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── cmake.yml
│ ├── codeql.yml
│ ├── codespell.yml
│ ├── cpp.yml
│ └── docker-publish.yml
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── CONTRIBUTING.md
├── CPPLINT.cfg
├── ChangeLog.md
├── LICENSE
├── README.md
├── README.zh-CN.md
├── README.zh-TW.md
├── build.sh
├── cmake/
│ ├── DrogonUtilities.cmake
│ ├── Packages.cmake
│ ├── ParseAndAddDrogonTests.cmake
│ ├── templates/
│ │ ├── DrogonConfig.cmake.in
│ │ ├── config.h.in
│ │ └── version.h.in
│ └── tests/
│ ├── check_has_std_filesystem_path.cc
│ ├── normal_uuid_lib_test.cc
│ ├── ossp_uuid_lib_test.cc
│ └── test_libpq_batch_mode.cc
├── cmake_modules/
│ ├── FindBrotli.cmake
│ ├── FindFilesystem.cmake
│ ├── FindHiredis.cmake
│ ├── FindJsoncpp.cmake
│ ├── FindMySQL.cmake
│ ├── FindSQLite3.cmake
│ ├── FindUUID.cmake
│ ├── Findcoz-profiler.cmake
│ └── Findpg.cmake
├── conanfile.txt
├── config.example.json
├── config.example.yaml
├── docker/
│ ├── alpine/
│ │ ├── Dockerfile
│ │ └── README.md
│ ├── arch/
│ │ └── Dockerfile
│ └── ubuntu/
│ └── Dockerfile
├── drogon_ctl/
│ ├── CMakeLists.txt
│ ├── CommandHandler.h
│ ├── CopyDlls.cmake
│ ├── cmd.cc
│ ├── cmd.h
│ ├── create.cc
│ ├── create.h
│ ├── create_controller.cc
│ ├── create_controller.h
│ ├── create_filter.cc
│ ├── create_filter.h
│ ├── create_model.cc
│ ├── create_model.h
│ ├── create_plugin.cc
│ ├── create_plugin.h
│ ├── create_project.cc
│ ├── create_project.h
│ ├── create_view.cc
│ ├── create_view.h
│ ├── help.cc
│ ├── help.h
│ ├── main.cc
│ ├── press.cc
│ ├── press.h
│ ├── templates/
│ │ ├── cmake.csp
│ │ ├── config_json.csp
│ │ ├── config_yaml.csp
│ │ ├── demoMain.csp
│ │ ├── filter_cc.csp
│ │ ├── filter_h.csp
│ │ ├── gitignore.csp
│ │ ├── model_cc.csp
│ │ ├── model_h.csp
│ │ ├── model_json.csp
│ │ ├── plugin_cc.csp
│ │ ├── plugin_h.csp
│ │ ├── restful_controller_base_cc.csp
│ │ ├── restful_controller_base_h.csp
│ │ ├── restful_controller_cc.csp
│ │ ├── restful_controller_custom_cc.csp
│ │ ├── restful_controller_custom_h.csp
│ │ ├── restful_controller_h.csp
│ │ ├── test_cmake.csp
│ │ └── test_main.csp
│ ├── version.cc
│ └── version.h
├── examples/
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── async_stream/
│ │ ├── RequestStreamExampleCtrl.cc
│ │ └── main.cc
│ ├── benchmark/
│ │ ├── BenchmarkCtrl.cc
│ │ ├── BenchmarkCtrl.h
│ │ ├── JsonCtrl.cc
│ │ ├── JsonCtrl.h
│ │ └── main.cc
│ ├── client_example/
│ │ └── main.cc
│ ├── cors/
│ │ └── main.cc
│ ├── file_upload/
│ │ ├── FileUpload.csp
│ │ └── file_upload.cc
│ ├── helloworld/
│ │ ├── HelloController.cc
│ │ ├── HelloView.csp
│ │ ├── HelloViewController.cc
│ │ └── main.cc
│ ├── jsonstore/
│ │ ├── README.md
│ │ └── main.cc
│ ├── login_session/
│ │ ├── LoginPage.csp
│ │ ├── LogoutPage.csp
│ │ └── main.cc
│ ├── prometheus_example/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── config.json
│ │ ├── controllers/
│ │ │ ├── PromTestCtrl.cc
│ │ │ └── PromTestCtrl.h
│ │ ├── filters/
│ │ │ ├── PromStat.cc
│ │ │ └── PromStat.h
│ │ ├── main.cc
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ └── test_main.cc
│ ├── redis/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── controllers/
│ │ │ ├── Client.cc
│ │ │ ├── Client.h
│ │ │ ├── WsClient.cc
│ │ │ └── WsClient.h
│ │ └── main.cc
│ ├── redis_cache/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── DateFuncs.h
│ │ ├── README.md
│ │ ├── RedisCache.h
│ │ ├── config.json
│ │ ├── controllers/
│ │ │ ├── SlowCtrl.cc
│ │ │ └── SlowCtrl.h
│ │ ├── filters/
│ │ │ ├── TimeFilter.cc
│ │ │ └── TimeFilter.h
│ │ ├── main.cc
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ └── test_main.cc
│ ├── redis_chat/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── controllers/
│ │ │ ├── Chat.cc
│ │ │ └── Chat.h
│ │ └── main.cc
│ ├── simple_reverse_proxy/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── main.cc
│ │ └── plugins/
│ │ ├── SimpleReverseProxy.cc
│ │ └── SimpleReverseProxy.h
│ ├── websocket_client/
│ │ └── WebSocketClient.cc
│ └── websocket_server/
│ └── WebSocketServer.cc
├── format.sh
├── lib/
│ ├── inc/
│ │ └── drogon/
│ │ ├── Attribute.h
│ │ ├── CacheMap.h
│ │ ├── Cookie.h
│ │ ├── DrClassMap.h
│ │ ├── DrObject.h
│ │ ├── DrTemplate.h
│ │ ├── DrTemplateBase.h
│ │ ├── HttpAppFramework.h
│ │ ├── HttpBinder.h
│ │ ├── HttpClient.h
│ │ ├── HttpController.h
│ │ ├── HttpFilter.h
│ │ ├── HttpMiddleware.h
│ │ ├── HttpRequest.h
│ │ ├── HttpResponse.h
│ │ ├── HttpSimpleController.h
│ │ ├── HttpTypes.h
│ │ ├── HttpViewData.h
│ │ ├── IOThreadStorage.h
│ │ ├── IntranetIpFilter.h
│ │ ├── LocalHostFilter.h
│ │ ├── MultiPart.h
│ │ ├── NotFound.h
│ │ ├── PubSubService.h
│ │ ├── RateLimiter.h
│ │ ├── RequestStream.h
│ │ ├── Session.h
│ │ ├── UploadFile.h
│ │ ├── WebSocketClient.h
│ │ ├── WebSocketConnection.h
│ │ ├── WebSocketController.h
│ │ ├── drogon.h
│ │ ├── drogon_callbacks.h
│ │ ├── drogon_test.h
│ │ ├── plugins/
│ │ │ ├── AccessLogger.h
│ │ │ ├── GlobalFilters.h
│ │ │ ├── Hodor.h
│ │ │ ├── Plugin.h
│ │ │ ├── PromExporter.h
│ │ │ ├── RealIpResolver.h
│ │ │ ├── Redirector.h
│ │ │ ├── SecureSSLRedirector.h
│ │ │ └── SlashRemover.h
│ │ └── utils/
│ │ ├── FunctionTraits.h
│ │ ├── HttpConstraint.h
│ │ ├── OStringStream.h
│ │ ├── Utilities.h
│ │ ├── coroutine.h
│ │ ├── monitoring/
│ │ │ ├── Collector.h
│ │ │ ├── Counter.h
│ │ │ ├── Gauge.h
│ │ │ ├── Histogram.h
│ │ │ ├── Metric.h
│ │ │ ├── Registry.h
│ │ │ ├── Sample.h
│ │ │ └── StopWatch.h
│ │ └── monitoring.h
│ ├── src/
│ │ ├── AOPAdvice.cc
│ │ ├── AOPAdvice.h
│ │ ├── AccessLogger.cc
│ │ ├── CacheFile.cc
│ │ ├── CacheFile.h
│ │ ├── ConfigAdapter.h
│ │ ├── ConfigAdapterManager.cc
│ │ ├── ConfigAdapterManager.h
│ │ ├── ConfigLoader.cc
│ │ ├── ConfigLoader.h
│ │ ├── ControllerBinderBase.h
│ │ ├── Cookie.cc
│ │ ├── DbClientManager.h
│ │ ├── DbClientManagerSkipped.cc
│ │ ├── DrClassMap.cc
│ │ ├── DrTemplateBase.cc
│ │ ├── FixedWindowRateLimiter.cc
│ │ ├── FixedWindowRateLimiter.h
│ │ ├── GlobalFilters.cc
│ │ ├── Histogram.cc
│ │ ├── Hodor.cc
│ │ ├── HttpAppFrameworkImpl.cc
│ │ ├── HttpAppFrameworkImpl.h
│ │ ├── HttpBinder.cc
│ │ ├── HttpClientImpl.cc
│ │ ├── HttpClientImpl.h
│ │ ├── HttpConnectionLimit.cc
│ │ ├── HttpConnectionLimit.h
│ │ ├── HttpControllerBinder.cc
│ │ ├── HttpControllerBinder.h
│ │ ├── HttpControllersRouter.cc
│ │ ├── HttpControllersRouter.h
│ │ ├── HttpFileImpl.cc
│ │ ├── HttpFileImpl.h
│ │ ├── HttpFileUploadRequest.cc
│ │ ├── HttpFileUploadRequest.h
│ │ ├── HttpMessageBody.h
│ │ ├── HttpRequestImpl.cc
│ │ ├── HttpRequestImpl.h
│ │ ├── HttpRequestParser.cc
│ │ ├── HttpRequestParser.h
│ │ ├── HttpResponseImpl.cc
│ │ ├── HttpResponseImpl.h
│ │ ├── HttpResponseParser.cc
│ │ ├── HttpResponseParser.h
│ │ ├── HttpServer.cc
│ │ ├── HttpServer.h
│ │ ├── HttpUtils.cc
│ │ ├── HttpUtils.h
│ │ ├── HttpViewData.cc
│ │ ├── IntranetIpFilter.cc
│ │ ├── JsonConfigAdapter.cc
│ │ ├── JsonConfigAdapter.h
│ │ ├── ListenerManager.cc
│ │ ├── ListenerManager.h
│ │ ├── LocalHostFilter.cc
│ │ ├── MiddlewaresFunction.cc
│ │ ├── MiddlewaresFunction.h
│ │ ├── MultiPart.cc
│ │ ├── MultipartStreamParser.cc
│ │ ├── MultipartStreamParser.h
│ │ ├── NotFound.cc
│ │ ├── PluginsManager.cc
│ │ ├── PluginsManager.h
│ │ ├── PromExporter.cc
│ │ ├── RangeParser.cc
│ │ ├── RangeParser.h
│ │ ├── RateLimiter.cc
│ │ ├── RealIpResolver.cc
│ │ ├── Redirector.cc
│ │ ├── RedisClientManager.h
│ │ ├── RedisClientManagerSkipped.cc
│ │ ├── RedisClientSkipped.cc
│ │ ├── RedisResultSkipped.cc
│ │ ├── RequestStream.cc
│ │ ├── SecureSSLRedirector.cc
│ │ ├── SessionManager.cc
│ │ ├── SessionManager.h
│ │ ├── SharedLibManager.cc
│ │ ├── SharedLibManager.h
│ │ ├── SlashRemover.cc
│ │ ├── SlidingWindowRateLimiter.cc
│ │ ├── SlidingWindowRateLimiter.h
│ │ ├── SpinLock.h
│ │ ├── StaticFileRouter.cc
│ │ ├── StaticFileRouter.h
│ │ ├── TaskTimeoutFlag.cc
│ │ ├── TaskTimeoutFlag.h
│ │ ├── TokenBucketRateLimiter.cc
│ │ ├── TokenBucketRateLimiter.h
│ │ ├── Utilities.cc
│ │ ├── WebSocketClientImpl.cc
│ │ ├── WebSocketClientImpl.h
│ │ ├── WebSocketConnectionImpl.cc
│ │ ├── WebSocketConnectionImpl.h
│ │ ├── YamlConfigAdapter.cc
│ │ ├── YamlConfigAdapter.h
│ │ ├── drogon_test.cc
│ │ └── impl_forwards.h
│ └── tests/
│ ├── CMakeLists.txt
│ ├── CookieSameSite.cc
│ ├── RealIpResolverTest.cc
│ ├── integration_test/
│ │ ├── client/
│ │ │ ├── HttpPipeliningTest.cc
│ │ │ ├── MultipleWsTest.cc
│ │ │ ├── RequestStreamTest.cc
│ │ │ ├── WebSocketTest.cc
│ │ │ └── main.cc
│ │ └── server/
│ │ ├── BeginAdviceTest.cc
│ │ ├── BeginAdviceTest.h
│ │ ├── CoroFilter.cpp
│ │ ├── CoroFilter.h
│ │ ├── CustomCtrl.cc
│ │ ├── CustomCtrl.h
│ │ ├── CustomHeaderFilter.cc
│ │ ├── CustomHeaderFilter.h
│ │ ├── DigestAuthFilter.cc
│ │ ├── DigestAuthFilter.h
│ │ ├── DoNothingPlugin.cc
│ │ ├── DoNothingPlugin.h
│ │ ├── FileUpload.csp
│ │ ├── ForwardCtrl.cc
│ │ ├── ForwardCtrl.h
│ │ ├── JsonTestController.cc
│ │ ├── JsonTestController.h
│ │ ├── ListParaCtl.cc
│ │ ├── ListParaCtl.h
│ │ ├── ListParaView.csp
│ │ ├── MethodTest.cc
│ │ ├── MethodTest.h
│ │ ├── MiddlewareTest.cc
│ │ ├── PipeliningTest.cc
│ │ ├── PipeliningTest.h
│ │ ├── RangeTestController.cc
│ │ ├── RangeTestController.h
│ │ ├── RequestStreamTestCtrl.cc
│ │ ├── TestController.cc
│ │ ├── TestController.h
│ │ ├── TestPlugin.cc
│ │ ├── TestPlugin.h
│ │ ├── TestView.csp
│ │ ├── TestViewCtl.cc
│ │ ├── TestViewCtl.h
│ │ ├── TimeFilter.cc
│ │ ├── TimeFilter.h
│ │ ├── WebSocketTest.cc
│ │ ├── WebSocketTest.h
│ │ ├── a-directory/
│ │ │ └── page.html
│ │ ├── api_Attachment.cc
│ │ ├── api_Attachment.h
│ │ ├── api_v1_ApiTest.cc
│ │ ├── api_v1_ApiTest.h
│ │ ├── api_v1_CoroTest.cc
│ │ ├── api_v1_CoroTest.h
│ │ ├── header.csp
│ │ ├── index.html
│ │ ├── main.cc
│ │ ├── test.md
│ │ └── 中文.txt
│ ├── main_CookieSameSite.cc
│ └── unittests/
│ ├── Base64Test.cc
│ ├── BrotliTest.cc
│ ├── CacheMapTest.cc
│ ├── ClassNameTest.cc
│ ├── ControllerCreationTest.cc
│ ├── CookieTest.cc
│ ├── CoroutineTest.cc
│ ├── DrObjectTest.cc
│ ├── FileTypeTest.cc
│ ├── GzipTest.cc
│ ├── HttpDateTest.cc
│ ├── HttpFileTest.cc
│ ├── HttpFullDateTest.cc
│ ├── HttpHeaderTest.cc
│ ├── HttpViewDataTest.cc
│ ├── MD5Test.cc
│ ├── MainLoopTest.cc
│ ├── MsgBufferTest.cc
│ ├── MultiPartParserTest.cc
│ ├── OStringStreamTest.cc
│ ├── PubSubServiceUnittest.cc
│ ├── Sha1Test.cc
│ ├── SlashRemoverTest.cc
│ ├── StringOpsTest.cc
│ ├── UrlCodecTest.cc
│ ├── UtilitiesTest.cc
│ ├── UuidUnittest.cc
│ ├── WebsocketResponseTest.cc
│ └── main.cc
├── nosql_lib/
│ └── redis/
│ ├── inc/
│ │ └── drogon/
│ │ └── nosql/
│ │ ├── RedisClient.h
│ │ ├── RedisException.h
│ │ ├── RedisResult.h
│ │ └── RedisSubscriber.h
│ ├── src/
│ │ ├── RedisClientImpl.cc
│ │ ├── RedisClientImpl.h
│ │ ├── RedisClientLockFree.cc
│ │ ├── RedisClientLockFree.h
│ │ ├── RedisClientManager.cc
│ │ ├── RedisConnection.cc
│ │ ├── RedisConnection.h
│ │ ├── RedisResult.cc
│ │ ├── RedisSubscriberImpl.cc
│ │ ├── RedisSubscriberImpl.h
│ │ ├── RedisTransactionImpl.cc
│ │ ├── RedisTransactionImpl.h
│ │ ├── SubscribeContext.cc
│ │ └── SubscribeContext.h
│ └── tests/
│ ├── CMakeLists.txt
│ ├── redis_subscriber_test.cc
│ └── redis_test.cc
├── orm_lib/
│ ├── COPYING
│ ├── inc/
│ │ └── drogon/
│ │ └── orm/
│ │ ├── ArrayParser.h
│ │ ├── BaseBuilder.h
│ │ ├── CoroMapper.h
│ │ ├── Criteria.h
│ │ ├── DbClient.h
│ │ ├── DbConfig.h
│ │ ├── DbListener.h
│ │ ├── DbTypes.h
│ │ ├── Exception.h
│ │ ├── Field.h
│ │ ├── FilterBuilder.h
│ │ ├── FunctionTraits.h
│ │ ├── Mapper.h
│ │ ├── QueryBuilder.h
│ │ ├── RestfulController.h
│ │ ├── Result.h
│ │ ├── ResultIterator.h
│ │ ├── Row.h
│ │ ├── RowIterator.h
│ │ ├── SqlBinder.h
│ │ └── TransformBuilder.h
│ ├── src/
│ │ ├── ArrayParser.cc
│ │ ├── Criteria.cc
│ │ ├── DbClient.cc
│ │ ├── DbClientImpl.cc
│ │ ├── DbClientImpl.h
│ │ ├── DbClientLockFree.cc
│ │ ├── DbClientLockFree.h
│ │ ├── DbClientManager.cc
│ │ ├── DbConnection.cc
│ │ ├── DbConnection.h
│ │ ├── DbListener.cc
│ │ ├── Exception.cc
│ │ ├── Field.cc
│ │ ├── RestfulController.cc
│ │ ├── Result.cc
│ │ ├── ResultImpl.h
│ │ ├── Row.cc
│ │ ├── SqlBinder.cc
│ │ ├── TransactionImpl.cc
│ │ ├── TransactionImpl.h
│ │ ├── mysql_impl/
│ │ │ ├── MysqlConnection.cc
│ │ │ ├── MysqlConnection.h
│ │ │ ├── MysqlResultImpl.cc
│ │ │ ├── MysqlResultImpl.h
│ │ │ └── test/
│ │ │ ├── CMakeLists.txt
│ │ │ └── test1.cc
│ │ ├── postgresql_impl/
│ │ │ ├── PgBatchConnection.cc
│ │ │ ├── PgConnection.cc
│ │ │ ├── PgConnection.h
│ │ │ ├── PgListener.cc
│ │ │ ├── PgListener.h
│ │ │ ├── PostgreSQLResultImpl.cc
│ │ │ ├── PostgreSQLResultImpl.h
│ │ │ └── test/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── test1.cc
│ │ │ └── test2.cc
│ │ └── sqlite3_impl/
│ │ ├── Sqlite3Connection.cc
│ │ ├── Sqlite3Connection.h
│ │ ├── Sqlite3ResultImpl.cc
│ │ ├── Sqlite3ResultImpl.h
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ ├── Groups.cc
│ │ ├── Groups.h
│ │ └── test1.cc
│ └── tests/
│ ├── CMakeLists.txt
│ ├── conn_options_test.cc
│ ├── db_api_test.cc
│ ├── db_listener_test.cc
│ ├── db_test.cc
│ ├── mysql/
│ │ ├── Blog.cc
│ │ ├── Blog.h
│ │ ├── BlogTag.cc
│ │ ├── BlogTag.h
│ │ ├── Category.cc
│ │ ├── Category.h
│ │ ├── Tag.cc
│ │ ├── Tag.h
│ │ ├── Users.cc
│ │ ├── Users.h
│ │ ├── Wallets.cc
│ │ ├── Wallets.h
│ │ └── model.json
│ ├── pipeline_test.cpp
│ ├── postgresql/
│ │ ├── Blog.cc
│ │ ├── Blog.h
│ │ ├── BlogTag.cc
│ │ ├── BlogTag.h
│ │ ├── Category.cc
│ │ ├── Category.h
│ │ ├── Tag.cc
│ │ ├── Tag.h
│ │ ├── Users.cc
│ │ ├── Users.h
│ │ ├── Wallets.cc
│ │ ├── Wallets.h
│ │ └── model.json
│ └── sqlite3/
│ ├── Blog.cc
│ ├── Blog.h
│ ├── BlogTag.cc
│ ├── BlogTag.h
│ ├── Category.cc
│ ├── Category.h
│ ├── Tag.cc
│ ├── Tag.h
│ ├── Users.cc
│ ├── Users.h
│ ├── Wallets.cc
│ ├── Wallets.h
│ └── model.json
├── package.xml
├── test.sh
└── third_party/
└── mman-win32/
├── README.md
├── UpgradeLog.htm
├── mman.c
├── mman.h
└── test.c
================================================
FILE CONTENTS
================================================
================================================
FILE: .Doxyfile
================================================
# Doxyfile 1.8.16
# This file describes the settings to be used by the documentation system
# doxygen (www.doxygen.org) for a project.
#
# All text after a double hash (##) is considered a comment and is placed in
# front of the TAG it is preceding.
#
# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
# TAG = value [value, ...]
# For lists, items can also be appended using:
# TAG += value [value, ...]
# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
# This tag specifies the encoding used for all characters in the configuration
# file that follow. The default is UTF-8 which is also the encoding used for all
# text before the first occurrence of this tag. Doxygen uses libiconv (or the
# iconv built into libc) for the transcoding. See
# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME = "Drogon"
# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
# could be handy for archiving the generated documentation or if some version
# control system is used.
PROJECT_NUMBER =
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF =
# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO =
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
# entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used.
OUTPUT_DIRECTORY =
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
# directories (in 2 levels) under the output directory of each output format and
# will distribute the generated files over these directories. Enabling this
# option can be useful when feeding doxygen a huge amount of source files, where
# putting all generated files in the same directory would otherwise causes
# performance problems for the file system.
# The default value is: NO.
CREATE_SUBDIRS = NO
# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
# characters to appear in the names of generated files. If set to NO, non-ASCII
# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
# U+3044.
# The default value is: NO.
ALLOW_UNICODE_NAMES = NO
# The OUTPUT_LANGUAGE tag is used to specify the language in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all constant output in the proper language.
# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
# Ukrainian and Vietnamese.
# The default value is: English.
OUTPUT_LANGUAGE = English
# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
# documentation generated by doxygen is written. Doxygen will use this
# information to generate all generated output in the proper direction.
# Possible values are: None, LTR, RTL and Context.
# The default value is: None.
OUTPUT_TEXT_DIRECTION = None
# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
# descriptions after the members that are listed in the file and class
# documentation (similar to Javadoc). Set to NO to disable this.
# The default value is: YES.
BRIEF_MEMBER_DESC = YES
# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
# description of a member or function before the detailed description
#
# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
# The default value is: YES.
REPEAT_BRIEF = YES
# This tag implements a quasi-intelligent brief description abbreviator that is
# used to form the text in various listings. Each string in this list, if found
# as the leading text of the brief description, will be stripped from the text
# and the result, after processing the whole list, is used as the annotated
# text. Otherwise, the brief description is used as-is. If left blank, the
# following values are used ($name is automatically replaced with the name of
# the entity):The $name class, The $name widget, The $name file, is, provides,
# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
"The $name file" \
is \
provides \
specifies \
contains \
represents \
a \
an \
the
# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
# doxygen will generate a detailed section even if there is only a brief
# description.
# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
# inherited members of a class in the documentation of that class as if those
# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
# The default value is: NO.
INLINE_INHERITED_MEMB = NO
# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
# before files name in the file list and in the header files. If set to NO the
# shortest path that makes the file name unique will be used
# The default value is: YES.
FULL_PATH_NAMES = YES
# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
# Stripping is only done if one of the specified strings matches the left-hand
# part of the path. The tag can be used to show relative paths in the file list.
# If left blank the directory from which doxygen is run is used as the path to
# strip.
#
# Note that you can specify absolute paths here, but also relative paths, which
# will be relative from the directory where doxygen is started.
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
STRIP_FROM_PATH =
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
# path mentioned in the documentation of a class, which tells the reader which
# header file to include in order to use a class. If left blank only the name of
# the header file containing the class definition is used. Otherwise one should
# specify the list of include paths that are normally passed to the compiler
# using the -I flag.
STRIP_FROM_INC_PATH =
# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
# less readable) file names. This can be useful is your file systems doesn't
# support long names like on DOS, Mac, or CD-ROM.
# The default value is: NO.
SHORT_NAMES = NO
# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
# first line (until the first dot) of a Javadoc-style comment as the brief
# description. If set to NO, the Javadoc-style will behave just like regular Qt-
# style comments (thus requiring an explicit @brief command for a brief
# description.)
# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
# such as
# /***************
# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
# Javadoc-style will behave just like regular comments and it will not be
# interpreted by doxygen.
# The default value is: NO.
JAVADOC_BANNER = NO
# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
# line (until the first dot) of a Qt-style comment as the brief description. If
# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
# requiring an explicit \brief command for a brief description.)
# The default value is: NO.
QT_AUTOBRIEF = NO
# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
# a brief description. This used to be the default behavior. The new default is
# to treat a multi-line C++ comment block as a detailed description. Set this
# tag to YES if you prefer the old behavior instead.
#
# Note that setting this tag to YES also means that rational rose comments are
# not recognized any more.
# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
# documentation from any documented member that it re-implements.
# The default value is: YES.
INHERIT_DOCS = YES
# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
# page for each member. If set to NO, the documentation of a member will be part
# of the file/class/namespace that contains it.
# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
# uses this value to replace tabs by spaces in code fragments.
# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 4
# This tag can be used to specify a number of aliases that act as commands in
# the documentation. An alias has the form:
# name=value
# For example adding
# "sideeffect=@par Side Effects:\n"
# will allow you to put the command \sideeffect (or @sideeffect) in the
# documentation, which will result in a user-defined paragraph with heading
# "Side Effects:". You can put \n's in the value part of an alias to insert
# newlines (in the resulting output). You can put ^^ in the value part of an
# alias to insert a newline as if a physical newline was in the original file.
# When you need a literal { or } or , in the value part of an alias you have to
# escape them by means of a backslash (\), this can lead to conflicts with the
# commands \{ and \} for these it is advised to use the version @{ and @} or use
# a double escape (\\{ and \\})
ALIASES =
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding "class=itcl::class"
# will allow you to use the command class in the itcl::class meaning.
TCL_SUBST =
# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
# only. Doxygen will then generate output that is more tailored for C. For
# instance, some of the names that are used will be different. The list of all
# members will be omitted, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = NO
# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
# Python sources only. Doxygen will then generate output that is more tailored
# for that language. For instance, namespaces will be presented as packages,
# qualified scopes will look different, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
# sources. Doxygen will then generate output that is tailored for Fortran.
# The default value is: NO.
OPTIMIZE_FOR_FORTRAN = NO
# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
# sources. Doxygen will then generate output that is tailored for VHDL.
# The default value is: NO.
OPTIMIZE_OUTPUT_VHDL = NO
# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
# sources only. Doxygen will then generate output that is more tailored for that
# language. For instance, namespaces will be presented as modules, types will be
# separated into more groups, etc.
# The default value is: NO.
OPTIMIZE_OUTPUT_SLICE = NO
# Doxygen selects the parser to use depending on the extension of the files it
# parses. With this tag you can assign which parser to use for a given
# extension. Doxygen has a built-in mapping, but you can override or extend it
# using this tag. The format is ext=language, where ext is a file extension, and
# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice,
# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
# tries to guess whether the code is fixed or free formatted code, this is the
# default for Fortran type files), VHDL, tcl. For instance to make doxygen treat
# .inc files as Fortran files (default is PHP), and .f files as C (default is
# Fortran), use: inc=Fortran f=C.
#
# Note: For files without extension you can use no_extension as a placeholder.
#
# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
# the files are not read by doxygen.
EXTENSION_MAPPING =
# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
# according to the Markdown format, which allows for more readable
# documentation. See https://daringfireball.net/projects/markdown/ for details.
# The output of markdown processing is further processed by doxygen, so you can
# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
# case of backward compatibilities issues.
# The default value is: YES.
MARKDOWN_SUPPORT = YES
# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
# to that level are automatically included in the table of contents, even if
# they do not have an id attribute.
# Note: This feature currently applies only to Markdown headings.
# Minimum value: 0, maximum value: 99, default value: 5.
# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
TOC_INCLUDE_HEADINGS = 5
# When enabled doxygen tries to link words that correspond to documented
# classes, or namespaces to their corresponding documentation. Such a link can
# be prevented in individual cases by putting a % sign in front of the word or
# globally by setting AUTOLINK_SUPPORT to NO.
# The default value is: YES.
AUTOLINK_SUPPORT = YES
# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
# to include (a tag file for) the STL sources as input, then you should set this
# tag to YES in order to let doxygen match functions declarations and
# definitions whose arguments contain STL classes (e.g. func(std::string);
# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
# The default value is: NO.
BUILTIN_STL_SUPPORT = NO
# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
# The default value is: NO.
CPP_CLI_SUPPORT = NO
# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
# will parse them like normal C++ but will assume all classes use public instead
# of private inheritance when no explicit protection keyword is present.
# The default value is: NO.
SIP_SUPPORT = NO
# For Microsoft's IDL there are propget and propput attributes to indicate
# getter and setter methods for a property. Setting this option to YES will make
# doxygen to replace the get and set methods by a property in the documentation.
# This will only work if the methods are indeed getting or setting a simple
# type. If this is not the case, or you want to show the methods anyway, you
# should set this option to NO.
# The default value is: YES.
IDL_PROPERTY_SUPPORT = YES
# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
# tag is set to YES then doxygen will reuse the documentation of the first
# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
# If one adds a struct or class to a group and this option is enabled, then also
# any nested class or struct is added to the same group. By default this option
# is disabled and one has to add nested compounds explicitly via \ingroup.
# The default value is: NO.
GROUP_NESTED_COMPOUNDS = NO
# Set the SUBGROUPING tag to YES to allow class member groups of the same type
# (for instance a group of public functions) to be put as a subgroup of that
# type (e.g. under the Public Functions section). Set it to NO to prevent
# subgrouping. Alternatively, this can be done per class using the
# \nosubgrouping command.
# The default value is: YES.
SUBGROUPING = YES
# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
# are shown inside the group in which they are included (e.g. using \ingroup)
# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
# and RTF).
#
# Note that this feature does not work in combination with
# SEPARATE_MEMBER_PAGES.
# The default value is: NO.
INLINE_GROUPED_CLASSES = NO
# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
# with only public data fields or simple typedef fields will be shown inline in
# the documentation of the scope in which they are defined (i.e. file,
# namespace, or group documentation), provided this scope is documented. If set
# to NO, structs, classes, and unions are shown on a separate page (for HTML and
# Man pages) or section (for LaTeX and RTF).
# The default value is: NO.
INLINE_SIMPLE_STRUCTS = NO
# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
# enum is documented as struct, union, or enum with the name of the typedef. So
# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
# with name TypeT. When disabled the typedef will appear as a member of a file,
# namespace, or class. And the struct will be named TypeS. This can typically be
# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
# The default value is: NO.
TYPEDEF_HIDES_STRUCT = NO
# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
# cache is used to resolve symbols given their name and scope. Since this can be
# an expensive process and often the same symbol appears multiple times in the
# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
# doxygen will become slower. If the cache is too large, memory is wasted. The
# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
# symbols. At the end of a run doxygen will report the cache usage and suggest
# the optimal cache size from a speed point of view.
# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
# documentation are documented, even if no documentation was available. Private
# class members and static file members will be hidden unless the
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
# Note: This will also disable the warnings about undocumented members that are
# normally produced when WARNINGS is set to YES.
# The default value is: NO.
EXTRACT_ALL = NO
# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
# be included in the documentation.
# The default value is: NO.
EXTRACT_PRIVATE = NO
# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
# methods of a class will be included in the documentation.
# The default value is: NO.
EXTRACT_PRIV_VIRTUAL = NO
# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
# scope will be included in the documentation.
# The default value is: NO.
EXTRACT_PACKAGE = NO
# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
# included in the documentation.
# The default value is: NO.
EXTRACT_STATIC = NO
# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
# locally in source files will be included in the documentation. If set to NO,
# only classes defined in header files are included. Does not have any effect
# for Java sources.
# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
# This flag is only useful for Objective-C code. If set to YES, local methods,
# which are defined in the implementation section but not in the interface are
# included in the documentation. If set to NO, only methods in the interface are
# included.
# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
# If this flag is set to YES, the members of anonymous namespaces will be
# extracted and appear in the documentation as a namespace called
# 'anonymous_namespace{file}', where file will be replaced with the base name of
# the file that contains the anonymous namespace. By default anonymous namespace
# are hidden.
# The default value is: NO.
EXTRACT_ANON_NSPACES = NO
# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
# undocumented members inside documented classes or files. If set to NO these
# members will be included in the various overviews, but no documentation
# section is generated. This option has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
# undocumented classes that are normally visible in the class hierarchy. If set
# to NO, these classes will be included in the various overviews. This option
# has no effect if EXTRACT_ALL is enabled.
# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
# (class|struct|union) declarations. If set to NO, these declarations will be
# included in the documentation.
# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
# documentation blocks found inside the body of a function. If set to NO, these
# blocks will be appended to the function's detailed documentation block.
# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
# The INTERNAL_DOCS tag determines if documentation that is typed after a
# \internal command is included. If the tag is set to NO then the documentation
# will be excluded. Set it to YES to include the internal documentation.
# The default value is: NO.
INTERNAL_DOCS = NO
# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
# names in lower-case letters. If set to YES, upper-case letters are also
# allowed. This is useful if you have classes or files whose names only differ
# in case and if your file system supports case sensitive file names. Windows
# (including Cygwin) ands Mac users are advised to set this option to NO.
# The default value is: system dependent.
CASE_SENSE_NAMES = NO
# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
# their full class and namespace scopes in the documentation. If set to YES, the
# scope will be hidden.
# The default value is: NO.
HIDE_SCOPE_NAMES = NO
# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
# append additional text to a page's title, such as Class Reference. If set to
# YES the compound reference will be hidden.
# The default value is: NO.
HIDE_COMPOUND_REFERENCE= NO
# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
# the files that are included by a file in the documentation of that file.
# The default value is: YES.
SHOW_INCLUDE_FILES = YES
# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
# grouped member an include statement to the documentation, telling the reader
# which file to include in order to use the member.
# The default value is: NO.
SHOW_GROUPED_MEMB_INC = NO
# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
# files with double quotes in the documentation rather than with sharp brackets.
# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
# documentation for inline members.
# The default value is: YES.
INLINE_INFO = YES
# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
# (detailed) documentation of file and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order.
# The default value is: YES.
SORT_MEMBER_DOCS = YES
# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
# descriptions of file, namespace and class members alphabetically by member
# name. If set to NO, the members will appear in declaration order. Note that
# this will also influence the order of the classes in the class list.
# The default value is: NO.
SORT_BRIEF_DOCS = NO
# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
# (brief and detailed) documentation of class members so that constructors and
# destructors are listed first. If set to NO the constructors will appear in the
# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
# member documentation.
# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
# detailed member documentation.
# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO
# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
# of group names into alphabetical order. If set to NO the group names will
# appear in their defined order.
# The default value is: NO.
SORT_GROUP_NAMES = NO
# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
# fully-qualified names, including namespaces. If set to NO, the class list will
# be sorted only by class name, not including the namespace part.
# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
# Note: This option applies only to the class list, not to the alphabetical
# list.
# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
# type resolution of all parameters of a function it will reject a match between
# the prototype and the implementation of a member function even if there is
# only one candidate or it is obvious which candidate to choose by doing a
# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
# accept a match between prototype and implementation in such cases.
# The default value is: NO.
STRICT_PROTO_MATCHING = NO
# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
# list. This list is created by putting \todo commands in the documentation.
# The default value is: YES.
GENERATE_TODOLIST = YES
# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
# list. This list is created by putting \test commands in the documentation.
# The default value is: YES.
GENERATE_TESTLIST = YES
# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
# list. This list is created by putting \bug commands in the documentation.
# The default value is: YES.
GENERATE_BUGLIST = YES
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
# the deprecated list. This list is created by putting \deprecated commands in
# the documentation.
# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
# The ENABLED_SECTIONS tag can be used to enable conditional documentation
# sections, marked by \if <section_label> ... \endif and \cond <section_label>
# ... \endcond blocks.
ENABLED_SECTIONS =
# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
# initial value of a variable or macro / define can have for it to appear in the
# documentation. If the initializer consists of more lines than specified here
# it will be hidden. Use a value of 0 to hide initializers completely. The
# appearance of the value of individual variables and macros / defines can be
# controlled using \showinitializer or \hideinitializer command in the
# documentation regardless of this setting.
# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
# The default value is: YES.
SHOW_USED_FILES = YES
# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
# will remove the Files entry from the Quick Index and from the Folder Tree View
# (if specified).
# The default value is: YES.
SHOW_FILES = YES
# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
# page. This will remove the Namespaces entry from the Quick Index and from the
# Folder Tree View (if specified).
# The default value is: YES.
SHOW_NAMESPACES = YES
# The FILE_VERSION_FILTER tag can be used to specify a program or script that
# doxygen should invoke to get the current version for each file (typically from
# the version control system). Doxygen will invoke the program by executing (via
# popen()) the command command input-file, where command is the value of the
# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
# by doxygen. Whatever the program writes to standard output is used as the file
# version. For an example see the documentation.
FILE_VERSION_FILTER =
# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
# by doxygen. The layout file controls the global structure of the generated
# output files in an output format independent way. To create the layout file
# that represents doxygen's defaults, run doxygen with the -l option. You can
# optionally specify a file name after the option, if omitted DoxygenLayout.xml
# will be used as the name of the layout file.
#
# Note that if you run doxygen from a directory containing a file called
# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
# tag is left empty.
LAYOUT_FILE =
# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
# the reference definitions. This must be a list of .bib files. The .bib
# extension is automatically appended if omitted. This requires the bibtex tool
# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
# For LaTeX the style of the bibliography can be controlled using
# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
# search path. See also \cite for info how to create references.
CITE_BIB_FILES =
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
# The QUIET tag can be used to turn on/off the messages that are generated to
# standard output by doxygen. If QUIET is set to YES this implies that the
# messages are off.
# The default value is: NO.
QUIET = NO
# The WARNINGS tag can be used to turn on/off the warning messages that are
# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
# this implies that the warnings are on.
#
# Tip: Turn warnings on while writing the documentation.
# The default value is: YES.
WARNINGS = YES
# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
# will automatically be disabled.
# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
# potential errors in the documentation, such as not documenting some parameters
# in a documented function, or documenting parameters that don't exist or using
# markup commands wrongly.
# The default value is: YES.
WARN_IF_DOC_ERROR = YES
# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
# are documented, but have no documentation for their parameters or return
# value. If set to NO, doxygen will only warn about wrong or incomplete
# parameter documentation, but not about the absence of documentation. If
# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
# The default value is: NO.
WARN_NO_PARAMDOC = NO
# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
# a warning is encountered.
# The default value is: NO.
WARN_AS_ERROR = NO
# The WARN_FORMAT tag determines the format of the warning messages that doxygen
# can produce. The string should contain the $file, $line, and $text tags, which
# will be replaced by the file and line number from which the warning originated
# and the warning text. Optionally the format may contain $version, which will
# be replaced by the version of the file (if it could be obtained via
# FILE_VERSION_FILTER)
# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
# The WARN_LOGFILE tag can be used to specify a file to which warning and error
# messages should be written. If left blank the output is written to standard
# error (stderr).
WARN_LOGFILE =
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
# The INPUT tag is used to specify the files and/or directories that contain
# documented source files. You may enter file names like myfile.cpp or
# directories like /usr/src/myproject. Separate the files or directories with
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
# Note: If this tag is empty the current directory is searched.
INPUT = lib/inc \
orm_lib/inc
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
# possible encodings.
# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
FILE_PATTERNS = *.c \
*.cc \
*.cxx \
*.cpp \
*.c++ \
*.java \
*.ii \
*.ixx \
*.ipp \
*.i++ \
*.inl \
*.idl \
*.ddl \
*.odl \
*.h \
*.hh \
*.hxx \
*.hpp \
*.h++ \
*.cs \
*.d \
*.php \
*.php4 \
*.php5 \
*.phtml \
*.inc \
*.m \
*.markdown \
*.md \
*.mm \
*.dox \
*.py \
*.pyw \
*.f90 \
*.f95 \
*.f03 \
*.f08 \
*.f \
*.for \
*.tcl \
*.vhd \
*.vhdl \
*.ucf \
*.qsf \
*.ice
# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
# subdirectory from a directory tree whose root is specified with the INPUT tag.
#
# Note that relative paths are relative to the directory from which doxygen is
# run.
EXCLUDE =
# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
# The default value is: NO.
EXCLUDE_SYMLINKS = NO
# If the value of the INPUT tag contains directories, you can use the
# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
# certain files from those directories.
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories for example use the pattern */test/*
EXCLUDE_PATTERNS =
# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
# (namespaces, classes, functions, etc.) that should be excluded from the
# output. The symbol name can be a fully qualified name, a word, or if the
# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
#
# Note that the wildcards are matched against the file with absolute path, so to
# exclude all test directories use the pattern */test/*
EXCLUDE_SYMBOLS =
# The EXAMPLE_PATH tag can be used to specify one or more files or directories
# that contain example code fragments that are included (see the \include
# command).
EXAMPLE_PATH =
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
# *.h) to filter out the source-files in the directories. If left blank all
# files are included.
EXAMPLE_PATTERNS = *
# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
# searched for input files to be used with the \include or \dontinclude commands
# irrespective of the value of the RECURSIVE tag.
# The default value is: NO.
EXAMPLE_RECURSIVE = NO
# The IMAGE_PATH tag can be used to specify one or more files or directories
# that contain images that are to be included in the documentation (see the
# \image command).
IMAGE_PATH =
# The INPUT_FILTER tag can be used to specify a program that doxygen should
# invoke to filter for each input file. Doxygen will invoke the filter program
# by executing (via popen()) the command:
#
# <filter> <input-file>
#
# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
# name of an input file. Doxygen will then use the output that the filter
# program writes to standard output. If FILTER_PATTERNS is specified, this tag
# will be ignored.
#
# Note that the filter must not add or remove lines; it is applied before the
# code is scanned, but not when the output code is generated. If lines are added
# or removed, the anchors will not be placed correctly.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
INPUT_FILTER =
# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
# basis. Doxygen will compare the file name with each pattern and apply the
# filter if there is a match. The filters are a list of the form: pattern=filter
# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
# patterns match the file name, INPUT_FILTER is applied.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# properly processed by doxygen.
FILTER_PATTERNS =
# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
# INPUT_FILTER) will also be used to filter the input files that are used for
# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
# The default value is: NO.
FILTER_SOURCE_FILES = NO
# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
# it is also possible to disable source filtering for a specific pattern using
# *.ext= (so without naming a filter).
# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
FILTER_SOURCE_PATTERNS =
# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
# is part of the input, its contents will be placed on the main page
# (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
# generated. Documented entities will be cross-referenced with these sources.
#
# Note: To get rid of all source code in the generated output, make sure that
# also VERBATIM_HEADERS is set to NO.
# The default value is: NO.
SOURCE_BROWSER = NO
# Setting the INLINE_SOURCES tag to YES will include the body of functions,
# classes and enums directly into the documentation.
# The default value is: NO.
INLINE_SOURCES = NO
# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
# special comment blocks from generated source code fragments. Normal C, C++ and
# Fortran comments will always remain visible.
# The default value is: YES.
STRIP_CODE_COMMENTS = YES
# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
# entity all documented functions referencing it will be listed.
# The default value is: NO.
REFERENCED_BY_RELATION = NO
# If the REFERENCES_RELATION tag is set to YES then for each documented function
# all documented entities called/used by that function will be listed.
# The default value is: NO.
REFERENCES_RELATION = NO
# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
# to YES then the hyperlinks from functions in REFERENCES_RELATION and
# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
# link to the documentation.
# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
# source code will show a tooltip with additional information such as prototype,
# brief description and links to the definition and documentation. Since this
# will make the HTML file larger and loading of large files a bit slower, you
# can opt to disable this feature.
# The default value is: YES.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
SOURCE_TOOLTIPS = YES
# If the USE_HTAGS tag is set to YES then the references to source code will
# point to the HTML generated by the htags(1) tool instead of doxygen built-in
# source browser. The htags tool is part of GNU's global source tagging system
# (see https://www.gnu.org/software/global/global.html). You will need version
# 4.8.6 or higher.
#
# To use it do the following:
# - Install the latest version of global
# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
# - Make sure the INPUT points to the root of the source tree
# - Run doxygen as normal
#
# Doxygen will invoke htags (and that will in turn invoke gtags), so these
# tools must be available from the command line (i.e. in the search path).
#
# The result: instead of the source browser generated by doxygen, the links to
# source code will now point to the output of htags.
# The default value is: NO.
# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
# verbatim copy of the header file for each class for which an include is
# specified. Set to NO to disable this.
# See also: Section \class.
# The default value is: YES.
VERBATIM_HEADERS = YES
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
# compounds will be generated. Enable this if the project contains a lot of
# classes, structs, unions or interfaces.
# The default value is: YES.
ALPHABETICAL_INDEX = YES
# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
# which the alphabetical index list will be split.
# Minimum value: 1, maximum value: 20, default value: 5.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
# In case all classes in a project start with a common prefix, all classes will
# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
# can be used to specify a prefix (or a list of prefixes) that should be ignored
# while generating the index headers.
# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
IGNORE_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
# The default value is: YES.
GENERATE_HTML = YES
# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
# generated HTML page (for example: .htm, .php, .asp).
# The default value is: .html.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
# each generated HTML page. If the tag is left blank doxygen will generate a
# standard header.
#
# To get valid HTML the header file that includes any scripts and style sheets
# that doxygen needs, which is dependent on the configuration options used (e.g.
# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
# default header using
# doxygen -w html new_header.html new_footer.html new_stylesheet.css
# YourConfigFile
# and then modify the file new_header.html. See also section "Doxygen usage"
# for information on how to generate the default header that doxygen normally
# uses.
# Note: The header is subject to change so you typically have to regenerate the
# default header when upgrading to a newer version of doxygen. For a description
# of the possible markers and block names see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_HEADER =
# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
# generated HTML page. If the tag is left blank doxygen will generate a standard
# footer. See HTML_HEADER for more information on how to generate a default
# footer and what special commands can be used inside the footer. See also
# section "Doxygen usage" for information on how to generate the default footer
# that doxygen normally uses.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FOOTER =
# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
# sheet that is used by each HTML page. It can be used to fine-tune the look of
# the HTML output. If left blank doxygen will generate a default style sheet.
# See also section "Doxygen usage" for information on how to generate the style
# sheet that doxygen normally uses.
# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
# it is more robust and this tag (HTML_STYLESHEET) will in the future become
# obsolete.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_STYLESHEET =
# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# cascading style sheets that are included after the standard style sheets
# created by doxygen. Using this option one can overrule certain style aspects.
# This is preferred over using HTML_STYLESHEET since it does not replace the
# standard style sheet and is therefore more robust against future updates.
# Doxygen will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list). For an example see the documentation.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_STYLESHEET =
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the HTML output directory. Note
# that these files will be copied to the base HTML output directory. Use the
# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
# files will be copied as-is; there are no commands or markers available.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_EXTRA_FILES =
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
# will adjust the colors in the style sheet and background images according to
# this color. Hue is specified as an angle on a colorwheel, see
# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
# purple, and 360 is red again.
# Minimum value: 0, maximum value: 359, default value: 220.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_HUE = 220
# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
# in the HTML output. For a value of 0 the output will use grayscales only. A
# value of 255 will produce the most vivid colors.
# Minimum value: 0, maximum value: 255, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_SAT = 100
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
# luminance component of the colors in the HTML output. Values below 100
# gradually make the output lighter, whereas values above 100 make the output
# darker. The value divided by 100 is the actual gamma applied, so 80 represents
# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
# change the gamma.
# Minimum value: 40, maximum value: 240, default value: 80.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_GAMMA = 80
# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
# page will contain the date and time when the page was generated. Setting this
# to YES can help to show when doxygen was last run and thus if the
# documentation is up to date.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = NO
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via Javascript. If disabled, the navigation index will
# consists of multiple levels of tabs that are statically embedded in every HTML
# page. Disable this option to support browsers that do not have Javascript,
# like the Qt help browser.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_MENUS = YES
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
# documentation will contain sections that can be hidden and shown after the
# page has loaded.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO
# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
# shown in the various tree structured indices initially; the user can expand
# and collapse entries dynamically later on. Doxygen will expand the tree to
# such a level that at most the specified number of entries are visible (unless
# a fully collapsed tree already exceeds this amount). So setting the number of
# entries 1 will produce a full collapsed tree by default. 0 is a special value
# representing an infinite number of entries and will result in a full expanded
# tree by default.
# Minimum value: 0, maximum value: 9999, default value: 100.
# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_INDEX_NUM_ENTRIES = 100
# If the GENERATE_DOCSET tag is set to YES, additional index files will be
# generated that can be used as input for Apple's Xcode 3 integrated development
# environment (see: https://developer.apple.com/xcode/), introduced with OSX
# 10.5 (Leopard). To create a documentation set, doxygen will generate a
# Makefile in the HTML output directory. Running make will produce the docset in
# that directory and running make install will install the docset in
# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
# genXcode/_index.html for more information.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO
# This tag determines the name of the docset feed. A documentation feed provides
# an umbrella under which multiple documentation sets from a single provider
# (such as a company or product suite) can be grouped.
# The default value is: Doxygen generated docs.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDNAME = "Doxygen generated docs"
# This tag specifies a string that should uniquely identify the documentation
# set bundle. This should be a reverse domain-name style string, e.g.
# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_BUNDLE_ID = org.doxygen.Project
# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
# The default value is: org.doxygen.Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
# The default value is: Publisher.
# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
# Windows.
#
# The HTML Help Workshop contains a compiler that can convert all HTML output
# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
# files are now used as the Windows 98 help format, and will replace the old
# Windows help format (.hlp) on all Windows platforms in the future. Compressed
# HTML files also contain an index, a table of contents, and you can search for
# words in the documentation. The HTML workshop also contains a viewer for
# compressed HTML files.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_HTMLHELP = NO
# The CHM_FILE tag can be used to specify the file name of the resulting .chm
# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_FILE =
# The HHC_LOCATION tag can be used to specify the location (absolute path
# including file name) of the HTML help compiler (hhc.exe). If non-empty,
# doxygen will try to run the HTML help compiler on the generated index.hhp.
# The file has to be specified with full path.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
HHC_LOCATION =
# The GENERATE_CHI flag controls if a separate .chi index file is generated
# (YES) or that it should be included in the master .chm file (NO).
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
# and project file content.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
CHM_INDEX_ENCODING =
# The BINARY_TOC flag controls whether a binary table of contents is generated
# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
# enables the Previous and Next buttons.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
BINARY_TOC = NO
# The TOC_EXPAND flag can be set to YES to add extra items for group members to
# the table of contents of the HTML help documentation and to the tree view.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
TOC_EXPAND = NO
# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
# (.qch) of the generated HTML documentation.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_QHP = NO
# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
# the file name of the resulting .qch file. The path specified is relative to
# the HTML output folder.
# This tag requires that the tag GENERATE_QHP is set to YES.
QCH_FILE =
# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
# Project output. For more information please see Qt Help Project / Namespace
# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_NAMESPACE = org.doxygen.Project
# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
# Help Project output. For more information please see Qt Help Project / Virtual
# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
# folders).
# The default value is: doc.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_VIRTUAL_FOLDER = doc
# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
# filter to add. For more information please see Qt Help Project / Custom
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_NAME =
# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
# custom filter to add. For more information please see Qt Help Project / Custom
# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
# filters).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_CUST_FILTER_ATTRS =
# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
# project's filter section matches. Qt Help Project / Filter Attributes (see:
# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_SECT_FILTER_ATTRS =
# The QHG_LOCATION tag can be used to specify the location of Qt's
# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
# generated .qhp file.
# This tag requires that the tag GENERATE_QHP is set to YES.
QHG_LOCATION =
# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
# generated, together with the HTML files, they form an Eclipse help plugin. To
# install this plugin and make it available under the help contents menu in
# Eclipse, the contents of the directory containing the HTML and XML files needs
# to be copied into the plugins directory of eclipse. The name of the directory
# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
# After copying Eclipse needs to be restarted before the help appears.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_ECLIPSEHELP = NO
# A unique identifier for the Eclipse help plugin. When installing the plugin
# the directory name containing the HTML and XML files should also have this
# name. Each documentation set should have its own identifier.
# The default value is: org.doxygen.Project.
# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
ECLIPSE_DOC_ID = org.doxygen.Project
# If you want full control over the layout of the generated HTML pages it might
# be necessary to disable the index and replace it with your own. The
# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
# of each HTML page. A value of NO enables the index and the value YES disables
# it. Since the tabs in the index contain the same information as the navigation
# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = NO
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information. If the tag
# value is set to YES, a side panel will be generated containing a tree-like
# index structure (just like the one that is generated for HTML Help). For this
# to work a browser that supports JavaScript, DHTML, CSS and frames is required
# (i.e. any modern browser). Windows users are probably better off using the
# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
# further fine-tune the look of the index. As an example, the default style
# sheet generated by doxygen has an example that shows how to put an image at
# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
# the same information as the tab index, you could consider setting
# DISABLE_INDEX to YES when enabling this option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO
# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
# doxygen will group on one line in the generated HTML documentation.
#
# Note that a value of 0 will completely suppress the enum values from appearing
# in the overview section.
# Minimum value: 0, maximum value: 20, default value: 4.
# This tag requires that the tag GENERATE_HTML is set to YES.
ENUM_VALUES_PER_LINE = 4
# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
# to set the initial width (in pixels) of the frame in which the tree is shown.
# Minimum value: 0, maximum value: 1500, default value: 250.
# This tag requires that the tag GENERATE_HTML is set to YES.
TREEVIEW_WIDTH = 250
# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
# external symbols imported via tag files in a separate window.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
EXT_LINKS_IN_WINDOW = NO
# Use this tag to change the font size of LaTeX formulas included as images in
# the HTML documentation. When you change the font size after a successful
# doxygen run you need to manually remove any form_*.png images from the HTML
# output directory to force them to be regenerated.
# Minimum value: 8, maximum value: 50, default value: 10.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_FONTSIZE = 10
# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
# generated for formulas are transparent PNGs. Transparent PNGs are not
# supported properly for IE 6.0, but are supported on all modern browsers.
#
# Note that when changing this option you need to delete any form_*.png files in
# the HTML output directory before the changes have effect.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side Javascript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
# installed or if you want to formulas look prettier in the HTML output. When
# enabled you may also need to install MathJax separately and configure the path
# to it using the MATHJAX_RELPATH option.
# The default value is: NO.
# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = NO
# When MathJax is enabled you can set the default output format to be used for
# the MathJax output. See the MathJax site (see:
# http://docs.mathjax.org/en/latest/output.html) for more details.
# Possible values are: HTML-CSS (which is slower, but has the best
# compatibility), NativeMML (i.e. MathML) and SVG.
# The default value is: HTML-CSS.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_FORMAT = HTML-CSS
# When MathJax is enabled you need to specify the location relative to the HTML
# output directory using the MATHJAX_RELPATH option. The destination directory
# should contain the MathJax.js script. For instance, if the mathjax directory
# is located at the same level as the HTML output directory, then
# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
# Content Delivery Network so you can quickly see the result without installing
# MathJax. However, it is strongly recommended to install a local copy of
# MathJax from https://www.mathjax.org before deployment.
# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
# extension names that should be enabled during MathJax rendering. For example
# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_EXTENSIONS =
# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
# of code that will be used on startup of the MathJax code. See the MathJax site
# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
# example see the documentation.
# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_CODEFILE =
# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
# the HTML output. The underlying search engine uses javascript and DHTML and
# should work on any modern browser. Note that when using HTML help
# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
# there is already a search function so this one should typically be disabled.
# For large projects the javascript based search engine can be slow, then
# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
# search using the keyboard; to jump to the search box use <access key> + S
# (what the <access key> is depends on the OS and browser, but it is typically
# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
# key> to jump into the search results window, the results can be navigated
# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
# the search. The filter options can be selected when the cursor is inside the
# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
# to select a filter and <Enter> or <escape> to activate or cancel the filter
# option.
# The default value is: YES.
# This tag requires that the tag GENERATE_HTML is set to YES.
SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a web server instead of a web client using Javascript. There
# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
# setting. When disabled, doxygen will generate a PHP script for searching and
# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
# and searching needs to be provided by external tools. See the section
# "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
SERVER_BASED_SEARCH = NO
# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
# script for searching. Instead the search results are written to an XML file
# which needs to be processed by an external indexer. Doxygen will invoke an
# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
# search results.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: https://xapian.org/).
#
# See the section "External Indexing and Searching" for details.
# The default value is: NO.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH = NO
# The SEARCHENGINE_URL should point to a search engine hosted by a web server
# which will return the search results when EXTERNAL_SEARCH is enabled.
#
# Doxygen ships with an example indexer (doxyindexer) and search engine
# (doxysearch.cgi) which are based on the open source search engine library
# Xapian (see: https://xapian.org/). See the section "External Indexing and
# Searching" for details.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHENGINE_URL =
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
# search data is written to a file for indexing by an external tool. With the
# SEARCHDATA_FILE tag the name of this file can be specified.
# The default file is: searchdata.xml.
# This tag requires that the tag SEARCHENGINE is set to YES.
SEARCHDATA_FILE = searchdata.xml
# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
# projects and redirect the results back to the right project.
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTERNAL_SEARCH_ID =
# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
# projects other than the one defined by this configuration file, but that are
# all added to the same external search index. Each project needs to have a
# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
# to a relative location where the documentation can be found. The format is:
# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
# This tag requires that the tag SEARCHENGINE is set to YES.
EXTRA_SEARCH_MAPPINGS =
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = YES
# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: latex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
# invoked.
#
# Note that when not enabling USE_PDFLATEX the default is latex when enabling
# USE_PDFLATEX the default is pdflatex and when in the later case latex is
# chosen this is overwritten by pdflatex. For specific output languages the
# default can have been set differently, this depends on the implementation of
# the output language.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME =
# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
# index for LaTeX.
# Note: This tag is used in the Makefile / make.bat.
# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
# (.tex).
# The default file is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
# generate index for LaTeX. In case there is no backslash (\) as first character
# it will be automatically added in the LaTeX code.
# Note: This tag is used in the generated output file (.tex).
# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
# The default value is: makeindex.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_MAKEINDEX_CMD = makeindex
# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
# The PAPER_TYPE tag can be used to set the paper type that is used by the
# printer.
# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
# 14 inches) and executive (7.25 x 10.5 inches).
# The default value is: a4.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4
# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
# that should be included in the LaTeX output. The package can be specified just
# by its name or with the correct syntax as to be used with the LaTeX
# \usepackage command. To get the times font for instance you can specify :
# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
# To use the option intlimits with the amsmath package you can specify:
# EXTRA_PACKAGES=[intlimits]{amsmath}
# If left blank no extra packages will be included.
# This tag requires that the tag GENERATE_LATEX is set to YES.
EXTRA_PACKAGES =
# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
# generated LaTeX document. The header should contain everything until the first
# chapter. If it is left blank doxygen will generate a standard header. See
# section "Doxygen usage" for information on how to let doxygen write the
# default header to a separate file.
#
# Note: Only use a user-defined header if you know what you are doing! The
# following commands have a special meaning inside the header: $title,
# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
# string, for the replacement values of the other commands the user is referred
# to HTML_HEADER.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HEADER =
# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
# generated LaTeX document. The footer should contain everything after the last
# chapter. If it is left blank doxygen will generate a standard footer. See
# LATEX_HEADER for more information on how to generate a default footer and what
# special commands can be used inside the footer.
#
# Note: Only use a user-defined footer if you know what you are doing!
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_FOOTER =
# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
# LaTeX style sheets that are included after the standard style sheets created
# by doxygen. Using this option one can overrule certain style aspects. Doxygen
# will copy the style sheet files to the output directory.
# Note: The order of the extra style sheet files is of importance (e.g. the last
# style sheet in the list overrules the setting of the previous ones in the
# list).
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_STYLESHEET =
# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
# other source files which should be copied to the LATEX_OUTPUT output
# directory. Note that the files will be copied as-is; there are no commands or
# markers available.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EXTRA_FILES =
# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
# contain links (just like the HTML output) instead of page references. This
# makes the output suitable for online browsing using a PDF viewer.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = YES
# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
# The default value is: YES.
# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES
# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
# command to the generated LaTeX files. This will instruct LaTeX to keep running
# if errors occur, instead of asking the user for help. This option is also used
# when generating formulas in HTML.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
# index chapters (such as File Index, Compound Index, etc.) in the output.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
# code with syntax highlighting in the LaTeX output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
# bibliography, e.g. plainnat, or ieeetr. See
# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
# The default value is: plain.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain
# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
# page will contain the date and time when the page was generated. Setting this
# to NO can help when comparing the output of multiple runs.
# The default value is: NO.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_TIMESTAMP = NO
# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
# path from which the emoji images will be read. If a relative path is entered,
# it will be relative to the LATEX_OUTPUT directory. If left blank the
# LATEX_OUTPUT directory will be used.
# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_EMOJI_DIRECTORY =
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
# RTF output is optimized for Word 97 and may not look too pretty with other RTF
# readers/editors.
# The default value is: NO.
GENERATE_RTF = NO
# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: rtf.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
# documents. This may be useful for small projects and may help to save some
# trees in general.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
# contain hyperlink fields. The RTF file will contain links (just like the HTML
# output) instead of page references. This makes the output suitable for online
# browsing using Word or some other Word compatible readers that support those
# fields.
#
# Note: WordPad (write) and others do not support links.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
# Load stylesheet definitions from file. Syntax is similar to doxygen's
# configuration file, i.e. a series of assignments. You only have to provide
# replacements, missing definitions are set to their default value.
#
# See also section "Doxygen usage" for information on how to generate the
# default style sheet that doxygen normally uses.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_STYLESHEET_FILE =
# Set optional variables used in the generation of an RTF document. Syntax is
# similar to doxygen's configuration file. A template extensions file can be
# generated using doxygen -e rtf extensionFile.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_EXTENSIONS_FILE =
# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
# with syntax highlighting in the RTF output.
#
# Note that which sources are shown also depends on other settings such as
# SOURCE_BROWSER.
# The default value is: NO.
# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
# classes and files.
# The default value is: NO.
GENERATE_MAN = NO
# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it. A directory man3 will be created inside the directory specified by
# MAN_OUTPUT.
# The default directory is: man.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
# The MAN_EXTENSION tag determines the extension that is added to the generated
# man pages. In case the manual section does not start with a number, the number
# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
# optional.
# The default value is: .3.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
# The MAN_SUBDIR tag determines the name of the directory created within
# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
# MAN_EXTENSION with the initial . removed.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_SUBDIR =
# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
# will generate one additional man file for each entity documented in the real
# man page(s). These additional files only source the real man page, but without
# them the man command would be unable to find the correct page.
# The default value is: NO.
# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
# captures the structure of the code including all documentation.
# The default value is: NO.
GENERATE_XML = NO
# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
# it.
# The default directory is: xml.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
# listings (including syntax highlighting and cross-referencing information) to
# the XML output. Note that enabling this will significantly increase the size
# of the XML output.
# The default value is: YES.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_PROGRAMLISTING = YES
# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
# namespace members in file scope as well, matching the HTML output.
# The default value is: NO.
# This tag requires that the tag GENERATE_XML is set to YES.
XML_NS_MEMB_FILE_SCOPE = NO
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
# that can be used to generate PDF.
# The default value is: NO.
GENERATE_DOCBOOK = NO
# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
# front of it.
# The default directory is: docbook.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_OUTPUT = docbook
# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
# program listings (including syntax highlighting and cross-referencing
# information) to the DOCBOOK output. Note that enabling this will significantly
# increase the size of the DOCBOOK output.
# The default value is: NO.
# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
# the structure of the code including all documentation. Note that this feature
# is still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
# file that captures the structure of the code including all documentation.
#
# Note that this feature is still experimental and incomplete at the moment.
# The default value is: NO.
GENERATE_PERLMOD = NO
# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
# output from the Perl module output.
# The default value is: NO.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
# formatted so it can be parsed by a human reader. This is useful if you want to
# understand what is going on. On the other hand, if this tag is set to NO, the
# size of the Perl module output will be much smaller and Perl will parse it
# just the same.
# The default value is: YES.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
# The names of the make variables in the generated doxyrules.make file are
# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
# so different doxyrules.make files included by the same Makefile don't
# overwrite each other's variables.
# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
# C-preprocessor directives found in the sources and include files.
# The default value is: YES.
ENABLE_PREPROCESSING = YES
# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
# in the source code. If set to NO, only conditional compilation will be
# performed. Macro expansion can be done in a controlled way by setting
# EXPAND_ONLY_PREDEF to YES.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = NO
# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
# the macro expansion is limited to the macros specified with the PREDEFINED and
# EXPAND_AS_DEFINED tags.
# The default value is: NO.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
# If the SEARCH_INCLUDES tag is set to YES, the include files in the
# INCLUDE_PATH will be searched if a #include is found.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
# The INCLUDE_PATH tag can be used to specify one or more directories that
# contain include files that are not input files but should be processed by the
# preprocessor.
# This tag requires that the tag SEARCH_INCLUDES is set to YES.
INCLUDE_PATH =
# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
# patterns (like *.h and *.hpp) to filter out the header-files in the
# directories. If left blank, the patterns specified with FILE_PATTERNS will be
# used.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
INCLUDE_FILE_PATTERNS =
# The PREDEFINED tag can be used to specify one or more macro names that are
# defined before the preprocessor is started (similar to the -D option of e.g.
# gcc). The argument of the tag is a list of macros of the form: name or
# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
# is assumed. To prevent a macro definition from being undefined via #undef or
# recursively expanded use the := operator instead of the = operator.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
PREDEFINED =
# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
# tag can be used to specify a list of macro names that should be expanded. The
# macro definition that is found in the sources will be used. Use the PREDEFINED
# tag if you want to use a different macro definition that overrules the
# definition found in the source code.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_AS_DEFINED =
# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
# remove all references to function-like macros that are alone on a line, have
# an all uppercase name, and do not end with a semicolon. Such function macros
# are typically used for boiler-plate code, and will confuse the parser if not
# removed.
# The default value is: YES.
# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
# The TAGFILES tag can be used to specify one or more tag files. For each tag
# file the location of the external documentation should be added. The format of
# a tag file without this location is as follows:
# TAGFILES = file1 file2 ...
# Adding location for the tag files is done as follows:
# TAGFILES = file1=loc1 "file2 = loc2" ...
# where loc1 and loc2 can be relative or absolute paths or URLs. See the
# section "Linking to external documentation" for more information about the use
# of tag files.
# Note: Each tag file must have a unique name (where the name does NOT include
# the path). If a tag file is not located in the directory in which doxygen is
# run, you must also specify the path to the tagfile here.
TAGFILES =
# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
# tag file that is based on the input files it reads. See section "Linking to
# external documentation" for more information about the usage of tag files.
GENERATE_TAGFILE =
# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
# the class index. If set to NO, only the inherited external classes will be
# listed.
# The default value is: NO.
ALLEXTERNALS = NO
# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
# in the modules index. If set to NO, only the current project's groups will be
# listed.
# The default value is: YES.
EXTERNAL_GROUPS = YES
# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
# the related pages index. If set to NO, only the current project's pages will
# be listed.
# The default value is: YES.
EXTERNAL_PAGES = YES
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
# NO turns the diagrams off. Note that this option also works with HAVE_DOT
# disabled, but it is recommended to install and use dot, since it yields more
# powerful graphs.
# The default value is: YES.
CLASS_DIAGRAMS = YES
# You can include diagrams made with dia in doxygen documentation. Doxygen will
# then run dia to produce the diagram and insert it in the documentation. The
# DIA_PATH tag allows you to specify the directory where the dia binary resides.
# If left empty dia is assumed to be found in the default search path.
DIA_PATH =
# If set to YES the inheritance and collaboration graphs will hide inheritance
# and usage relations if the target is undocumented or is not a class.
# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
# available from the path. This tool is part of Graphviz (see:
# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
# Bell Labs. The other options in this section have no effect if this option is
# set to NO
# The default value is: NO.
HAVE_DOT = NO
# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
# to run in parallel. When set to 0 doxygen will base this on the number of
# processors available in the system. You can set it explicitly to a value
# larger than 0 to get control over the balance between CPU load and processing
# speed.
# Minimum value: 0, maximum value: 32, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NUM_THREADS = 0
# When you want a differently looking font in the dot files that doxygen
# generates you can specify the font name using DOT_FONTNAME. You need to make
# sure dot is able to find the font, which can be done by putting it in a
# standard location or by setting the DOTFONTPATH environment variable or by
# setting DOT_FONTPATH to the directory containing the font.
# The default value is: Helvetica.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = Helvetica
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
# dot graphs.
# Minimum value: 4, maximum value: 24, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10
# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTPATH =
# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
# each documented class showing the direct and indirect inheritance relations.
# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
# graph for each documented class showing the direct and indirect implementation
# dependencies (inheritance, containment, and class references variables) of the
# class with other documented classes.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
# groups, showing the direct groups dependencies.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
# class node. If there are many fields or methods and many nodes the graph may
# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
# number of items for each type to make the size more manageable. Set this to 0
# for no limit. Note that the threshold may be exceeded by 50% before the limit
# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
# but if the number exceeds 15, the total amount of fields shown is limited to
# 10.
# Minimum value: 0, maximum value: 100, default value: 10.
# This tag requires that the tag HAVE_DOT is set to YES.
UML_LIMIT_NUM_FIELDS = 10
# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
# collaboration graphs will show the relations between templates and their
# instances.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO
# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
# YES then doxygen will generate a graph for each documented file showing the
# direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
# set to YES then doxygen will generate a graph for each documented file showing
# the direct and indirect include dependencies of the file with other documented
# files.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable call graphs for selected
# functions only using the \callgraph command. Disabling a call graph can be
# accomplished by means of the command \hidecallgraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
# dependency graph for every global function or class method.
#
# Note that enabling this option will significantly increase the time of a run.
# So in most cases it will be better to enable caller graphs for selected
# functions only using the \callergraph command. Disabling a caller graph can be
# accomplished by means of the command \hidecallergraph.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
# hierarchy of all classes instead of a textual one.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
# dependencies a directory has on other directories in a graphical way. The
# dependency relations are determined by the #include relations between the
# files in the directories.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
# generated by dot. For an explanation of the image formats see the section
# output formats in the documentation of the dot tool (Graphviz (see:
# http://www.graphviz.org/)).
# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
# to make the SVG files visible in IE 9+ (other browsers do not have this
# requirement).
# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
# png:gdiplus:gdiplus.
# The default value is: png.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
# enable generation of interactive SVG images that allow zooming and panning.
#
# Note that this requires a modern browser other than Internet Explorer. Tested
# and working are Firefox, Chrome, Safari, and Opera.
# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
# the SVG files visible. Older versions of IE do not have SVG support.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
INTERACTIVE_SVG = NO
# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_PATH =
# The DOTFILE_DIRS tag can be used to specify one or more directories that
# contain dot files that are included in the documentation (see the \dotfile
# command).
# This tag requires that the tag HAVE_DOT is set to YES.
DOTFILE_DIRS =
# The MSCFILE_DIRS tag can be used to specify one or more directories that
# contain msc files that are included in the documentation (see the \mscfile
# command).
MSCFILE_DIRS =
# The DIAFILE_DIRS tag can be used to specify one or more directories that
# contain dia files that are included in the documentation (see the \diafile
# command).
DIAFILE_DIRS =
# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
# path where java can find the plantuml.jar file. If left blank, it is assumed
# PlantUML is not used or called during a preprocessing step. Doxygen will
# generate a warning when it encounters a \startuml command in this case and
# will not generate output for the diagram.
PLANTUML_JAR_PATH =
# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
# configuration file for plantuml.
PLANTUML_CFG_FILE =
# When using plantuml, the specified paths are searched for files specified by
# the !include statement in a plantuml block.
PLANTUML_INCLUDE_PATH =
# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
# that will be shown in the graph. If the number of nodes in a graph becomes
# larger than this value, doxygen will truncate the graph, which is visualized
# by representing a node as a red box. Note that doxygen if the number of direct
# children of the root node in a graph is already larger than
# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
# Minimum value: 0, maximum value: 10000, default value: 50.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
# generated by dot. A depth value of 3 means that only nodes reachable from the
# root by following a path via at most 3 edges will be shown. Nodes that lay
# further from the root node will be omitted. Note that setting this option to 1
# or 2 may greatly reduce the computation time needed for large code bases. Also
# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
# Minimum value: 0, maximum value: 1000, default value: 0.
# This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 0
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
# background. This is disabled by default, because dot on Windows does not seem
# to support this out of the box.
#
# Warning: Depending on the platform used, enabling this option may lead to
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
# read).
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
# this, this feature is disabled by default.
# The default value is: NO.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
# explaining the meaning of the various boxes and arrows in the dot generated
# graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
# files that are used to generate the various graphs.
# The default value is: YES.
# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
================================================
FILE: .clang-format
================================================
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterClass: true
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: false
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
AfterCaseLabel: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
InsertNewlineAtEOF: true
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 100
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 2000
PointerAlignment: Right
ReferenceAlignment: Right
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
CanonicalDelimiter: ''
BasedOnStyle: google
ReflowComments: true
SeparateDefinitionBlocks: Always
SortIncludes: Never
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseTab: Never
...
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: drogonframework
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # ['https://paypal.me/antao2019']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Notice**
If you need support or clarification regarding the usage of Drogon in your project, visit the official Drogon support channel at [gitter](https://gitter.im/drogon-web/community)
Please create a new issue only if you think you have found a bug or if have a feature request/enhancement.
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Notice**
If you need support or clarification regarding the usage of Drogon in your project, visit the official Drogon support channel at [gitter](https://gitter.im/drogon-web/community)
Please create a new issue only if you think you have found a bug or if have a feature request/enhancement.
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
================================================
FILE: .github/dependabot.yml
================================================
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
================================================
FILE: .github/workflows/cmake.yml
================================================
name: Build & Test
on:
push:
branches: [master]
pull_request:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
jobs:
windows:
name: windows/msvc - ${{ matrix.link }}
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
link: ["STATIC", "SHARED"]
steps:
- name: Checkout Drogon source code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Install dependencies
run: pip install conan
- name: Create build directory
run: mkdir build
- name: Install conan packages
working-directory: ./build
run: |
conan profile detect
conan install .. -s compiler="msvc" -sbuild_type=Debug --build=missing -s compiler.cppstd=17
- name: Create Build Environment & Configure Cmake
shell: bash
working-directory: ./build
run: |
[[ ${{ matrix.link }} == "SHARED" ]] && shared="ON" || shared="OFF"
cmake .. \
-DCMAKE_BUILD_TYPE=Debug \
-DBUILD_TESTING=on \
-DBUILD_SHARED_LIBS=$shared \
-DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake" \
-DBUILD_CTL=ON \
-DBUILD_EXAMPLES=ON \
-DUSE_SPDLOG=ON \
-DCMAKE_INSTALL_PREFIX=../install \
-DCMAKE_POLICY_DEFAULT_CMP0091=NEW \
-DCMAKE_CXX_STANDARD=17
- name: Build
run: cmake --build build --target install --parallel
- name: Test
shell: bash
run: ./test.sh -w
macos:
runs-on: macos-${{ matrix.osver }}
strategy:
fail-fast: false
matrix:
osver: [14, 15]
steps:
- name: Checkout Drogon source code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Install dependencies
# Already installed: brotli, zlib, lz4, sqlite3
run: brew install ninja jsoncpp mariadb hiredis redis spdlog postgresql@14
- name: Create Build Environment & Configure Cmake
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
run: |
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DBUILD_TESTING=on \
-DUSE_SPDLOG=ON \
-DBUILD_SHARED_LIBS=OFF
- name: Build
working-directory: ./build
# Execute the build. You can specify a specific target with "--target <NAME>"
run: ninja && sudo ninja install
- name: Prepare for testing
run: |
brew services restart postgresql@14
brew services start mariadb
brew services start redis
sleep 4
mariadb -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('')"
mariadb -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'"
mariadb -e "FLUSH PRIVILEGES"
brew services restart mariadb
sleep 4
psql -c 'create user postgres superuser;' postgres
- name: Test
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test.sh -t
ubuntu:
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
link: [SHARED, STATIC]
compiler:
- cxx: g++
ver: 9
- cxx: g++
ver: 10
- cxx: g++
ver: 11
- cxx: g++
ver: 12
- cxx: g++
ver: 13
- cxx: clang++
ver: 11
- cxx: clang++
ver: 12
- cxx: clang++
ver: 13
- cxx: clang++
ver: 14
- cxx: clang++
ver: 15
- cxx: clang++
ver: 16
- cxx: clang++
ver: 17
include:
- link: STATIC
compiler:
cxx: g++
ver: 13
feature: coroutines
env:
CXX: ${{ matrix.compiler.cxx }}-${{ matrix.compiler.ver }}
steps:
- name: Checkout Drogon source code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Install dependencies
run: |
# Installing packages might fail as the github image becomes outdated
sudo apt update
# These aren't available or don't work well in vcpkg
sudo apt-get install -y libjsoncpp-dev uuid-dev libssl-dev zlib1g-dev libsqlite3-dev
sudo apt-get install -y ninja-build libbrotli-dev
sudo apt-get install -y libspdlog-dev
- name: Install postgresql
run: |
sudo apt-get --purge remove postgresql postgresql-doc postgresql-common postgresql-client-common
sudo apt-get -y install postgresql-all
- name: Install g++
if: startsWith(matrix.compiler.cxx, 'g++') && (matrix.compiler.ver == 13 || matrix.compiler.ver == 9)
run: |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get install g++-${{ matrix.compiler.ver }}
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.compiler.ver }} ${{ matrix.compiler.ver }}
- name: Install Clang
if: startsWith(matrix.compiler.cxx, 'clang') && matrix.compiler.ver < 13
run: sudo apt-get install clang-${{ matrix.compiler.ver }}
- name: Install Clang
if: startsWith(matrix.compiler.cxx, 'clang') && matrix.compiler.ver >= 13
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x ./llvm.sh
sudo ./llvm.sh ${{ matrix.compiler.ver }}
- name: Export `shared`
run: |
[[ ${{ matrix.link }} == "SHARED" ]] && shared="ON" || shared="OFF"
echo "shared=$shared" >> $GITHUB_ENV
- name: Create Build Environment & Configure Cmake
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
if: matrix.compiler.feature != 'coroutines'
run: |
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DBUILD_TESTING=on \
-DUSE_SPDLOG=ON \
-DBUILD_SHARED_LIBS=$shared
- name: Create Build Environment & Configure Cmake (coroutines)
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
if: matrix.compiler.feature == 'coroutines'
run: |
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DBUILD_TESTING=on \
-DUSE_SPDLOG=ON \
-DCMAKE_CXX_FLAGS="-fcoroutines" \
-DBUILD_SHARED_LIBS=$shared \
- name: Build
working-directory: ./build
# Execute the build. You can specify a specific target with "--target <NAME>"
run: ninja && sudo ninja install
- name: Prepare for testing
run: |
sudo systemctl start postgresql
sleep 1
sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD '12345'" postgres
- name: Test
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test.sh -t
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches: [ 'master' ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ 'master' ]
schedule:
- cron: '46 7 * * 5'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'cpp' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
env:
SHARED: ON
steps:
- name: Checkout Drogon source code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Install dependencies
run: |
sudo apt update
sudo apt-get install -y libjsoncpp-dev uuid-dev libssl-dev zlib1g-dev libsqlite3-dev
sudo apt-get install -y ninja-build libbrotli-dev
- name: Create Build Environment & Configure Cmake
run: |
cmake -B build -G Ninja \
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
-DBUILD_TESTING=on \
-DBUILD_SHARED_LIBS=$SHARED
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
- name: Build
working-directory: ./build
run: ninja && sudo ninja install
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/codespell.yml
================================================
# Look for typos in the codebase using codespell.
# https://github.com/codespell-project/codespell#readme
name: codespell
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
codespell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: sudo apt-get install -y codespell
- run: codespell --ignore-words-list="coo,folx,ot,statics,xwindows,NotIn,aNULL," --skip="*.csp"
================================================
FILE: .github/workflows/cpp.yml
================================================
name: C++
on:
push:
branches: [master]
pull_request:
permissions:
contents: read
jobs:
format:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- name: Install dos2unix
run: sudo apt-get install -y dos2unix
- name: Install clang-format-17
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x ./llvm.sh
sudo ./llvm.sh 17
sudo apt-get install -y clang-format-17
- name: Check formatting
run: ./format.sh && git diff --exit-code
env:
CLANG_FORMAT: clang-format-17
cpplint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install cpplint
run: pip install cpplint
- name: Run lint
run: cpplint --recursive .
================================================
FILE: .github/workflows/docker-publish.yml
================================================
name: Build and Push Docker Image
on:
release:
types: [created] # 当新版本被创建时触发
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build Docker image
run: |
cd docker/ubuntu
docker build -t drogonframework/drogon:latest .
- name: Push Docker image
run: |
docker push drogonframework/drogon:latest
================================================
FILE: .gitignore
================================================
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
build/
cmake-build-debug/
cmake-build-debug-visual-studio/
.idea/
html/
latex/
.vscode
*.kdev4
.cproject
.project
.settings/
.vs/
CMakeSettings.json
install
trace.json
.cache/
================================================
FILE: .gitmodules
================================================
[submodule "trantor"]
path = trantor
url = https://github.com/an-tao/trantor.git
branch = master
================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.5...3.31)
project(drogon)
message(STATUS "compiler: " ${CMAKE_CXX_COMPILER_ID})
option(BUILD_CTL "Build drogon_ctl" ON)
option(BUILD_EXAMPLES "Build examples" ON)
option(BUILD_ORM "Build orm" ON)
option(COZ_PROFILING "Use coz for profiling" OFF)
option(BUILD_SHARED_LIBS "Build drogon as a shared lib" OFF)
option(BUILD_DOC "Build Doxygen documentation" OFF)
option(BUILD_BROTLI "Build Brotli" ON)
option(BUILD_YAML_CONFIG "Build yaml config" ON)
option(USE_SUBMODULE "Use trantor as a submodule" ON)
option(USE_STATIC_LIBS_ONLY "Use only static libraries as dependencies" OFF)
include(CMakeDependentOption)
CMAKE_DEPENDENT_OPTION(BUILD_POSTGRESQL "Build with postgresql support" ON "BUILD_ORM" OFF)
CMAKE_DEPENDENT_OPTION(LIBPQ_BATCH_MODE "Use batch mode for libpq" ON "BUILD_POSTGRESQL" OFF)
CMAKE_DEPENDENT_OPTION(BUILD_MYSQL "Build with mysql support" ON "BUILD_ORM" OFF)
CMAKE_DEPENDENT_OPTION(BUILD_SQLITE "Build with sqlite3 support" ON "BUILD_ORM" OFF)
CMAKE_DEPENDENT_OPTION(BUILD_REDIS "Build with redis support" ON "BUILD_ORM" OFF)
CMAKE_DEPENDENT_OPTION(USE_SPDLOG "Allow using the spdlog logging library" OFF "USE_SUBMODULE" OFF)
set(DROGON_MAJOR_VERSION 1)
set(DROGON_MINOR_VERSION 9)
set(DROGON_PATCH_VERSION 12)
set(DROGON_VERSION
${DROGON_MAJOR_VERSION}.${DROGON_MINOR_VERSION}.${DROGON_PATCH_VERSION})
set(DROGON_VERSION_STRING "${DROGON_VERSION}")
include(GNUInstallDirs)
# Offer the user the choice of overriding the installation directories
set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
set(INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables")
set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for header files")
set(DEF_INSTALL_DROGON_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/Drogon)
set(INSTALL_DROGON_CMAKE_DIR ${DEF_INSTALL_DROGON_CMAKE_DIR}
CACHE PATH "Installation directory for cmake files")
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
# Force MSVC to use UTF-8 because that's what we use. Otherwise it uses
# the default of whatever Windows sets and causes encoding issues.
message(STATUS "You are using MSVC. Forcing to use UTF-8")
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
if (MSVC_VERSION GREATER_EQUAL 1914)
# Tells Visual Studio 2017 (15.7+) and newer to correctly set the value of the standard __cplusplus macro,
# instead of leaving it to 199711L and settings the effective c++ version in _MSVC_LANG
# Dropping support for older versions of VS would allow to only rely on __cplusplus
add_compile_options("/Zc:__cplusplus")
endif()
endif ()
add_library(${PROJECT_NAME})
if (BUILD_SHARED_LIBS)
find_package(Threads)
# set(BUILD_EXAMPLES FALSE)
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES
"${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}" isSystemDir)
if ("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}")
endif ("${isSystemDir}" STREQUAL "-1")
set_target_properties(${PROJECT_NAME} PROPERTIES
VERSION ${DROGON_VERSION}
SOVERSION ${DROGON_MAJOR_VERSION})
target_link_libraries(${PROJECT_NAME} PUBLIC Threads::Threads)
if (WIN32)
target_link_libraries(${PROJECT_NAME} PUBLIC rpcrt4 crypt32 advapi32 ws2_32)
if (CMAKE_CXX_COMPILER_ID MATCHES MSVC)
# Ignore MSVC C4251 and C4275 warning of exporting std objects with no dll export
# We export class to facilitate maintenance, thus if you compile
# drogon on windows as a shared library, you will need to use
# exact same compiler for drogon and your app.
target_compile_options(${PROJECT_NAME} PUBLIC /wd4251 /wd4275)
endif ()
endif ()
endif (BUILD_SHARED_LIBS)
if(USE_STATIC_LIBS_ONLY)
set(CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_STATIC_LIBRARY_SUFFIX}")
endif(USE_STATIC_LIBS_ONLY)
if(USE_SPDLOG)
find_package(spdlog CONFIG)
if(spdlog_FOUND)
message(STATUS "spdlog found!")
target_link_libraries(${PROJECT_NAME} PUBLIC spdlog::spdlog_header_only)
target_compile_definitions(${PROJECT_NAME} PUBLIC DROGON_SPDLOG_SUPPORT SPDLOG_FMT_EXTERNAL FMT_HEADER_ONLY)
endif(spdlog_FOUND)
endif(USE_SPDLOG)
if (NOT ${CMAKE_PLATFORM_NAME} STREQUAL "Windows" AND CMAKE_CXX_COMPILER_ID MATCHES GNU)
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Werror)
endif ()
include(GenerateExportHeader)
generate_export_header(${PROJECT_NAME} EXPORT_FILE_NAME ${CMAKE_CURRENT_BINARY_DIR}/exports/drogon/exports.h)
include(cmake/DrogonUtilities.cmake)
include(cmake/ParseAndAddDrogonTests.cmake)
include(CheckIncludeFileCXX)
check_include_file_cxx(any HAS_ANY)
check_include_file_cxx(string_view HAS_STRING_VIEW)
check_include_file_cxx(coroutine HAS_COROUTINE)
if (NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
set(DROGON_CXX_STANDARD ${CMAKE_CXX_STANDARD})
elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE)
set(DROGON_CXX_STANDARD 20)
else ()
set(DROGON_CXX_STANDARD 17)
endif ()
if(USE_SUBMODULE)
target_include_directories(
${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/trantor>)
endif()
target_include_directories(
${PROJECT_NAME}
PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/inc>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/lib/inc>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/orm_lib/inc>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/nosql_lib/redis/inc>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/exports>
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>)
if (WIN32)
target_include_directories(
${PROJECT_NAME}
PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/third_party/mman-win32>)
endif (WIN32)
add_library(Drogon::Drogon ALIAS ${PROJECT_NAME})
if(USE_SUBMODULE)
add_subdirectory(trantor)
target_link_libraries(${PROJECT_NAME} PUBLIC trantor)
else()
find_package(Trantor CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC Trantor::Trantor)
endif()
if(${CMAKE_SYSTEM_NAME} STREQUAL "Haiku")
target_link_libraries(${PROJECT_NAME} PRIVATE network)
elseif (NOT WIN32 AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD")
target_link_libraries(${PROJECT_NAME} PRIVATE dl)
elseif (WIN32)
target_link_libraries(${PROJECT_NAME} PRIVATE shlwapi ws2_32 iphlpapi)
endif ()
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules/)
find_package(Filesystem COMPONENTS Final)
if(CXX_FILESYSTEM_HAVE_FS)
message(STATUS "Found std::filesystem")
else ()
message(FATAL_ERROR "Not found std::filesystem, please use a newer compiler")
endif()
if (DROGON_CXX_STANDARD EQUAL 17)
message(STATUS "use c++17")
# Check for partial implementation of c++17 (Windows/OSX only?)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
try_compile(check_filesystem_path ${CMAKE_BINARY_DIR}/cmaketest
${PROJECT_SOURCE_DIR}/cmake/tests/check_has_std_filesystem_path.cc
CXX_STANDARD 17)
set(CMAKE_TRY_COMPILE_TARGET_TYPE)
if (NOT check_filesystem_path)
message(FATAL_ERROR "The std::filesystem seems to be a partial implementation,"
" please use a newer compiler")
endif()
else ()
message(STATUS "use c++20")
endif ()
option(HAS_STD_FILESYSTEM_PATH "use std::filesystem" ON)
# HACK: Needed to be compiled on Yocto Linux
if(TARGET std::filesystem)
get_property(CAN_LINK_FS TARGET std::filesystem PROPERTY INTERFACE_LINK_LIBRARIES SET)
if ( CAN_LINK_FS )
target_link_libraries(${PROJECT_NAME} PUBLIC std::filesystem)
endif()
endif()
# jsoncpp
find_package(Jsoncpp REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC Jsoncpp_lib)
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW ${JSONCPP_INCLUDE_DIRS})
# yamlcpp
if(BUILD_YAML_CONFIG)
find_package(yaml-cpp QUIET)
if(yaml-cpp_FOUND)
if (NOT YAML_CPP_LIBRARIES)
find_library(YAML_CPP_LINK_LIBRARY "yaml-cpp")
if(NOT YAML_CPP_LINK_LIBRARY)
message(STATUS "yaml-cpp not used")
else()
message(STATUS "yaml-cpp found ")
target_link_libraries(${PROJECT_NAME} PUBLIC ${YAML_CPP_LINK_LIBRARY})
target_compile_definitions(${PROJECT_NAME} PUBLIC HAS_YAML_CPP)
endif()
else()
message(STATUS "yaml-cpp found ")
target_link_libraries(${PROJECT_NAME} PUBLIC ${YAML_CPP_LIBRARIES})
target_compile_definitions(${PROJECT_NAME} PUBLIC HAS_YAML_CPP)
endif()
else()
message(STATUS "yaml-cpp not used")
endif()
else()
message(STATUS "yaml-cpp not used")
endif(BUILD_YAML_CONFIG)
if (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD"
AND NOT WIN32)
find_package(UUID REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE UUID_lib)
try_compile(normal_uuid ${CMAKE_BINARY_DIR}/cmaketest
${PROJECT_SOURCE_DIR}/cmake/tests/normal_uuid_lib_test.cc
LINK_LIBRARIES UUID_lib
OUTPUT_VARIABLE NORMAL_UUID_COMPILE_OUTPUT)
try_compile(ossp_uuid ${CMAKE_BINARY_DIR}/cmaketest
${PROJECT_SOURCE_DIR}/cmake/tests/ossp_uuid_lib_test.cc
LINK_LIBRARIES UUID_lib
OUTPUT_VARIABLE OSSP_UUID_COMPILE_OUTPUT)
if (normal_uuid)
add_definitions(-DUSE_OSSP_UUID=0)
elseif (ossp_uuid)
add_definitions(-DUSE_OSSP_UUID=1)
else ()
message(FATAL_ERROR "uuid lib error:\n${NORMAL_UUID_COMPILE_OUTPUT}\n${OSSP_UUID_COMPILE_OUTPUT}")
endif ()
endif (NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD"
AND NOT ${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD"
AND NOT WIN32)
if (BUILD_BROTLI)
find_package(Brotli)
if (Brotli_FOUND)
message(STATUS "Brotli found")
add_definitions(-DUSE_BROTLI)
target_link_libraries(${PROJECT_NAME} PRIVATE Brotli_lib)
endif (Brotli_FOUND)
endif (BUILD_BROTLI)
set(DROGON_SOURCES
lib/src/AOPAdvice.cc
lib/src/AccessLogger.cc
lib/src/CacheFile.cc
lib/src/ConfigAdapterManager.cc
lib/src/ConfigLoader.cc
lib/src/Cookie.cc
lib/src/DrClassMap.cc
lib/src/DrTemplateBase.cc
lib/src/MiddlewaresFunction.cc
lib/src/FixedWindowRateLimiter.cc
lib/src/GlobalFilters.cc
lib/src/Histogram.cc
lib/src/Hodor.cc
lib/src/HttpAppFrameworkImpl.cc
lib/src/HttpBinder.cc
lib/src/HttpClientImpl.cc
lib/src/HttpConnectionLimit.cc
lib/src/HttpControllerBinder.cc
lib/src/HttpControllersRouter.cc
lib/src/HttpFileImpl.cc
lib/src/HttpFileUploadRequest.cc
lib/src/HttpRequestImpl.cc
lib/src/HttpRequestParser.cc
lib/src/RequestStream.cc
lib/src/HttpResponseImpl.cc
lib/src/HttpResponseParser.cc
lib/src/HttpServer.cc
lib/src/HttpUtils.cc
lib/src/HttpViewData.cc
lib/src/IntranetIpFilter.cc
lib/src/JsonConfigAdapter.cc
lib/src/ListenerManager.cc
lib/src/LocalHostFilter.cc
lib/src/MultiPart.cc
lib/src/MultipartStreamParser.cc
lib/src/NotFound.cc
lib/src/PluginsManager.cc
lib/src/PromExporter.cc
lib/src/RangeParser.cc
lib/src/RateLimiter.cc
lib/src/RealIpResolver.cc
lib/src/SecureSSLRedirector.cc
lib/src/Redirector.cc
lib/src/SessionManager.cc
lib/src/SlashRemover.cc
lib/src/SlidingWindowRateLimiter.cc
lib/src/StaticFileRouter.cc
lib/src/TaskTimeoutFlag.cc
lib/src/TokenBucketRateLimiter.cc
lib/src/Utilities.cc
lib/src/WebSocketClientImpl.cc
lib/src/WebSocketConnectionImpl.cc
lib/src/YamlConfigAdapter.cc
lib/src/drogon_test.cc)
set(private_headers
lib/src/AOPAdvice.h
lib/src/CacheFile.h
lib/src/ConfigLoader.h
lib/src/ControllerBinderBase.h
lib/src/MiddlewaresFunction.h
lib/src/HttpAppFrameworkImpl.h
lib/src/HttpClientImpl.h
lib/src/HttpConnectionLimit.h
lib/src/HttpControllerBinder.h
lib/src/HttpControllersRouter.h
lib/src/HttpFileImpl.h
lib/src/HttpFileUploadRequest.h
lib/src/HttpMessageBody.h
lib/src/HttpRequestImpl.h
lib/src/HttpRequestParser.h
lib/src/HttpResponseImpl.h
lib/src/HttpResponseParser.h
lib/src/HttpServer.h
lib/src/HttpUtils.h
lib/src/impl_forwards.h
lib/src/ListenerManager.h
lib/src/PluginsManager.h
lib/src/SessionManager.h
lib/src/SpinLock.h
lib/src/StaticFileRouter.h
lib/src/TaskTimeoutFlag.h
lib/src/WebSocketClientImpl.h
lib/src/WebSocketConnectionImpl.h
lib/src/FixedWindowRateLimiter.h
lib/src/SlidingWindowRateLimiter.h
lib/src/TokenBucketRateLimiter.h
lib/src/ConfigAdapterManager.h
lib/src/JsonConfigAdapter.h
lib/src/YamlConfigAdapter.h
lib/src/ConfigAdapter.h
lib/src/MultipartStreamParser.h)
if (NOT WIN32 AND NOT CMAKE_SYSTEM_NAME STREQUAL "iOS")
set(DROGON_SOURCES
${DROGON_SOURCES}
lib/src/SharedLibManager.cc)
set(private_headers
${private_headers}
lib/src/SharedLibManager.h)
elseif(WIN32)
set(DROGON_SOURCES
${DROGON_SOURCES}
third_party/mman-win32/mman.c)
set(private_headers
${private_headers}
third_party/mman-win32/mman.h)
endif()
if (BUILD_POSTGRESQL)
# find postgres
find_package(pg)
if (pg_FOUND)
message(STATUS "libpq inc path:" ${PG_INCLUDE_DIRS})
message(STATUS "libpq lib:" ${PG_LIBRARIES})
target_link_libraries(${PROJECT_NAME} PRIVATE pg_lib)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/postgresql_impl/PostgreSQLResultImpl.cc
orm_lib/src/postgresql_impl/PgListener.cc)
set(private_headers
${private_headers}
orm_lib/src/postgresql_impl/PostgreSQLResultImpl.h
orm_lib/src/postgresql_impl/PgListener.h)
if (LIBPQ_BATCH_MODE)
try_compile(libpq_supports_batch ${CMAKE_BINARY_DIR}/cmaketest
${PROJECT_SOURCE_DIR}/cmake/tests/test_libpq_batch_mode.cc
LINK_LIBRARIES ${PostgreSQL_LIBRARIES}
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${PostgreSQL_INCLUDE_DIR}")
endif (LIBPQ_BATCH_MODE)
if (libpq_supports_batch)
message(STATUS "The libpq supports batch mode")
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" ON)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/postgresql_impl/PgBatchConnection.cc)
else (libpq_supports_batch)
option(LIBPQ_SUPPORTS_BATCH_MODE "libpq batch mode" OFF)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/postgresql_impl/PgConnection.cc)
set(private_headers
${private_headers}
orm_lib/src/postgresql_impl/PgConnection.h)
endif (libpq_supports_batch)
endif (pg_FOUND)
endif (BUILD_POSTGRESQL)
if (BUILD_MYSQL)
# Find mysql, only mariadb client library is supported
find_package(MySQL QUIET)
find_package(unofficial-libmariadb QUIET)
if (MySQL_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE MySQL_lib)
set(DROGON_FOUND_MYSQL TRUE)
set(MYSQL_LIB_NAME MySQL_lib)
elseif (unofficial-libmariadb_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE unofficial::libmariadb)
set(DROGON_FOUND_MYSQL TRUE)
set(MYSQL_LIB_NAME unofficial::libmariadb)
endif ()
if (DROGON_FOUND_MYSQL)
message(STATUS "Ok! We find mariadb!")
include(CheckLibraryExists)
check_library_exists(${MYSQL_LIB_NAME} mysql_optionsv "" HAS_MYSQL_OPTIONSV)
if (HAS_MYSQL_OPTIONSV)
message(STATUS "Mariadb support mysql_optionsv")
add_definitions(-DHAS_MYSQL_OPTIONSV)
endif(HAS_MYSQL_OPTIONSV)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/mysql_impl/MysqlConnection.cc
orm_lib/src/mysql_impl/MysqlResultImpl.cc)
set(private_headers
${private_headers}
orm_lib/src/mysql_impl/MysqlConnection.h
orm_lib/src/mysql_impl/MysqlResultImpl.h)
else (DROGON_FOUND_MYSQL)
message(STATUS "MySql was not found.")
endif (DROGON_FOUND_MYSQL)
endif (BUILD_MYSQL)
if (BUILD_SQLITE)
# Find sqlite3.
find_package(SQLite3 QUIET)
find_package(unofficial-sqlite3 QUIET)
if (SQLite3_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE SQLite3_lib)
set(DROGON_FOUND_SQLite3 TRUE)
elseif (unofficial-sqlite3_FOUND)
target_link_libraries(${PROJECT_NAME} PRIVATE unofficial::sqlite3::sqlite3)
set(DROGON_FOUND_SQLite3 TRUE)
endif ()
if (DROGON_FOUND_SQLite3)
message(STATUS "Ok! We find sqlite3!")
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/sqlite3_impl/Sqlite3Connection.cc
orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.cc)
set(private_headers
${private_headers}
orm_lib/src/sqlite3_impl/Sqlite3Connection.h
orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.h)
else (DROGON_FOUND_SQLite3)
message(STATUS "sqlite3 was not found.")
endif (DROGON_FOUND_SQLite3)
endif (BUILD_SQLITE)
if (BUILD_REDIS)
find_package(Hiredis)
if (Hiredis_FOUND)
add_definitions(-DUSE_REDIS)
target_link_libraries(${PROJECT_NAME} PRIVATE Hiredis_lib)
set(DROGON_SOURCES
${DROGON_SOURCES}
nosql_lib/redis/src/RedisClientImpl.cc
nosql_lib/redis/src/RedisClientLockFree.cc
nosql_lib/redis/src/RedisClientManager.cc
nosql_lib/redis/src/RedisConnection.cc
nosql_lib/redis/src/RedisResult.cc
nosql_lib/redis/src/RedisTransactionImpl.cc
nosql_lib/redis/src/SubscribeContext.cc
nosql_lib/redis/src/RedisSubscriberImpl.cc)
set(private_headers
${private_headers}
nosql_lib/redis/src/RedisClientImpl.h
nosql_lib/redis/src/RedisClientLockFree.h
nosql_lib/redis/src/RedisConnection.h
nosql_lib/redis/src/RedisTransactionImpl.h
nosql_lib/redis/src/SubscribeContext.h
nosql_lib/redis/src/RedisSubscriberImpl.h)
endif (Hiredis_FOUND)
endif (BUILD_REDIS)
if (NOT Hiredis_FOUND)
set(DROGON_SOURCES
${DROGON_SOURCES}
lib/src/RedisClientSkipped.cc
lib/src/RedisResultSkipped.cc
lib/src/RedisClientManagerSkipped.cc)
set(private_headers
${private_headers}
lib/src/RedisClientManager.h)
endif (NOT Hiredis_FOUND)
if (BUILD_TESTING)
add_subdirectory(nosql_lib/redis/tests)
endif (BUILD_TESTING)
find_package(ZLIB REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE ZLIB::ZLIB)
execute_process(COMMAND "git" rev-parse HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_SHA1
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
configure_file("${PROJECT_SOURCE_DIR}/cmake/templates/version.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/lib/inc/drogon/version.h" @ONLY)
if (DROGON_CXX_STANDARD EQUAL 20)
option(USE_COROUTINE "Enable C++20 coroutine support" ON)
else (DROGON_CXX_STANDARD EQUAL 20)
option(USE_COROUTINE "Enable C++20 coroutine support" OFF)
endif (DROGON_CXX_STANDARD EQUAL 20)
if (BUILD_EXAMPLES)
add_subdirectory(examples)
endif (BUILD_EXAMPLES)
if (BUILD_CTL)
if (CMAKE_CROSSCOMPILING)
find_program(HOST_DROGON_CTL _drogon_ctl)
if (NOT HOST_DROGON_CTL)
message(FATAL_ERROR "_drogon_ctl not found on host system")
endif()
set(DROGON_CTL "${HOST_DROGON_CTL}")
else (CMAKE_CROSSCOMPILING)
set(DROGON_CTL "$<TARGET_FILE:_drogon_ctl>")
endif (CMAKE_CROSSCOMPILING)
add_subdirectory(drogon_ctl)
endif (BUILD_CTL)
if (COZ_PROFILING)
find_package(coz-profiler REQUIRED)
target_compile_definitions(${PROJECT_NAME} PRIVATE -DCOZ_PROFILING=1)
# If linked will not need to be ran with `coz run --- [executable]` to run the
# profiler, but drogon_ctl currently won't build because it doesn't find debug
# information while trying to generate it's own sources
# target_link_libraries(${PROJECT_NAME} PUBLIC coz::coz)
target_include_directories(${PROJECT_NAME} PUBLIC ${COZ_INCLUDE_DIRS})
endif (COZ_PROFILING)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/ArrayParser.cc
orm_lib/src/Criteria.cc
orm_lib/src/DbClient.cc
orm_lib/src/DbClientImpl.cc
orm_lib/src/DbClientLockFree.cc
orm_lib/src/DbConnection.cc
orm_lib/src/DbListener.cc
orm_lib/src/Exception.cc
orm_lib/src/Field.cc
orm_lib/src/Result.cc
orm_lib/src/Row.cc
orm_lib/src/SqlBinder.cc
orm_lib/src/TransactionImpl.cc
orm_lib/src/RestfulController.cc)
set(DROGON_HEADERS
lib/inc/drogon/Attribute.h
lib/inc/drogon/CacheMap.h
lib/inc/drogon/Cookie.h
lib/inc/drogon/DrClassMap.h
lib/inc/drogon/DrObject.h
lib/inc/drogon/DrTemplate.h
lib/inc/drogon/DrTemplateBase.h
lib/inc/drogon/HttpAppFramework.h
lib/inc/drogon/HttpBinder.h
lib/inc/drogon/HttpClient.h
lib/inc/drogon/HttpController.h
lib/inc/drogon/HttpFilter.h
lib/inc/drogon/HttpMiddleware.h
lib/inc/drogon/HttpRequest.h
lib/inc/drogon/RequestStream.h
lib/inc/drogon/HttpResponse.h
lib/inc/drogon/HttpSimpleController.h
lib/inc/drogon/HttpTypes.h
lib/inc/drogon/HttpViewData.h
lib/inc/drogon/IntranetIpFilter.h
lib/inc/drogon/IOThreadStorage.h
lib/inc/drogon/LocalHostFilter.h
lib/inc/drogon/MultiPart.h
lib/inc/drogon/NotFound.h
lib/inc/drogon/Session.h
lib/inc/drogon/UploadFile.h
lib/inc/drogon/WebSocketClient.h
lib/inc/drogon/WebSocketConnection.h
lib/inc/drogon/WebSocketController.h
lib/inc/drogon/drogon.h
${CMAKE_CURRENT_BINARY_DIR}/lib/inc/drogon/version.h
lib/inc/drogon/drogon_callbacks.h
lib/inc/drogon/PubSubService.h
lib/inc/drogon/drogon_test.h
lib/inc/drogon/RateLimiter.h
${CMAKE_CURRENT_BINARY_DIR}/exports/drogon/exports.h)
set(private_headers
${private_headers}
lib/src/DbClientManager.h
orm_lib/src/DbClientImpl.h
orm_lib/src/DbConnection.h
orm_lib/src/ResultImpl.h
orm_lib/src/TransactionImpl.h)
if (pg_FOUND OR DROGON_FOUND_MYSQL OR DROGON_FOUND_SQLite3)
set(DROGON_SOURCES
${DROGON_SOURCES}
orm_lib/src/DbClientManager.cc)
else (pg_FOUND OR DROGON_FOUND_MYSQL OR DROGON_FOUND_SQLite3)
set(DROGON_SOURCES
${DROGON_SOURCES}
lib/src/DbClientManagerSkipped.cc)
endif (pg_FOUND OR DROGON_FOUND_MYSQL OR DROGON_FOUND_SQLite3)
set_target_properties(${PROJECT_NAME}
PROPERTIES CXX_STANDARD ${DROGON_CXX_STANDARD})
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
set_target_properties(${PROJECT_NAME} PROPERTIES EXPORT_NAME Drogon)
if (pg_FOUND OR DROGON_FOUND_MYSQL OR DROGON_FOUND_SQLite3)
if (pg_FOUND)
option(USE_POSTGRESQL "Enable PostgreSQL" ON)
else (pg_FOUND)
option(USE_POSTGRESQL "Disable PostgreSQL" OFF)
endif (pg_FOUND)
if (DROGON_FOUND_MYSQL)
option(USE_MYSQL "Enable Mysql" ON)
else (DROGON_FOUND_MYSQL)
option(USE_MYSQL "Disable Mysql" OFF)
endif (DROGON_FOUND_MYSQL)
if (DROGON_FOUND_SQLite3)
option(USE_SQLITE3 "Enable Sqlite3" ON)
else (DROGON_FOUND_SQLite3)
option(USE_SQLITE3 "Disable Sqlite3" OFF)
endif (DROGON_FOUND_SQLite3)
endif (pg_FOUND OR DROGON_FOUND_MYSQL OR DROGON_FOUND_SQLite3)
get_filename_component(COMPILER_COMMAND ${CMAKE_CXX_COMPILER} NAME)
set(COMPILER_ID ${CMAKE_CXX_COMPILER_ID})
if (CMAKE_BUILD_TYPE)
string(TOLOWER ${CMAKE_BUILD_TYPE} _type)
if (_type STREQUAL release)
set(COMPILATION_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} -std=c++")
elseif (_type STREQUAL debug)
set(COMPILATION_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} -std=c++")
else ()
set(COMPILATION_FLAGS "-std=c++")
endif ()
else (CMAKE_BUILD_TYPE)
set(COMPILATION_FLAGS "-std=c++")
endif (CMAKE_BUILD_TYPE)
list(APPEND INCLUDE_DIRS_FOR_DYNAMIC_VIEW
"${CMAKE_INSTALL_PREFIX}/${INSTALL_INCLUDE_DIR}")
list(REMOVE_DUPLICATES INCLUDE_DIRS_FOR_DYNAMIC_VIEW)
set(INS_STRING "")
foreach (loop_var ${INCLUDE_DIRS_FOR_DYNAMIC_VIEW})
set(INS_STRING "${INS_STRING} -I${loop_var}")
endforeach (loop_var)
set(INCLUDING_DIRS ${INS_STRING})
configure_file(${PROJECT_SOURCE_DIR}/cmake/templates/config.h.in
${PROJECT_BINARY_DIR}/drogon/config.h @ONLY)
if (BUILD_TESTING)
message(STATUS "Building tests")
enable_testing()
add_subdirectory(lib/tests)
if (pg_FOUND)
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/postgresql_impl/test)
endif (pg_FOUND)
if (DROGON_FOUND_MYSQL)
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/mysql_impl/test)
endif (DROGON_FOUND_MYSQL)
if (DROGON_FOUND_SQLite3)
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/src/sqlite3_impl/test)
endif (DROGON_FOUND_SQLite3)
add_subdirectory(${PROJECT_SOURCE_DIR}/orm_lib/tests)
endif (BUILD_TESTING)
# Installation
install(TARGETS ${PROJECT_NAME}
EXPORT DrogonTargets
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" COMPONENT bin
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" COMPONENT lib)
install(FILES ${DROGON_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon)
set(ORM_HEADERS
orm_lib/inc/drogon/orm/ArrayParser.h
orm_lib/inc/drogon/orm/BaseBuilder.h
orm_lib/inc/drogon/orm/Criteria.h
orm_lib/inc/drogon/orm/DbClient.h
orm_lib/inc/drogon/orm/DbConfig.h
orm_lib/inc/drogon/orm/DbListener.h
orm_lib/inc/drogon/orm/DbTypes.h
orm_lib/inc/drogon/orm/Exception.h
orm_lib/inc/drogon/orm/Field.h
orm_lib/inc/drogon/orm/FunctionTraits.h
orm_lib/inc/drogon/orm/Mapper.h
orm_lib/inc/drogon/orm/CoroMapper.h
orm_lib/inc/drogon/orm/Result.h
orm_lib/inc/drogon/orm/ResultIterator.h
orm_lib/inc/drogon/orm/Row.h
orm_lib/inc/drogon/orm/RowIterator.h
orm_lib/inc/drogon/orm/SqlBinder.h
orm_lib/inc/drogon/orm/RestfulController.h)
install(FILES ${ORM_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/orm)
set(NOSQL_HEADERS
nosql_lib/redis/inc/drogon/nosql/RedisClient.h
nosql_lib/redis/inc/drogon/nosql/RedisResult.h
nosql_lib/redis/inc/drogon/nosql/RedisSubscriber.h
nosql_lib/redis/inc/drogon/nosql/RedisException.h)
install(FILES ${NOSQL_HEADERS} DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/nosql)
set(DROGON_UTIL_HEADERS
lib/inc/drogon/utils/coroutine.h
lib/inc/drogon/utils/FunctionTraits.h
lib/inc/drogon/utils/HttpConstraint.h
lib/inc/drogon/utils/OStringStream.h
lib/inc/drogon/utils/Utilities.h
lib/inc/drogon/utils/monitoring.h)
install(FILES ${DROGON_UTIL_HEADERS}
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/utils)
set(DROGON_MONITORING_HEADERS
lib/inc/drogon/utils/monitoring/Counter.h
lib/inc/drogon/utils/monitoring/Metric.h
lib/inc/drogon/utils/monitoring/Registry.h
lib/inc/drogon/utils/monitoring/Collector.h
lib/inc/drogon/utils/monitoring/Sample.h
lib/inc/drogon/utils/monitoring/Gauge.h
lib/inc/drogon/utils/monitoring/Histogram.h)
install(FILES ${DROGON_MONITORING_HEADERS}
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/utils/monitoring)
set(DROGON_PLUGIN_HEADERS
lib/inc/drogon/plugins/Plugin.h
lib/inc/drogon/plugins/Redirector.h
lib/inc/drogon/plugins/SecureSSLRedirector.h
lib/inc/drogon/plugins/AccessLogger.h
lib/inc/drogon/plugins/RealIpResolver.h
lib/inc/drogon/plugins/Hodor.h
lib/inc/drogon/plugins/SlashRemover.h
lib/inc/drogon/plugins/GlobalFilters.h
lib/inc/drogon/plugins/PromExporter.h)
install(FILES ${DROGON_PLUGIN_HEADERS}
DESTINATION ${INSTALL_INCLUDE_DIR}/drogon/plugins)
target_sources(${PROJECT_NAME} PRIVATE
${DROGON_SOURCES}
${private_headers}
${DROGON_HEADERS}
${ORM_HEADERS}
${DROGON_UTIL_HEADERS}
${DROGON_PLUGIN_HEADERS}
${NOSQL_HEADERS}
${DROGON_MONITORING_HEADERS})
source_group("Public API"
FILES
${DROGON_HEADERS}
${ORM_HEADERS}
${DROGON_UTIL_HEADERS}
${DROGON_PLUGIN_HEADERS}
${NOSQL_HEADERS}
${DROGON_MONITORING_HEADERS})
source_group("Private Headers"
FILES
${private_headers})
# Export the package for use from the build-tree (this registers the build-tree
# with a global cmake-registry) export(PACKAGE Drogon)
include(CMakePackageConfigHelpers)
# ... for the install tree
configure_package_config_file(
cmake/templates/DrogonConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake
INSTALL_DESTINATION
${INSTALL_DROGON_CMAKE_DIR})
# version
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake
VERSION ${DROGON_VERSION}
COMPATIBILITY SameMajorVersion)
# Install the DrogonConfig.cmake and DrogonConfigVersion.cmake
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/DrogonConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/DrogonConfigVersion.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindUUID.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindJsoncpp.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindSQLite3.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindMySQL.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/Findpg.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindBrotli.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/Findcoz-profiler.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindHiredis.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindFilesystem.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/DrogonUtilities.cmake"
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/ParseAndAddDrogonTests.cmake"
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
COMPONENT dev)
# Install the export set for use with the install-tree
install(EXPORT DrogonTargets
DESTINATION "${INSTALL_DROGON_CMAKE_DIR}"
NAMESPACE Drogon::
COMPONENT dev)
# Doxygen documentation
find_package(Doxygen OPTIONAL_COMPONENTS dot dia)
if(DOXYGEN_FOUND)
set(DOXYGEN_PROJECT_BRIEF "C++14/17-based HTTP application framework")
set(DOXYGEN_OUTPUT_DIRECTORY docs/${PROJECT_NAME})
set(DOXYGEN_GENERATE_LATEX NO)
set(DOXYGEN_BUILTIN_STL_SUPPORT YES)
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE README.md)
set(DOXYGEN_STRIP_FROM_INC_PATH ${PROJECT_SOURCE_DIR}/lib/inc
${PROJECT_SOURCE_DIR}/orm_lib/inc
${CMAKE_CURRENT_BINARY_DIR}/exports)
set(DOXYGEN_EXAMPLE_PATTERNS *)
if(WIN32)
set(DOXYGEN_PREDEFINED _WIN32)
endif(WIN32)
doxygen_add_docs(doc_${PROJECT_NAME}
README.md
README.zh-CN.md
README.zh-TW.md
ChangeLog.md
CONTRIBUTING.md
${DROGON_HEADERS}
${DROGON_UTIL_HEADERS}
${DROGON_PLUGIN_HEADERS}
${ORM_HEADERS}
COMMENT "Generate documentation")
if(NOT TARGET doc)
add_custom_target(doc)
endif()
add_dependencies(doc doc_${PROJECT_NAME})
if (BUILD_DOC)
add_dependencies(${PROJECT_NAME} doc_${PROJECT_NAME})
# Don't install twice, so limit to Debug (assume developer)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs/${PROJECT_NAME}
TYPE DOC
CONFIGURATIONS Debug)
endif(BUILD_DOC)
endif(DOXYGEN_FOUND)
include(cmake/Packages.cmake)
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
**Drogon** is an open source project at its heart and every contribution is
welcome. By participating in this project you agree to stick to common sense and
contribute in an overall positive way.
## Getting Started
1. Fork, then clone the repository: `git clone
git@github.com:your-username/drogon.git`
1. Follow the [official installation steps on
Github](https://drogonframework.github.io/drogon-docs/#/ENG-02-Installation). It’s best to
make sure to have the `drogon_ctl` executable in your shell’s `PATH`
environment variable in case you use a terminal.
Now you can create branches, start adding features & bugfixes to the code, and
[create pull requests](https://github.com/an-tao/drogon/compare).
## Pull Requests
Feel free to [create a pull request](https://github.com/an-tao/drogon/compare)
if you think you can contribute to the project. You will be listed as a
[contributor](https://github.com/an-tao/drogon/graphs/contributors), agree to
this document, and the
[LICENSE](https://github.com/an-tao/drogon/blob/master/LICENSE).
There are also some recommendations you can follow. These aren’t requirements,
but they will make the development more straightforward:
1. If you are unsure about a specific change, have questions, or want to get
feedback about a feature you want to introduce, [open a new
issue](https://github.com/an-tao/drogon/issues) (please make sure that there
is no previous issue about a similar topic).
1. You should branch off the current state of the `master` branch, and also
merge it into your local branch before creating a pull request if there were
other changes introduced in the meantime.
1. You can use the following branch names to make your intent clearer:
* `bugfix/123-fix-template-parser` when you want to fix a bug in the
template parser.
* `feature/123-add-l10n-and-i18n` if you want to add localization (l10n) and
internationalization (i18n) as a new feature to the project.
* If there’s no open issue and no need to open one you can skip the number,
and just use the descriptive part: `bugfix/fix-typo-in-docs`.
1. Write a brief, but good, and descriptive commit message / pull request title in English,
e. g. “Added Internationalization and Localization”.
If you follow these recommendations your pull request will have more success:
1. Keep the style consistent to the project, when in doubt refer to the [Google
C++ Style Guide](https://google.github.io/styleguide/cppguide.html#C++_Version).
1. Please write all comments in English. Comments for new public API introduced by
your pull request must be added and written in [Doxygen](http://www.doxygen.nl/) format.
1. Format the code with `clang-format` (>= 8.0.0). The configuration is already
provided in the `.clang-format` file, just run the `./format.sh` script
before submitting your pull request.
1. Install [Google Test](https://github.com/google/googletest), and write a test
case.
1. In case it is a bugfix, it’s best to write a test that breaks in the old
version, but works in the new one. This way regressions can be tracked
over time.
1. If you add a feature, it is best to write the test as if it would be an
example how to use the newly introduced feature and to test all major,
newly introduced code.
## Project Maintainers & Collaborators
In addition to the guidelines mentioned above, collaborators with write access
to the repository should also follow these guidelines:
1. If there are new tests as part of the pull request, you should make sure that
they succeed.
1. When merging **Pull Requests** you should use the option *Squash & Merge* and
chose a descriptive commit message for the bugfix / feature (if not already
done by the individual contributor).
This way the history in the `master` branch will be free of small
corrections and easier to follow for people who aren’t engaged in the
project on a day-to-day basis.
================================================
FILE: CPPLINT.cfg
================================================
# Stop searching for additional config files.
set noparent
exclude_files=trantor
exclude_files=build
# Use non-const reference rather than a pointer.
filter=-runtime/references
# CHECK macros are from Drogon, not Google Test.
filter=-readability/check
# Don't warn about the use of C++11 or C++17 features.
filter=-build/c++11
filter=-build/c++17
filter=-build/include_subdir
# We prioritize clang-format for now.
filter=-whitespace
# We don't require a username in TODO comments.
filter=-readability/todo
# TODO: Fix these.
filter=-legal/copyright
filter=-build/namespaces
filter=-build/include
filter=-build/include_what_you_use
filter=-runtime/explicit
filter=-runtime/string
filter=-runtime/int
filter=-readability/casting
filter=-readability/braces
filter=-readability/fn_size
filter=-runtime/threadsafe_fn
================================================
FILE: ChangeLog.md
================================================
# Changelog
All notable changes to this project will be documented in this file.
## [Unreleased]
### Added
- dg_ctl create models new command line option --clear-output
## [1.9.12] - 2026-01-26
### API changes list
- Implement when_all coroutine gate.
### Changed
- Models: add toString method.
- changing std::strlen to a string comparison consistent with multibyte chars on model generation templates.
- Enhance error handling in CacheFile methods.
- Mysql exception forward errorNo to SqlError.
- Support unsigned integer types in MySQL ORM.
### Fixed
- Fix errors after database connection interruption.
- Use redisFreeCommand instead of free() function.
- Fix the missing openssl dependency in FindMysql.
- Fix warnings - for range loop no copies, unsigned int always >= 0.
- Fix cross compiling.
- Fix linker errors on mingw64.
- Fix SQL syntax error when UPDATE has no fields to update.
- Fix unused variable warnings.
## [1.9.11] - 2025-06-20
### API changes list
- Add a new overload for execSqlCoro.
### Changed
- Do not write to source directory during build.
- Improve Postgres connection stability.
- Add handleFatalError in handleClosed.
- Add -o|--output option to drogon_ctl create models.
- Add qrcode for WeChat official account to the README file.
- Support for iOS compiling.
- Add cors example to demonstrate cross-origin support in drogon.
- Add support for continuation frame in WebSocketMessageParser.
- Add RawParameter API to pass raw SQL parameters.
- Upgrade Windows image and re-enable tests on Windows.
### Fixed
- Fix a bug in isAutoCreationClass<T>.
- Fix CI on MacOS.
- Fix issue with precision loss of double-type parameters in ORM inputs.
## [1.9.10] - 2025-02-20
### API changes list
- Add setConnectionCallback.
### Changed
- ORM:Avoid unnecessary copies when returning search results.
- Improve the zh-TW README translation.
- Make quit function thread safe.
- Added path_exempt in AccessLogger plugin config to exclude desired paths.
### Fixed
- Fix the issue in view generation by including the missing header file.
- Fix ci: codespell.
## [1.9.9] - 2025-01-01
### API changes list
- Added Partitioned flag for cookies.
### Changed
- Update FindFilesystem.cmake to check for GNU instead of GCC for CMAKE_CXX_COMPILER_ID.
- Update README.
- Chore(workflow/cmake.yml): upgrade macos runner.
- Add emptiness check to the LogStream &operator<< with std::string_view.
### Fixed
- Fix a bug in plugin Redirector.
- Fix CMAKE issues mentioned in #2144 and a linking problem which manifest with gcc12.3 when building with shared libs.
- Fix: Remove dependency on locales being installed on the system.
## [1.9.8] - 2024-10-27
### API changes list
- Add in-place base64 encode and decode.
- Add check the client connection status.
### Changed
- Add Hodor whitelists.
- Include exception header for std::exception_ptr.
- Add support for escaped identifiers in Postgresql.
- Remove content-length header from 101 Switching Protocols response.
- Remove websocketResponseTest from windows shared library env.
- Optimize query params and allow for empty values.
- Replace rejection sampling and remove use of rand().
- Add sending customized http requests to drogon_ctl.
### Fixed
- Fix coroutine continuation handle.
- Fix some bugs in plugin PromExporter.
- Fix a bug after removing content-length header in some responses.
## [1.9.7] - 2024-09-10
### API changes list
- Add coroutine mutex.
- Add requestsBufferSize function.
- Refine SQLite3 error types with new exception handling.
- Add a new method to reload SSL files on the fly.
### Changed
- Allow MultiPartParser to be movable.
- Add quotes to the table name in the ORM generator.
- Change stoi to stoul in the Field class.
- Modernize cookies.
- Change a log level.
### Fixed
- Use correct libraries when compiling statically.
## [1.9.6] - 2024-07-20
### API changes list
- Add setsockopt to HttpServer.
- Support request stream.
### Changed
- Allow MultiPartParser to parse PATCH requests.
- Add an example of prometheus.
- Delay parsing json for HttpClient.
- Update README.md.
### Fixed
- Fix some compilation warnings.
- Fix typo in yaml config.
## [1.9.5] - 2024-06-08
### API changes list
- Fix an error in the yaml format config file.
- Support postgresql connection options.
- Add regex support for websocket controller.
- Add the registerMiddleware method.
### Changed
- Add the conan badge to readme files.
- Install gcc in ci.
- Intention to present an alternative to improve the performance of a method in models.
### Fixed
- Fix an error in the yaml format config file.
- Fix CI on Windows.
- Fix some spelling errors.
## [1.9.4] - 2024-05-04
### API changes list
- Add client cert support for websocket.
- Add JSON send overloads for WebSocket connections.
### Changed
- Minor enhancement: move some smart pointers around instead of copying them.
- Remove the request shared_ptr from the multipart parser.
- Fix typo in HttpAppFrameworkImpl.cc.
- Avoid string copy and lowercasing on every request.
- Implemented database reconnection loop.
### Fixed
- Bypass clang thread_local error.
## [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 advice, 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 advice.
- 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.
-
gitextract_w7tbik7q/
├── .Doxyfile
├── .clang-format
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ └── feature_request.md
│ ├── dependabot.yml
│ └── workflows/
│ ├── cmake.yml
│ ├── codeql.yml
│ ├── codespell.yml
│ ├── cpp.yml
│ └── docker-publish.yml
├── .gitignore
├── .gitmodules
├── CMakeLists.txt
├── CONTRIBUTING.md
├── CPPLINT.cfg
├── ChangeLog.md
├── LICENSE
├── README.md
├── README.zh-CN.md
├── README.zh-TW.md
├── build.sh
├── cmake/
│ ├── DrogonUtilities.cmake
│ ├── Packages.cmake
│ ├── ParseAndAddDrogonTests.cmake
│ ├── templates/
│ │ ├── DrogonConfig.cmake.in
│ │ ├── config.h.in
│ │ └── version.h.in
│ └── tests/
│ ├── check_has_std_filesystem_path.cc
│ ├── normal_uuid_lib_test.cc
│ ├── ossp_uuid_lib_test.cc
│ └── test_libpq_batch_mode.cc
├── cmake_modules/
│ ├── FindBrotli.cmake
│ ├── FindFilesystem.cmake
│ ├── FindHiredis.cmake
│ ├── FindJsoncpp.cmake
│ ├── FindMySQL.cmake
│ ├── FindSQLite3.cmake
│ ├── FindUUID.cmake
│ ├── Findcoz-profiler.cmake
│ └── Findpg.cmake
├── conanfile.txt
├── config.example.json
├── config.example.yaml
├── docker/
│ ├── alpine/
│ │ ├── Dockerfile
│ │ └── README.md
│ ├── arch/
│ │ └── Dockerfile
│ └── ubuntu/
│ └── Dockerfile
├── drogon_ctl/
│ ├── CMakeLists.txt
│ ├── CommandHandler.h
│ ├── CopyDlls.cmake
│ ├── cmd.cc
│ ├── cmd.h
│ ├── create.cc
│ ├── create.h
│ ├── create_controller.cc
│ ├── create_controller.h
│ ├── create_filter.cc
│ ├── create_filter.h
│ ├── create_model.cc
│ ├── create_model.h
│ ├── create_plugin.cc
│ ├── create_plugin.h
│ ├── create_project.cc
│ ├── create_project.h
│ ├── create_view.cc
│ ├── create_view.h
│ ├── help.cc
│ ├── help.h
│ ├── main.cc
│ ├── press.cc
│ ├── press.h
│ ├── templates/
│ │ ├── cmake.csp
│ │ ├── config_json.csp
│ │ ├── config_yaml.csp
│ │ ├── demoMain.csp
│ │ ├── filter_cc.csp
│ │ ├── filter_h.csp
│ │ ├── gitignore.csp
│ │ ├── model_cc.csp
│ │ ├── model_h.csp
│ │ ├── model_json.csp
│ │ ├── plugin_cc.csp
│ │ ├── plugin_h.csp
│ │ ├── restful_controller_base_cc.csp
│ │ ├── restful_controller_base_h.csp
│ │ ├── restful_controller_cc.csp
│ │ ├── restful_controller_custom_cc.csp
│ │ ├── restful_controller_custom_h.csp
│ │ ├── restful_controller_h.csp
│ │ ├── test_cmake.csp
│ │ └── test_main.csp
│ ├── version.cc
│ └── version.h
├── examples/
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── async_stream/
│ │ ├── RequestStreamExampleCtrl.cc
│ │ └── main.cc
│ ├── benchmark/
│ │ ├── BenchmarkCtrl.cc
│ │ ├── BenchmarkCtrl.h
│ │ ├── JsonCtrl.cc
│ │ ├── JsonCtrl.h
│ │ └── main.cc
│ ├── client_example/
│ │ └── main.cc
│ ├── cors/
│ │ └── main.cc
│ ├── file_upload/
│ │ ├── FileUpload.csp
│ │ └── file_upload.cc
│ ├── helloworld/
│ │ ├── HelloController.cc
│ │ ├── HelloView.csp
│ │ ├── HelloViewController.cc
│ │ └── main.cc
│ ├── jsonstore/
│ │ ├── README.md
│ │ └── main.cc
│ ├── login_session/
│ │ ├── LoginPage.csp
│ │ ├── LogoutPage.csp
│ │ └── main.cc
│ ├── prometheus_example/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── config.json
│ │ ├── controllers/
│ │ │ ├── PromTestCtrl.cc
│ │ │ └── PromTestCtrl.h
│ │ ├── filters/
│ │ │ ├── PromStat.cc
│ │ │ └── PromStat.h
│ │ ├── main.cc
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ └── test_main.cc
│ ├── redis/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── controllers/
│ │ │ ├── Client.cc
│ │ │ ├── Client.h
│ │ │ ├── WsClient.cc
│ │ │ └── WsClient.h
│ │ └── main.cc
│ ├── redis_cache/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── DateFuncs.h
│ │ ├── README.md
│ │ ├── RedisCache.h
│ │ ├── config.json
│ │ ├── controllers/
│ │ │ ├── SlowCtrl.cc
│ │ │ └── SlowCtrl.h
│ │ ├── filters/
│ │ │ ├── TimeFilter.cc
│ │ │ └── TimeFilter.h
│ │ ├── main.cc
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ └── test_main.cc
│ ├── redis_chat/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── controllers/
│ │ │ ├── Chat.cc
│ │ │ └── Chat.h
│ │ └── main.cc
│ ├── simple_reverse_proxy/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── config.json
│ │ ├── main.cc
│ │ └── plugins/
│ │ ├── SimpleReverseProxy.cc
│ │ └── SimpleReverseProxy.h
│ ├── websocket_client/
│ │ └── WebSocketClient.cc
│ └── websocket_server/
│ └── WebSocketServer.cc
├── format.sh
├── lib/
│ ├── inc/
│ │ └── drogon/
│ │ ├── Attribute.h
│ │ ├── CacheMap.h
│ │ ├── Cookie.h
│ │ ├── DrClassMap.h
│ │ ├── DrObject.h
│ │ ├── DrTemplate.h
│ │ ├── DrTemplateBase.h
│ │ ├── HttpAppFramework.h
│ │ ├── HttpBinder.h
│ │ ├── HttpClient.h
│ │ ├── HttpController.h
│ │ ├── HttpFilter.h
│ │ ├── HttpMiddleware.h
│ │ ├── HttpRequest.h
│ │ ├── HttpResponse.h
│ │ ├── HttpSimpleController.h
│ │ ├── HttpTypes.h
│ │ ├── HttpViewData.h
│ │ ├── IOThreadStorage.h
│ │ ├── IntranetIpFilter.h
│ │ ├── LocalHostFilter.h
│ │ ├── MultiPart.h
│ │ ├── NotFound.h
│ │ ├── PubSubService.h
│ │ ├── RateLimiter.h
│ │ ├── RequestStream.h
│ │ ├── Session.h
│ │ ├── UploadFile.h
│ │ ├── WebSocketClient.h
│ │ ├── WebSocketConnection.h
│ │ ├── WebSocketController.h
│ │ ├── drogon.h
│ │ ├── drogon_callbacks.h
│ │ ├── drogon_test.h
│ │ ├── plugins/
│ │ │ ├── AccessLogger.h
│ │ │ ├── GlobalFilters.h
│ │ │ ├── Hodor.h
│ │ │ ├── Plugin.h
│ │ │ ├── PromExporter.h
│ │ │ ├── RealIpResolver.h
│ │ │ ├── Redirector.h
│ │ │ ├── SecureSSLRedirector.h
│ │ │ └── SlashRemover.h
│ │ └── utils/
│ │ ├── FunctionTraits.h
│ │ ├── HttpConstraint.h
│ │ ├── OStringStream.h
│ │ ├── Utilities.h
│ │ ├── coroutine.h
│ │ ├── monitoring/
│ │ │ ├── Collector.h
│ │ │ ├── Counter.h
│ │ │ ├── Gauge.h
│ │ │ ├── Histogram.h
│ │ │ ├── Metric.h
│ │ │ ├── Registry.h
│ │ │ ├── Sample.h
│ │ │ └── StopWatch.h
│ │ └── monitoring.h
│ ├── src/
│ │ ├── AOPAdvice.cc
│ │ ├── AOPAdvice.h
│ │ ├── AccessLogger.cc
│ │ ├── CacheFile.cc
│ │ ├── CacheFile.h
│ │ ├── ConfigAdapter.h
│ │ ├── ConfigAdapterManager.cc
│ │ ├── ConfigAdapterManager.h
│ │ ├── ConfigLoader.cc
│ │ ├── ConfigLoader.h
│ │ ├── ControllerBinderBase.h
│ │ ├── Cookie.cc
│ │ ├── DbClientManager.h
│ │ ├── DbClientManagerSkipped.cc
│ │ ├── DrClassMap.cc
│ │ ├── DrTemplateBase.cc
│ │ ├── FixedWindowRateLimiter.cc
│ │ ├── FixedWindowRateLimiter.h
│ │ ├── GlobalFilters.cc
│ │ ├── Histogram.cc
│ │ ├── Hodor.cc
│ │ ├── HttpAppFrameworkImpl.cc
│ │ ├── HttpAppFrameworkImpl.h
│ │ ├── HttpBinder.cc
│ │ ├── HttpClientImpl.cc
│ │ ├── HttpClientImpl.h
│ │ ├── HttpConnectionLimit.cc
│ │ ├── HttpConnectionLimit.h
│ │ ├── HttpControllerBinder.cc
│ │ ├── HttpControllerBinder.h
│ │ ├── HttpControllersRouter.cc
│ │ ├── HttpControllersRouter.h
│ │ ├── HttpFileImpl.cc
│ │ ├── HttpFileImpl.h
│ │ ├── HttpFileUploadRequest.cc
│ │ ├── HttpFileUploadRequest.h
│ │ ├── HttpMessageBody.h
│ │ ├── HttpRequestImpl.cc
│ │ ├── HttpRequestImpl.h
│ │ ├── HttpRequestParser.cc
│ │ ├── HttpRequestParser.h
│ │ ├── HttpResponseImpl.cc
│ │ ├── HttpResponseImpl.h
│ │ ├── HttpResponseParser.cc
│ │ ├── HttpResponseParser.h
│ │ ├── HttpServer.cc
│ │ ├── HttpServer.h
│ │ ├── HttpUtils.cc
│ │ ├── HttpUtils.h
│ │ ├── HttpViewData.cc
│ │ ├── IntranetIpFilter.cc
│ │ ├── JsonConfigAdapter.cc
│ │ ├── JsonConfigAdapter.h
│ │ ├── ListenerManager.cc
│ │ ├── ListenerManager.h
│ │ ├── LocalHostFilter.cc
│ │ ├── MiddlewaresFunction.cc
│ │ ├── MiddlewaresFunction.h
│ │ ├── MultiPart.cc
│ │ ├── MultipartStreamParser.cc
│ │ ├── MultipartStreamParser.h
│ │ ├── NotFound.cc
│ │ ├── PluginsManager.cc
│ │ ├── PluginsManager.h
│ │ ├── PromExporter.cc
│ │ ├── RangeParser.cc
│ │ ├── RangeParser.h
│ │ ├── RateLimiter.cc
│ │ ├── RealIpResolver.cc
│ │ ├── Redirector.cc
│ │ ├── RedisClientManager.h
│ │ ├── RedisClientManagerSkipped.cc
│ │ ├── RedisClientSkipped.cc
│ │ ├── RedisResultSkipped.cc
│ │ ├── RequestStream.cc
│ │ ├── SecureSSLRedirector.cc
│ │ ├── SessionManager.cc
│ │ ├── SessionManager.h
│ │ ├── SharedLibManager.cc
│ │ ├── SharedLibManager.h
│ │ ├── SlashRemover.cc
│ │ ├── SlidingWindowRateLimiter.cc
│ │ ├── SlidingWindowRateLimiter.h
│ │ ├── SpinLock.h
│ │ ├── StaticFileRouter.cc
│ │ ├── StaticFileRouter.h
│ │ ├── TaskTimeoutFlag.cc
│ │ ├── TaskTimeoutFlag.h
│ │ ├── TokenBucketRateLimiter.cc
│ │ ├── TokenBucketRateLimiter.h
│ │ ├── Utilities.cc
│ │ ├── WebSocketClientImpl.cc
│ │ ├── WebSocketClientImpl.h
│ │ ├── WebSocketConnectionImpl.cc
│ │ ├── WebSocketConnectionImpl.h
│ │ ├── YamlConfigAdapter.cc
│ │ ├── YamlConfigAdapter.h
│ │ ├── drogon_test.cc
│ │ └── impl_forwards.h
│ └── tests/
│ ├── CMakeLists.txt
│ ├── CookieSameSite.cc
│ ├── RealIpResolverTest.cc
│ ├── integration_test/
│ │ ├── client/
│ │ │ ├── HttpPipeliningTest.cc
│ │ │ ├── MultipleWsTest.cc
│ │ │ ├── RequestStreamTest.cc
│ │ │ ├── WebSocketTest.cc
│ │ │ └── main.cc
│ │ └── server/
│ │ ├── BeginAdviceTest.cc
│ │ ├── BeginAdviceTest.h
│ │ ├── CoroFilter.cpp
│ │ ├── CoroFilter.h
│ │ ├── CustomCtrl.cc
│ │ ├── CustomCtrl.h
│ │ ├── CustomHeaderFilter.cc
│ │ ├── CustomHeaderFilter.h
│ │ ├── DigestAuthFilter.cc
│ │ ├── DigestAuthFilter.h
│ │ ├── DoNothingPlugin.cc
│ │ ├── DoNothingPlugin.h
│ │ ├── FileUpload.csp
│ │ ├── ForwardCtrl.cc
│ │ ├── ForwardCtrl.h
│ │ ├── JsonTestController.cc
│ │ ├── JsonTestController.h
│ │ ├── ListParaCtl.cc
│ │ ├── ListParaCtl.h
│ │ ├── ListParaView.csp
│ │ ├── MethodTest.cc
│ │ ├── MethodTest.h
│ │ ├── MiddlewareTest.cc
│ │ ├── PipeliningTest.cc
│ │ ├── PipeliningTest.h
│ │ ├── RangeTestController.cc
│ │ ├── RangeTestController.h
│ │ ├── RequestStreamTestCtrl.cc
│ │ ├── TestController.cc
│ │ ├── TestController.h
│ │ ├── TestPlugin.cc
│ │ ├── TestPlugin.h
│ │ ├── TestView.csp
│ │ ├── TestViewCtl.cc
│ │ ├── TestViewCtl.h
│ │ ├── TimeFilter.cc
│ │ ├── TimeFilter.h
│ │ ├── WebSocketTest.cc
│ │ ├── WebSocketTest.h
│ │ ├── a-directory/
│ │ │ └── page.html
│ │ ├── api_Attachment.cc
│ │ ├── api_Attachment.h
│ │ ├── api_v1_ApiTest.cc
│ │ ├── api_v1_ApiTest.h
│ │ ├── api_v1_CoroTest.cc
│ │ ├── api_v1_CoroTest.h
│ │ ├── header.csp
│ │ ├── index.html
│ │ ├── main.cc
│ │ ├── test.md
│ │ └── 中文.txt
│ ├── main_CookieSameSite.cc
│ └── unittests/
│ ├── Base64Test.cc
│ ├── BrotliTest.cc
│ ├── CacheMapTest.cc
│ ├── ClassNameTest.cc
│ ├── ControllerCreationTest.cc
│ ├── CookieTest.cc
│ ├── CoroutineTest.cc
│ ├── DrObjectTest.cc
│ ├── FileTypeTest.cc
│ ├── GzipTest.cc
│ ├── HttpDateTest.cc
│ ├── HttpFileTest.cc
│ ├── HttpFullDateTest.cc
│ ├── HttpHeaderTest.cc
│ ├── HttpViewDataTest.cc
│ ├── MD5Test.cc
│ ├── MainLoopTest.cc
│ ├── MsgBufferTest.cc
│ ├── MultiPartParserTest.cc
│ ├── OStringStreamTest.cc
│ ├── PubSubServiceUnittest.cc
│ ├── Sha1Test.cc
│ ├── SlashRemoverTest.cc
│ ├── StringOpsTest.cc
│ ├── UrlCodecTest.cc
│ ├── UtilitiesTest.cc
│ ├── UuidUnittest.cc
│ ├── WebsocketResponseTest.cc
│ └── main.cc
├── nosql_lib/
│ └── redis/
│ ├── inc/
│ │ └── drogon/
│ │ └── nosql/
│ │ ├── RedisClient.h
│ │ ├── RedisException.h
│ │ ├── RedisResult.h
│ │ └── RedisSubscriber.h
│ ├── src/
│ │ ├── RedisClientImpl.cc
│ │ ├── RedisClientImpl.h
│ │ ├── RedisClientLockFree.cc
│ │ ├── RedisClientLockFree.h
│ │ ├── RedisClientManager.cc
│ │ ├── RedisConnection.cc
│ │ ├── RedisConnection.h
│ │ ├── RedisResult.cc
│ │ ├── RedisSubscriberImpl.cc
│ │ ├── RedisSubscriberImpl.h
│ │ ├── RedisTransactionImpl.cc
│ │ ├── RedisTransactionImpl.h
│ │ ├── SubscribeContext.cc
│ │ └── SubscribeContext.h
│ └── tests/
│ ├── CMakeLists.txt
│ ├── redis_subscriber_test.cc
│ └── redis_test.cc
├── orm_lib/
│ ├── COPYING
│ ├── inc/
│ │ └── drogon/
│ │ └── orm/
│ │ ├── ArrayParser.h
│ │ ├── BaseBuilder.h
│ │ ├── CoroMapper.h
│ │ ├── Criteria.h
│ │ ├── DbClient.h
│ │ ├── DbConfig.h
│ │ ├── DbListener.h
│ │ ├── DbTypes.h
│ │ ├── Exception.h
│ │ ├── Field.h
│ │ ├── FilterBuilder.h
│ │ ├── FunctionTraits.h
│ │ ├── Mapper.h
│ │ ├── QueryBuilder.h
│ │ ├── RestfulController.h
│ │ ├── Result.h
│ │ ├── ResultIterator.h
│ │ ├── Row.h
│ │ ├── RowIterator.h
│ │ ├── SqlBinder.h
│ │ └── TransformBuilder.h
│ ├── src/
│ │ ├── ArrayParser.cc
│ │ ├── Criteria.cc
│ │ ├── DbClient.cc
│ │ ├── DbClientImpl.cc
│ │ ├── DbClientImpl.h
│ │ ├── DbClientLockFree.cc
│ │ ├── DbClientLockFree.h
│ │ ├── DbClientManager.cc
│ │ ├── DbConnection.cc
│ │ ├── DbConnection.h
│ │ ├── DbListener.cc
│ │ ├── Exception.cc
│ │ ├── Field.cc
│ │ ├── RestfulController.cc
│ │ ├── Result.cc
│ │ ├── ResultImpl.h
│ │ ├── Row.cc
│ │ ├── SqlBinder.cc
│ │ ├── TransactionImpl.cc
│ │ ├── TransactionImpl.h
│ │ ├── mysql_impl/
│ │ │ ├── MysqlConnection.cc
│ │ │ ├── MysqlConnection.h
│ │ │ ├── MysqlResultImpl.cc
│ │ │ ├── MysqlResultImpl.h
│ │ │ └── test/
│ │ │ ├── CMakeLists.txt
│ │ │ └── test1.cc
│ │ ├── postgresql_impl/
│ │ │ ├── PgBatchConnection.cc
│ │ │ ├── PgConnection.cc
│ │ │ ├── PgConnection.h
│ │ │ ├── PgListener.cc
│ │ │ ├── PgListener.h
│ │ │ ├── PostgreSQLResultImpl.cc
│ │ │ ├── PostgreSQLResultImpl.h
│ │ │ └── test/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── test1.cc
│ │ │ └── test2.cc
│ │ └── sqlite3_impl/
│ │ ├── Sqlite3Connection.cc
│ │ ├── Sqlite3Connection.h
│ │ ├── Sqlite3ResultImpl.cc
│ │ ├── Sqlite3ResultImpl.h
│ │ └── test/
│ │ ├── CMakeLists.txt
│ │ ├── Groups.cc
│ │ ├── Groups.h
│ │ └── test1.cc
│ └── tests/
│ ├── CMakeLists.txt
│ ├── conn_options_test.cc
│ ├── db_api_test.cc
│ ├── db_listener_test.cc
│ ├── db_test.cc
│ ├── mysql/
│ │ ├── Blog.cc
│ │ ├── Blog.h
│ │ ├── BlogTag.cc
│ │ ├── BlogTag.h
│ │ ├── Category.cc
│ │ ├── Category.h
│ │ ├── Tag.cc
│ │ ├── Tag.h
│ │ ├── Users.cc
│ │ ├── Users.h
│ │ ├── Wallets.cc
│ │ ├── Wallets.h
│ │ └── model.json
│ ├── pipeline_test.cpp
│ ├── postgresql/
│ │ ├── Blog.cc
│ │ ├── Blog.h
│ │ ├── BlogTag.cc
│ │ ├── BlogTag.h
│ │ ├── Category.cc
│ │ ├── Category.h
│ │ ├── Tag.cc
│ │ ├── Tag.h
│ │ ├── Users.cc
│ │ ├── Users.h
│ │ ├── Wallets.cc
│ │ ├── Wallets.h
│ │ └── model.json
│ └── sqlite3/
│ ├── Blog.cc
│ ├── Blog.h
│ ├── BlogTag.cc
│ ├── BlogTag.h
│ ├── Category.cc
│ ├── Category.h
│ ├── Tag.cc
│ ├── Tag.h
│ ├── Users.cc
│ ├── Users.h
│ ├── Wallets.cc
│ ├── Wallets.h
│ └── model.json
├── package.xml
├── test.sh
└── third_party/
└── mman-win32/
├── README.md
├── UpgradeLog.htm
├── mman.c
├── mman.h
└── test.c
SYMBOL INDEX (1098 symbols across 347 files)
FILE: cmake/tests/check_has_std_filesystem_path.cc
function main (line 3) | int main()
FILE: cmake/tests/normal_uuid_lib_test.cc
function main (line 2) | int main()
FILE: cmake/tests/ossp_uuid_lib_test.cc
function main (line 2) | int main()
FILE: cmake/tests/test_libpq_batch_mode.cc
function main (line 3) | int main()
FILE: drogon_ctl/CommandHandler.h
function class (line 21) | class CommandHandler : public virtual drogon::DrObjectBase
FILE: drogon_ctl/cmd.cc
function exeCommand (line 21) | void exeCommand(std::vector<std::string> ¶meters)
FILE: drogon_ctl/create.h
function namespace (line 21) | namespace drogon_ctl
FILE: drogon_ctl/create_controller.h
function namespace (line 22) | namespace drogon_ctl
FILE: drogon_ctl/create_filter.cc
function createFilterHeaderFile (line 32) | static void createFilterHeaderFile(std::ofstream &file,
function createFilterSourceFile (line 53) | static void createFilterSourceFile(std::ofstream &file,
FILE: drogon_ctl/create_filter.h
function namespace (line 21) | namespace drogon_ctl
FILE: drogon_ctl/create_model.cc
function toLower (line 40) | static std::string toLower(const std::string &str)
function escapeConnString (line 49) | static std::string escapeConnString(const std::string &str)
function getConvertMethods (line 80) | static std::map<std::string, std::vector<ConvertMethod>> getConvertMethods(
function getRelationships (line 116) | static std::map<std::string, std::vector<Relationship>> getRelationships(
FILE: drogon_ctl/create_model.h
type ColumnInfo (line 31) | struct ColumnInfo
function index_ (line 40) | size_t index_{0}
function hasDefaultVal_ (line 44) | bool hasDefaultVal_{false};
function std (line 47) | inline std::string nameTransform(const std::string &origName, bool isType)
function class (line 84) | class PivotTable
function class (line 138) | class ConvertMethod
function class (line 211) | class Relationship
function enableReverse_ (line 360) | bool enableReverse_{false};
function forceOverwrite_ (line 431) | bool forceOverwrite_{false};
FILE: drogon_ctl/create_plugin.cc
function createPluginHeaderFile (line 32) | static void createPluginHeaderFile(std::ofstream &file,
function createPluginSourceFile (line 53) | static void createPluginSourceFile(std::ofstream &file,
FILE: drogon_ctl/create_plugin.h
function namespace (line 21) | namespace drogon_ctl
FILE: drogon_ctl/create_project.cc
function newCmakeFile (line 42) | static void newCmakeFile(std::ofstream &cmakeFile,
function newMainFile (line 51) | static void newMainFile(std::ofstream &mainFile)
function newGitIgFile (line 57) | static void newGitIgFile(std::ofstream &gitFile)
function newConfigJsonFile (line 63) | static void newConfigJsonFile(std::ofstream &configJsonFile)
function newConfigYamlFile (line 69) | static void newConfigYamlFile(std::ofstream &configYamlFile)
function newModelConfigFile (line 75) | static void newModelConfigFile(std::ofstream &configFile)
function newTestMainFile (line 81) | static void newTestMainFile(std::ofstream &mainFile)
function newTestCmakeFile (line 87) | static void newTestCmakeFile(std::ofstream &testCmakeFile,
FILE: drogon_ctl/create_project.h
function namespace (line 20) | namespace drogon_ctl
FILE: drogon_ctl/create_view.cc
function parseCxxLine (line 57) | static void parseCxxLine(std::ofstream &oSrcFile,
function outputVal (line 71) | static void outputVal(std::ofstream &oSrcFile,
function outputSubView (line 91) | static void outputSubView(std::ofstream &oSrcFile,
function parseLine (line 106) | static void parseLine(std::ofstream &oSrcFile,
FILE: drogon_ctl/create_view.h
function pathToNamespaceFlag_ (line 36) | bool pathToNamespaceFlag_{false};
FILE: drogon_ctl/help.h
function namespace (line 21) | namespace drogon_ctl
FILE: drogon_ctl/main.cc
function main (line 20) | int main(int argc, char *argv[])
FILE: drogon_ctl/press.cc
function outputErrorAndExit (line 46) | void outputErrorAndExit(const std::string_view &err)
FILE: drogon_ctl/press.h
function namespace (line 31) | namespace drogon_ctl
function isTopCommand (line 55) | bool isTopCommand() override
function numOfRequests_ (line 64) | size_t numOfRequests_{1}
function numOfConnections_ (line 65) | size_t numOfConnections_{1}
function certValidation_ (line 68) | bool certValidation_{true};
FILE: drogon_ctl/version.h
function namespace (line 21) | namespace drogon_ctl
FILE: examples/async_stream/RequestStreamExampleCtrl.cc
class StreamEchoReader (line 8) | class StreamEchoReader : public RequestStreamReader
method StreamEchoReader (line 11) | StreamEchoReader(ResponseStreamPtr respStream)
method onStreamData (line 16) | void onStreamData(const char *data, size_t length) override
method onStreamFinish (line 22) | void onStreamFinish(std::exception_ptr ptr) override
class RequestStreamExampleCtrl (line 46) | class RequestStreamExampleCtrl : public HttpController<RequestStreamExam...
method METHOD_LIST_END (line 54) | METHOD_LIST_END
method stream_upload (line 69) | void stream_upload(
FILE: examples/async_stream/main.cc
function main (line 17) | int main()
FILE: examples/benchmark/BenchmarkCtrl.h
function class (line 5) | class BenchmarkCtrl : public drogon::HttpSimpleController<BenchmarkCtrl>
FILE: examples/benchmark/JsonCtrl.h
function class (line 5) | class JsonCtrl : public drogon::HttpSimpleController<JsonCtrl>
FILE: examples/benchmark/main.cc
function main (line 5) | int main()
FILE: examples/client_example/main.cc
function main (line 15) | int main()
FILE: examples/cors/main.cc
function setupCors (line 13) | void setupCors()
function main (line 110) | int main()
FILE: examples/file_upload/file_upload.cc
function main (line 4) | int main()
FILE: examples/helloworld/HelloController.cc
class SayHello (line 6) | class SayHello : public HttpController<SayHello>
method METHOD_LIST_END (line 18) | METHOD_LIST_END
method personalizedHello (line 31) | void personalizedHello(
FILE: examples/helloworld/HelloViewController.cc
class HelloViewController (line 10) | class HelloViewController : public HttpSimpleController<HelloViewControl...
method PATH_LIST_END (line 18) | PATH_LIST_END
FILE: examples/helloworld/main.cc
function main (line 12) | int main()
FILE: examples/jsonstore/main.cc
function HttpResponsePtr (line 5) | HttpResponsePtr makeFailedResponse()
function HttpResponsePtr (line 14) | HttpResponsePtr makeSuccessResponse()
function getRandomString (line 22) | std::string getRandomString(size_t n)
type DataItem (line 36) | struct DataItem
function METHOD_LIST_END (line 51) | METHOD_LIST_END
function getItem (line 63) | void getItem(const HttpRequestPtr &,
function updateItem (line 101) | void updateItem(const HttpRequestPtr &req,
function createItem (line 140) | void createItem(const HttpRequestPtr &req,
function deleteItem (line 166) | void deleteItem(const HttpRequestPtr &,
function main (line 211) | int main()
FILE: examples/login_session/main.cc
function main (line 6) | int main()
FILE: examples/prometheus_example/controllers/PromTestCtrl.h
function class (line 8) | class PromTestCtrl : public drogon::HttpController<PromTestCtrl>
FILE: examples/prometheus_example/filters/PromStat.h
function class (line 13) | class PromStat : public HttpCoroMiddleware<PromStat>
FILE: examples/prometheus_example/main.cc
function main (line 3) | int main()
FILE: examples/prometheus_example/test/test_main.cc
function DROGON_TEST (line 5) | DROGON_TEST(BasicTest)
function main (line 10) | int main(int argc, char **argv)
FILE: examples/redis/controllers/Client.h
function class (line 5) | class Client : public drogon::HttpController<Client>
FILE: examples/redis/controllers/WsClient.cc
type ClientContext (line 6) | struct ClientContext
FILE: examples/redis/controllers/WsClient.h
function class (line 7) | class WsClient : public drogon::WebSocketController<WsClient>
FILE: examples/redis/main.cc
function main (line 3) | int main()
FILE: examples/redis_cache/controllers/SlowCtrl.h
function class (line 5) | class SlowCtrl : public drogon::HttpController<SlowCtrl>
FILE: examples/redis_cache/filters/TimeFilter.h
function class (line 10) | class TimeFilter : public drogon::HttpFilter<TimeFilter>
FILE: examples/redis_cache/main.cc
function main (line 3) | int main()
FILE: examples/redis_cache/test/test_main.cc
function DROGON_TEST (line 5) | DROGON_TEST(BasicTest)
function main (line 10) | int main(int argc, char **argv)
FILE: examples/redis_chat/controllers/Chat.cc
type ClientContext (line 12) | struct ClientContext
function checkRoomNumber (line 20) | static bool checkRoomNumber(const std::string &room)
function redisLogin (line 220) | static void redisLogin(std::function<void(int)> &&callback,
function redisLogout (line 245) | static void redisLogout(std::function<void(int)> &&callback,
FILE: examples/redis_chat/main.cc
function main (line 3) | int main()
FILE: examples/simple_reverse_proxy/main.cc
function main (line 3) | int main()
FILE: examples/simple_reverse_proxy/plugins/SimpleReverseProxy.h
function namespace (line 14) | namespace my_plugin
FILE: examples/websocket_client/WebSocketClient.cc
function main (line 9) | int main(int argc, char *argv[])
FILE: examples/websocket_server/WebSocketServer.cc
class WebSocketChat (line 6) | class WebSocketChat : public drogon::WebSocketController<WebSocketChat>
type Subscriber (line 23) | struct Subscriber
function main (line 70) | int main()
FILE: lib/inc/drogon/Attribute.h
function namespace (line 22) | namespace drogon
FILE: lib/inc/drogon/CacheMap.h
function namespace (line 34) | namespace drogon
function MapValue (line 224) | MapValue v{std::move(value), timeout, std::move(timeoutCallback)}
function MapValue (line 231) | MapValue v{std::move(value)}
function MapValue (line 256) | MapValue v{value, timeout, std::move(timeoutCallback)}
function MapValue (line 263) | MapValue v{value};
function T2 (line 280) | T2 operator[](const T1 &key)
function MapValue (line 326) | MapValue v{T2(), timeout};
function find (line 339) | bool find(const T1 &key)
function findAndFetch (line 363) | bool findAndFetch(const T1 &key, T2 &value)
function erase (line 387) | void erase(const T1 &key)
function runAfter (line 417) | void runAfter(size_t delay, std::function<void()> &&task)
function runAfter (line 423) | void runAfter(size_t delay, const std::function<void()> &task)
type ControlBlock (line 439) | struct ControlBlock
function noWheels_ (line 468) | bool noWheels_{false};
FILE: lib/inc/drogon/Cookie.h
type class (line 45) | enum class
function setExpiresDate (line 58) | void setExpiresDate(const trantor::Date &date)
function setHttpOnly (line 66) | void setHttpOnly(bool only)
function setSecure (line 74) | void setSecure(bool secure)
function setDomain (line 82) | void setDomain(const std::string &domain)
function setDomain (line 90) | void setDomain(std::string &&domain)
function setPath (line 98) | void setPath(const std::string &path)
function setPath (line 106) | void setPath(std::string &&path)
function setKey (line 114) | void setKey(const std::string &key)
function setKey (line 122) | void setKey(std::string &&key)
function setValue (line 130) | void setValue(const std::string &value)
function setValue (line 138) | void setValue(std::string &&value)
function setMaxAge (line 146) | void setMaxAge(int value)
function setSameSite (line 154) | void setSameSite(SameSite sameSite)
function setPartitioned (line 162) | void setPartitioned(bool partitioned)
function str1Len (line 356) | auto str1Len{str1.length()};
function SameSite (line 376) | static SameSite convertString2SameSite(std::string_view sameSite)
function std (line 399) | static std::string_view convertSameSite2String(SameSite sameSite)
function partitioned_ (line 420) | bool partitioned_{false};
FILE: lib/inc/drogon/DrClassMap.h
function namespace (line 32) | namespace drogon
FILE: lib/inc/drogon/DrObject.h
function namespace (line 27) | namespace drogon
FILE: lib/inc/drogon/DrTemplate.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/DrTemplateBase.h
function namespace (line 23) | namespace drogon
FILE: lib/inc/drogon/HttpAppFramework.h
function namespace (line 56) | namespace drogon
function virtual (line 787) | virtual std::vector<HttpHandlerInfo> getHandlersInfo() const = 0;
FILE: lib/inc/drogon/HttpBinder.h
function T (line 82) | T value{T()};
function else (line 90) | else if constexpr (internal::CanConvertFromString<T>::value)
function p (line 110) | int>(std::string &&p)
function p (line 116) | inline long getHandlerArgumentValue<long>(std::string &&p)
function p (line 122) | inline long long getHandlerArgumentValue<long long>(std::string &&p)
function p (line 128) | inline unsigned long getHandlerArgumentValue<unsigned long>(std::string ...
function p (line 134) | inline unsigned long long getHandlerArgumentValue<unsigned long long>(
function p (line 141) | float>(std::string &&p)
function p (line 147) | double>(std::string &&p)
function p (line 153) | long double>(std::string &&p)
function class (line 158) | class HttpBinderBase
function handleHttpRequest (line 199) | void handleHttpRequest(
FILE: lib/inc/drogon/HttpClient.h
function namespace (line 34) | namespace drogon
FILE: lib/inc/drogon/HttpController.h
function namespace (line 41) | namespace drogon
FILE: lib/inc/drogon/HttpFilter.h
function namespace (line 28) | namespace drogon
function doFilter (line 96) | void doFilter(const HttpRequestPtr &req,
FILE: lib/inc/drogon/HttpMiddleware.h
function namespace (line 27) | namespace drogon
FILE: lib/inc/drogon/HttpRequest.h
function namespace (line 35) | namespace drogon
function class (line 80) | class DROGON_EXPORT HttpRequest
function virtual (line 166) | virtual const SafeStringMap<std::string> &headers() const = 0;
function virtual (line 198) | virtual const std::string &query() const = 0;
function virtual (line 221) | virtual size_t bodyLength() const = 0;
function virtual (line 256) | virtual const std::vector<std::string> &getRoutingParameters() const = 0;
function virtual (line 278) | virtual Version version() const = 0;
function virtual (line 352) | virtual const trantor::InetAddress &peerAddr() const = 0;
function setContentTypeString (line 442) | void setContentTypeString(const std::string_view &typeString)
function virtual (line 504) | virtual bool isOnSecureConnection() const noexcept = 0;
function Json (line 519) | const Json::Value &pJson)
function HttpRequestPtr (line 525) | inline HttpRequestPtr toRequest(Json::Value &&pJson)
function std (line 531) | inline std::shared_ptr<Json::Value> fromRequest(const HttpRequest &req)
FILE: lib/inc/drogon/HttpResponse.h
function namespace (line 31) | namespace drogon
function class (line 74) | class DROGON_EXPORT ResponseStream
FILE: lib/inc/drogon/HttpSimpleController.h
function namespace (line 30) | namespace drogon
FILE: lib/inc/drogon/HttpTypes.h
function namespace (line 22) | namespace drogon
FILE: lib/inc/drogon/HttpViewData.h
function namespace (line 29) | namespace drogon
FILE: lib/inc/drogon/IOThreadStorage.h
function namespace (line 24) | namespace drogon
function trantor (line 158) | inline trantor::EventLoop *getIOThreadStorageLoop(size_t index) noexcept...
FILE: lib/inc/drogon/IntranetIpFilter.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/LocalHostFilter.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/MultiPart.h
function namespace (line 26) | namespace drogon
FILE: lib/inc/drogon/NotFound.h
function namespace (line 21) | namespace drogon
FILE: lib/inc/drogon/PubSubService.h
function namespace (line 25) | namespace drogon
FILE: lib/inc/drogon/RateLimiter.h
function namespace (line 8) | namespace drogon
FILE: lib/inc/drogon/RequestStream.h
function namespace (line 21) | namespace drogon
FILE: lib/inc/drogon/Session.h
function insert (line 155) | void insert(const std::string &key, const std::any &obj)
function insert (line 169) | void insert(const std::string &key, std::any &&obj)
function erase (line 178) | void erase(const std::string &key)
function find (line 187) | bool find(const std::string &key)
function clear (line 200) | void clear()
function changeSessionIdToClient (line 220) | void changeSessionIdToClient()
function needToSet_ (line 232) | bool needToSet_{false};
FILE: lib/inc/drogon/UploadFile.h
function namespace (line 18) | namespace drogon
FILE: lib/inc/drogon/WebSocketClient.h
function namespace (line 29) | namespace drogon
function await_suspend (line 234) | inline void internal::WebSocketConnectionAwaiter::await_suspend(
FILE: lib/inc/drogon/WebSocketConnection.h
function namespace (line 25) | namespace drogon
FILE: lib/inc/drogon/WebSocketController.h
function namespace (line 35) | namespace drogon
FILE: lib/inc/drogon/drogon_callbacks.h
function namespace (line 21) | namespace drogon
FILE: lib/inc/drogon/drogon_test.h
function namespace (line 18) | namespace drogon
function ref_ (line 174) | Lhs(const T &lhs) : ref_(lhs)
type Decomposer (line 260) | struct Decomposer
function ThreadSafeStream (line 271) | ThreadSafeStream final
function class (line 297) | class CaseBase : public trantor::NonCopyable
function class (line 352) | class Case : public CaseBase
function CaseBase (line 372) | struct TestCase : public CaseBase
FILE: lib/inc/drogon/plugins/AccessLogger.h
function logIndex_ (line 119) | int logIndex_{0}
function showMicroseconds_ (line 121) | bool showMicroseconds_{true};
FILE: lib/inc/drogon/plugins/GlobalFilters.h
function namespace (line 9) | namespace drogon
FILE: lib/inc/drogon/plugins/Hodor.h
type LimitStrategy (line 117) | struct LimitStrategy
function multiThreads_ (line 134) | bool multiThreads_{true};
FILE: lib/inc/drogon/plugins/Plugin.h
function namespace (line 22) | namespace drogon
FILE: lib/inc/drogon/plugins/PromExporter.h
function namespace (line 21) | namespace drogon
FILE: lib/inc/drogon/plugins/RealIpResolver.h
function namespace (line 14) | namespace drogon
FILE: lib/inc/drogon/plugins/Redirector.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/plugins/SecureSSLRedirector.h
function namespace (line 14) | namespace drogon
FILE: lib/inc/drogon/plugins/SlashRemover.h
function namespace (line 20) | namespace drogon::plugin
FILE: lib/inc/drogon/utils/FunctionTraits.h
function namespace (line 28) | namespace drogon
function std (line 137) | static const std::string name()
function std (line 157) | static const std::string name()
function std (line 173) | static const std::string name()
FILE: lib/inc/drogon/utils/HttpConstraint.h
function ConstraintType (line 24) | enum class ConstraintType
FILE: lib/inc/drogon/utils/OStringStream.h
function namespace (line 20) | namespace drogon
function class (line 37) | class OStringStream
FILE: lib/inc/drogon/utils/Utilities.h
type tm (line 35) | struct tm
type tm (line 36) | struct tm
function namespace (line 38) | namespace drogon
function namespace (line 76) | namespace utils
function base64DecodedLength (line 192) | constexpr size_t base64DecodedLength(size_t inLen)
function std (line 204) | inline std::string base64Decode(std::string_view encodedString)
function std (line 223) | inline std::string urlDecode(const std::string &szToDecode)
function std (line 229) | inline std::string urlDecode(const std::string_view &szToDecode)
function std (line 241) | inline std::string getMd5(const std::string &originalString)
function std (line 248) | inline std::string getSha1(const std::string &originalString)
function std (line 255) | inline std::string getSha256(const std::string &originalString)
function std (line 262) | inline std::string getSha3(const std::string &originalString)
function std (line 269) | inline std::string getBlake2b(const std::string &originalString)
function std (line 341) | inline std::string fromWidePath(const std::wstring &strPath)
function std (line 365) | inline std::wstring toWidePath(const std::string &strUtf8Path)
function std (line 385) | inline std::wstring toNativePath(const std::string &strPath)
function std (line 390) | inline const std::wstring &toNativePath(const std::wstring &strPath)
function std (line 395) | inline const std::string &toNativePath(const std::string &strPath)
function std (line 400) | inline std::string toNativePath(const std::wstring &strPath)
function std (line 422) | inline const std::string &fromNativePath(const std::string &strPath)
function std (line 428) | inline std::string fromNativePath(const std::wstring &strPath)
function else (line 492) | else if constexpr (std::is_floating_point<T>::value)
function else (line 505) | else if constexpr (internal::CanConvertFromStringStream<T>::value)
function noexcept (line 536) | bool>(const std::string &p) noexcept(false)
function namespace (line 559) | namespace internal
FILE: lib/inc/drogon/utils/coroutine.h
function namespace (line 30) | namespace drogon
function await_suspend (line 95) | struct final_awaiter
function await_resume (line 108) | void await_resume() noexcept
function await_ready (line 131) | bool await_ready() noexcept
function noexcept (line 136) | auto await_suspend(std::coroutine_handle<> handle) noexcept
function result (line 142) | auto await_resume()
type promise_type (line 162) | struct promise_type
function coro_ (line 165) | Task(handle_type h) : coro_(h)
function initial_suspend (line 197) | struct promise_type
function return_value (line 209) | void return_value(const T &v)
function return_value (line 214) | void return_value(T &&v)
function noexcept (line 219) | auto final_suspend() noexcept
function unhandled_exception (line 224) | void unhandled_exception()
function setContinuation (line 245) | void setContinuation(std::coroutine_handle<> handle)
function operator (line 255) | auto operator co_await() const noexcept
function return_void (line 313) | void return_void()
function noexcept (line 317) | auto final_suspend() noexcept
function unhandled_exception (line 322) | void unhandled_exception()
function result (line 327) | void result()
function setContinuation (line 333) | void setContinuation(std::coroutine_handle<> handle)
function operator (line 342) | auto operator co_await() const noexcept
function unhandled_exception (line 397) | void unhandled_exception()
function return_void (line 403) | void return_void() noexcept
function await_ready (line 422) | bool await_ready() noexcept
function T (line 432) | const T &await_resume() const noexcept(false)
function setValue (line 457) | void setValue(const T &v)
function setValue (line 462) | void setValue(T &&v)
type CallbackAwaiter (line 469) | struct CallbackAwaiter
function await_ready (line 471) | bool await_ready() noexcept
function await_resume (line 476) | void await_resume() noexcept(false)
function task (line 512) | auto task = [&]() -> AsyncTask {
function namespace (line 588) | namespace internal
function await_suspend (line 625) | void await_suspend(std::coroutine_handle<> handle)
function explicit (line 655) | explicit SwitchThreadAwaiter(trantor::EventLoop *loop) : loop_(loop)
function await_suspend (line 659) | void await_suspend(std::coroutine_handle<> handle)
function await_suspend (line 675) | void await_suspend(std::coroutine_handle<> handle)
function internal (line 686) | inline internal::TimerAwaiter sleepCoro(
function internal (line 694) | inline internal::TimerAwaiter sleepCoro(trantor::EventLoop *loop,
function internal (line 710) | inline internal::SwitchThreadAwaiter switchThreadCoro(
function internal (line 717) | inline internal::EndAwaiter untilQuit(trantor::EventLoop *loop)
type is_resumable (line 737) | struct is_resumable
function functor (line 752) | auto functor = [](CoroValueType coro) -> AsyncTask {
function namespace (line 776) | namespace internal
function await_suspend (line 898) | void await_suspend(std::coroutine_handle<> handle)
function await_suspend (line 952) | void await_suspend(std::coroutine_handle<> handle)
function class (line 1002) | class Mutex final
function internal (line 1191) | inline internal::WhenAllAwaiter<std::vector<Task<void>>> when_all(
FILE: lib/inc/drogon/utils/monitoring/Collector.h
function namespace (line 28) | namespace drogon
function override (line 86) | const override
FILE: lib/inc/drogon/utils/monitoring/Counter.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/utils/monitoring/Gauge.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/utils/monitoring/Histogram.h
function namespace (line 23) | namespace drogon
function std (line 94) | static std::string_view type()
function timeBucketCount_ (line 106) | size_t timeBucketCount_{0};
FILE: lib/inc/drogon/utils/monitoring/Metric.h
function namespace (line 23) | namespace drogon
FILE: lib/inc/drogon/utils/monitoring/Registry.h
function namespace (line 18) | namespace drogon
FILE: lib/inc/drogon/utils/monitoring/Sample.h
function namespace (line 20) | namespace drogon
FILE: lib/inc/drogon/utils/monitoring/StopWatch.h
function namespace (line 20) | namespace drogon
FILE: lib/src/AOPAdvice.cc
type drogon (line 20) | namespace drogon
function HttpResponsePtr (line 56) | HttpResponsePtr AopAdvice::passSyncAdvices(const HttpRequestPtr &req) ...
function doAdviceChain (line 164) | static void doAdviceChain(
FILE: lib/src/AOPAdvice.h
function namespace (line 22) | namespace drogon
FILE: lib/src/CacheFile.h
function append (line 30) | void append(const std::string &data)
function autoDelete_ (line 48) | bool autoDelete_{true};
FILE: lib/src/ConfigAdapter.h
function namespace (line 8) | namespace drogon
FILE: lib/src/ConfigAdapterManager.cc
function ConfigAdapterManager (line 18) | ConfigAdapterManager &ConfigAdapterManager::instance()
FILE: lib/src/ConfigAdapterManager.h
function namespace (line 6) | namespace drogon
FILE: lib/src/ConfigLoader.cc
function bytesSize (line 43) | static bool bytesSize(std::string &sizeStr, size_t &size)
function loadLogSetting (line 157) | static void loadLogSetting(const Json::Value &log)
function loadControllers (line 189) | static void loadControllers(const Json::Value &controllers)
function loadApp (line 246) | static void loadApp(const Json::Value &app)
function loadDbClients (line 532) | static void loadDbClients(const Json::Value &dbClients)
function loadRedisClients (line 600) | static void loadRedisClients(const Json::Value &redisClients)
function loadListeners (line 642) | static void loadListeners(const Json::Value &listeners)
function loadSSL (line 676) | static void loadSSL(const Json::Value &sslConf)
FILE: lib/src/ConfigLoader.h
function namespace (line 21) | namespace drogon
FILE: lib/src/ControllerBinderBase.h
function namespace (line 24) | namespace drogon
FILE: lib/src/DbClientManager.h
function namespace (line 26) | namespace drogon
FILE: lib/src/DrClassMap.cc
type drogon (line 21) | namespace drogon
type internal (line 23) | namespace internal
function DrObjectBase (line 51) | DrObjectBase *DrClassMap::newObject(const std::string &className)
FILE: lib/src/FixedWindowRateLimiter.h
function namespace (line 6) | namespace drogon
FILE: lib/src/HttpAppFrameworkImpl.cc
type drogon (line 99) | namespace drogon
function getVersion (line 101) | std::string getVersion()
function getGitCommit (line 106) | std::string getGitCommit()
function HttpResponsePtr (line 111) | HttpResponsePtr defaultErrorHandler(HttpStatusCode code, const HttpReq...
function defaultExceptionHandler (line 116) | void defaultExceptionHandler(
function godaemon (line 130) | static void godaemon()
function TERMFunction (line 168) | static void TERMFunction(int sig)
function HttpAppFramework (line 193) | HttpAppFramework &HttpAppFrameworkImpl::setStaticFilesCacheTime(int cach...
function HttpAppFramework (line 204) | HttpAppFramework &HttpAppFrameworkImpl::setGzipStatic(bool useGzipStatic)
function HttpAppFramework (line 210) | HttpAppFramework &HttpAppFrameworkImpl::setBrStatic(bool useGzipStatic)
function HttpAppFramework (line 216) | HttpAppFramework &HttpAppFrameworkImpl::setImplicitPageEnable(
function HttpAppFramework (line 228) | HttpAppFramework &HttpAppFrameworkImpl::setImplicitPage(
function HttpAppFramework (line 240) | HttpAppFramework &HttpAppFrameworkImpl::enableDynamicViewsLoading(
function HttpAppFramework (line 278) | HttpAppFramework &HttpAppFrameworkImpl::setFileTypes(
function HttpAppFramework (line 285) | HttpAppFramework &HttpAppFrameworkImpl::registerWebSocketController(
function HttpAppFramework (line 297) | HttpAppFramework &HttpAppFrameworkImpl::registerWebSocketControllerRegex(
function HttpAppFramework (line 308) | HttpAppFramework &HttpAppFrameworkImpl::registerHttpSimpleController(
function HttpAppFramework (line 348) | HttpAppFramework &HttpAppFrameworkImpl::setThreadNum(size_t threadNum)
function PluginBase (line 359) | PluginBase *HttpAppFrameworkImpl::getPlugin(const std::string &name)
function HttpAppFramework (line 400) | HttpAppFramework &HttpAppFrameworkImpl::addListener(
function HttpAppFramework (line 415) | HttpAppFramework &HttpAppFrameworkImpl::setMaxConnectionNum(
function HttpAppFramework (line 422) | HttpAppFramework &HttpAppFrameworkImpl::setMaxConnectionNumPerIP(
function HttpAppFramework (line 430) | HttpAppFramework &HttpAppFrameworkImpl::loadConfigFile(
function HttpAppFramework (line 439) | HttpAppFramework &HttpAppFrameworkImpl::loadConfigJson(const Json::Value...
function HttpAppFramework (line 447) | HttpAppFramework &HttpAppFrameworkImpl::loadConfigJson(Json::Value &&data)
function HttpAppFramework (line 455) | HttpAppFramework &HttpAppFrameworkImpl::setLogPath(
function HttpAppFramework (line 486) | HttpAppFramework &HttpAppFrameworkImpl::setLogLevel(
function HttpAppFramework (line 493) | HttpAppFramework &HttpAppFrameworkImpl::setLogLocalTime(bool on)
function HttpAppFramework (line 499) | HttpAppFramework &HttpAppFrameworkImpl::setSSLConfigCommands(
function HttpAppFramework (line 506) | HttpAppFramework &HttpAppFrameworkImpl::setSSLFiles(const std::string &c...
function HttpAppFramework (line 514) | HttpAppFramework &HttpAppFrameworkImpl::reloadSSLFiles()
type sigaction (line 580) | struct sigaction
function HttpAppFramework (line 692) | HttpAppFramework &HttpAppFrameworkImpl::setUploadPath(
function HttpResponsePtr (line 728) | HttpResponsePtr HttpAppFrameworkImpl::handleSessionForResponse(
function HttpAppFramework (line 830) | HttpAppFramework &HttpAppFramework::instance()
function HttpAppFramework (line 922) | HttpAppFramework &HttpAppFrameworkImpl::createDbClient(
function HttpAppFramework (line 1010) | HttpAppFramework &HttpAppFrameworkImpl::addDbClient(const orm::DbConfig ...
function HttpAppFramework (line 1017) | HttpAppFramework &HttpAppFrameworkImpl::createRedisClient(
function HttpResponsePtr (line 1057) | const HttpResponsePtr &HttpAppFrameworkImpl::getCustom404Page()
function HttpAppFramework (line 1084) | HttpAppFramework &HttpAppFrameworkImpl::setStaticFileHeaders(
function HttpAppFramework (line 1091) | HttpAppFramework &HttpAppFrameworkImpl::addALocation(
function HttpAppFramework (line 1115) | HttpAppFramework &HttpAppFrameworkImpl::setCustomErrorHandler(
function HttpAppFramework (line 1136) | HttpAppFramework &HttpAppFrameworkImpl::setDefaultHandler(
function HttpAppFramework (line 1143) | HttpAppFramework &HttpAppFrameworkImpl::setupFileLogger()
function HttpAppFramework (line 1241) | HttpAppFramework &HttpAppFrameworkImpl::registerCustomExtensionMime(
function HttpAppFramework (line 1254) | HttpAppFramework &HttpAppFrameworkImpl::enableRequestStream(bool enable)
function HttpAppFramework (line 1267) | HttpAppFramework &HttpAppFrameworkImpl::registerNewConnectionAdvice(
function HttpAppFramework (line 1275) | HttpAppFramework &HttpAppFrameworkImpl::registerHttpResponseCreationAdvice(
function HttpAppFramework (line 1284) | HttpAppFramework &HttpAppFrameworkImpl::registerSyncAdvice(
function HttpAppFramework (line 1292) | HttpAppFramework &HttpAppFrameworkImpl::registerPreRoutingAdvice(
function HttpAppFramework (line 1299) | HttpAppFramework &HttpAppFrameworkImpl::registerPreRoutingAdvice(
function HttpAppFramework (line 1308) | HttpAppFramework &HttpAppFrameworkImpl::registerPostRoutingAdvice(
function HttpAppFramework (line 1315) | HttpAppFramework &HttpAppFrameworkImpl::registerPostRoutingAdvice(
function HttpAppFramework (line 1324) | HttpAppFramework &HttpAppFrameworkImpl::registerPreHandlingAdvice(
function HttpAppFramework (line 1331) | HttpAppFramework &HttpAppFrameworkImpl::registerPreHandlingAdvice(
function HttpAppFramework (line 1340) | HttpAppFramework &HttpAppFrameworkImpl::registerPostHandlingAdvice(
function HttpAppFramework (line 1348) | HttpAppFramework &HttpAppFrameworkImpl::registerPreSendingAdvice(
function HttpAppFramework (line 1356) | HttpAppFramework &HttpAppFrameworkImpl::setBeforeListenSockOptCallback(
function HttpAppFramework (line 1363) | HttpAppFramework &HttpAppFrameworkImpl::setAfterAcceptSockOptCallback(
function HttpAppFramework (line 1370) | HttpAppFramework &HttpAppFrameworkImpl::setConnectionCallback(
FILE: lib/src/HttpAppFrameworkImpl.h
function namespace (line 28) | namespace trantor
function namespace (line 33) | namespace drogon
function std (line 232) | const std::string &getDocumentRoot() const override
function std (line 392) | const std::string &getHomePage() const override
function isRunning (line 456) | bool isRunning() override
function areAllDbClientsAvailable (line 610) | bool areAllDbClientsAvailable() const noexcept override;
function ExceptionHandler (line 636) | const ExceptionHandler &getExceptionHandler() const override
function threadNum_ (line 709) | size_t threadNum_{1}
function logfileMaxNum_ (line 729) | size_t logfileMaxNum_{0}
function keepaliveRequestsNumber_ (line 730) | size_t keepaliveRequestsNumber_{0}
function pipeliningRequestsNumber_ (line 731) | size_t pipeliningRequestsNumber_{0}
function clientMaxWebSocketMessageSize_ (line 742) | size_t clientMaxWebSocketMessageSize_{128 * 1024};
function enableCompressedRequest_ (line 763) | bool enableCompressedRequest_{false};
FILE: lib/src/HttpBinder.cc
type drogon (line 18) | namespace drogon
type internal (line 20) | namespace internal
function handleException (line 22) | void handleException(const std::exception &e,
FILE: lib/src/HttpClientImpl.cc
type trantor (line 29) | namespace trantor
type RequestCallbackParams (line 290) | struct RequestCallbackParams
method RequestCallbackParams (line 292) | RequestCallbackParams(HttpReqCallback &&cb,
function isValidIpAddr (line 363) | static bool isValidIpAddr(const trantor::InetAddress &addr)
function HttpClientPtr (line 643) | HttpClientPtr HttpClient::newHttpClient(const std::string &ip,
function HttpClientPtr (line 659) | HttpClientPtr HttpClient::newHttpClient(const std::string &hostString,
FILE: lib/src/HttpClientImpl.h
function namespace (line 31) | namespace drogon
function addCookie (line 70) | void addCookie(const std::string &key, const std::string &value) override
function addCookie (line 75) | void addCookie(const Cookie &cookie) override
function setUserAgent (line 90) | void setUserAgent(const std::string &userAgent) override
function setSockOptCallback (line 116) | void setSockOptCallback(std::function<void(int)> cb) override
function pipeliningDepth_ (line 160) | size_t pipeliningDepth_{0}
function bytesSent_ (line 163) | size_t bytesSent_{0}
function bytesReceived_ (line 164) | size_t bytesReceived_{0}
function useOldTLS_ (line 167) | bool useOldTLS_{false};
FILE: lib/src/HttpConnectionLimit.h
function namespace (line 24) | namespace drogon
FILE: lib/src/HttpControllerBinder.cc
type drogon (line 20) | namespace drogon
FILE: lib/src/HttpControllerBinder.h
function namespace (line 22) | namespace drogon
FILE: lib/src/HttpControllersRouter.cc
function addCtrlBinderToRouterItem (line 160) | static void addCtrlBinderToRouterItem(const std::shared_ptr<Binder> &bin...
type SimpleControllerProcessResult (line 186) | struct SimpleControllerProcessResult
function SimpleControllerProcessResult (line 193) | static SimpleControllerProcessResult processSimpleControllerParams(
type RegExWebSocketControllerRouterItem (line 309) | struct RegExWebSocketControllerRouterItem
type HttpControllerRouterItem (line 590) | struct HttpControllerRouterItem
function RouteResult (line 600) | RouteResult HttpControllersRouter::route(const HttpRequestImplPtr &req)
function RouteResult (line 699) | RouteResult HttpControllersRouter::routeWs(const HttpRequestImplPtr &req)
type HttpControllerRouterItem (line 758) | struct HttpControllerRouterItem
FILE: lib/src/HttpControllersRouter.h
function namespace (line 26) | namespace drogon
FILE: lib/src/HttpFileImpl.cc
function FileType (line 160) | FileType HttpFile::getFileType() const noexcept
FILE: lib/src/HttpFileImpl.h
function namespace (line 26) | namespace drogon
FILE: lib/src/HttpFileUploadRequest.h
function namespace (line 20) | namespace drogon
FILE: lib/src/HttpMessageBody.h
function namespace (line 20) | namespace drogon
FILE: lib/src/HttpRequestImpl.cc
function HttpRequestPtr (line 513) | HttpRequestPtr HttpRequest::newHttpRequest()
function HttpRequestPtr (line 521) | HttpRequestPtr HttpRequest::newHttpFormPostRequest()
function HttpRequestPtr (line 531) | HttpRequestPtr HttpRequest::newHttpJsonRequest(const Json::Value &data)
function HttpRequestPtr (line 558) | HttpRequestPtr HttpRequest::newFileUploadRequest(
function StreamDecompressStatus (line 813) | StreamDecompressStatus HttpRequestImpl::decompressBody()
function StreamDecompressStatus (line 837) | StreamDecompressStatus HttpRequestImpl::decompressBodyBrotli() noexcept
function StreamDecompressStatus (line 909) | StreamDecompressStatus HttpRequestImpl::decompressBodyGzip() noexcept
FILE: lib/src/HttpRequestImpl.h
type class (line 42) | enum class
function ReqStreamStatus (line 50) | enum class ReqStreamStatus
function std (line 363) | const std::string &getHeaderBy(const std::string &lowerField) const
function std (line 374) | const std::string &getCookie(const std::string &field) const override
function SafeStringMap (line 385) | const SafeStringMap<std::string> &headers() const override
function setParameter (line 405) | void setParameter(const std::string &key, const std::string &value) over...
function setContent (line 418) | void setContent(const std::string &content)
function setBody (line 423) | void setBody(const std::string &body) override
function setBody (line 428) | void setBody(std::string &&body) override
function addHeader (line 433) | void addHeader(std::string field, const std::string &value) override
function addHeader (line 442) | void addHeader(std::string field, std::string &&value) override
function addCookie (line 451) | void addCookie(std::string key, std::string value) override
function setPassThrough (line 456) | void setPassThrough(bool flag) override
function setSession (line 473) | void setSession(const SessionPtr &session)
function setCustomContentTypeString (line 499) | void setCustomContentTypeString(const std::string &type) override
function setContentTypeCode (line 515) | void setContentTypeCode(const ContentType type) override
function ContentType (line 533) | ContentType contentType() const override
function setMatchedPathPattern (line 549) | void setMatchedPathPattern(const std::string &pathPattern)
function std (line 554) | const std::string &expect() const
function connected (line 567) | bool connected() const noexcept override
function std (line 587) | const std::string &getJsonError() const override
function startProcessing (line 616) | void startProcessing()
function setContentType (line 631) | void setContentType(const std::string &contentType)
function setContentType (line 636) | void setContentType(std::string &&contentType)
function realContentLength_ (line 711) | size_t realContentLength_{0}
function mutable (line 738) | mutable ContentType contentType_{CT_TEXT_PLAIN};
FILE: lib/src/HttpRequestParser.cc
function HttpRequestImplPtr (line 87) | HttpRequestImplPtr HttpRequestParser::makeRequestForPool(HttpRequestImpl...
FILE: lib/src/HttpRequestParser.h
function namespace (line 26) | namespace drogon
FILE: lib/src/HttpResponseImpl.cc
type drogon (line 37) | namespace drogon
function HttpResponsePtr (line 42) | static inline HttpResponsePtr genHttpResponse(const std::string &viewN...
function HttpResponsePtr (line 67) | HttpResponsePtr HttpResponse::newHttpResponse()
function HttpResponsePtr (line 74) | HttpResponsePtr HttpResponse::newHttpResponse(HttpStatusCode code,
function HttpResponsePtr (line 82) | HttpResponsePtr HttpResponse::newHttpJsonResponse(const Json::Value &data)
function HttpResponsePtr (line 90) | HttpResponsePtr HttpResponse::newHttpJsonResponse(Json::Value &&data)
function HttpResponsePtr (line 144) | HttpResponsePtr HttpResponse::newNotFoundResponse(const HttpRequestPtr &...
function HttpResponsePtr (line 197) | HttpResponsePtr HttpResponse::newRedirectionResponse(
function HttpResponsePtr (line 208) | HttpResponsePtr HttpResponse::newHttpViewResponse(const std::string &vie...
function HttpResponsePtr (line 215) | HttpResponsePtr HttpResponse::newFileResponse(
function HttpResponsePtr (line 270) | HttpResponsePtr HttpResponse::newFileResponse(
function HttpResponsePtr (line 281) | HttpResponsePtr HttpResponse::newFileResponse(
function HttpResponsePtr (line 408) | HttpResponsePtr HttpResponse::newStreamResponse(
function HttpResponsePtr (line 470) | HttpResponsePtr HttpResponse::newAsyncStreamResponse(
FILE: lib/src/HttpResponseImpl.h
function namespace (line 31) | namespace drogon
function mutable (line 543) | mutable std::string contentTypeString_{"text/html; charset=utf-8"};
FILE: lib/src/HttpResponseParser.h
type class (line 29) | enum class
function setForHeadMethod (line 54) | void setForHeadMethod()
function parseResponseForHeadMethod_ (line 71) | bool parseResponseForHeadMethod_{false};
FILE: lib/src/HttpServer.cc
type CallbackParamPack (line 250) | struct CallbackParamPack
method CallbackParamPack (line 252) | CallbackParamPack(trantor::TcpConnectionPtr conn,
type ChunkingParams (line 855) | struct ChunkingParams
method ChunkingParams (line 859) | explicit ChunkingParams(DataCallback cb) : dataCallback(std::move(cb))
function chunkingCallback (line 870) | static std::size_t chunkingCallback(
function isWebSocket (line 1143) | static inline bool isWebSocket(const HttpRequestImplPtr &req)
function HttpResponsePtr (line 1176) | static inline HttpResponsePtr tryDecompressRequest(
function passSyncAdvices (line 1214) | static inline bool passSyncAdvices(
function HttpResponsePtr (line 1240) | static inline HttpResponsePtr getCompressedResponse(
function handleInvalidHttpMethod (line 1305) | static void handleInvalidHttpMethod(
function handleHttpOptions (line 1319) | static void handleHttpOptions(
FILE: lib/src/HttpServer.h
type CallbackParamPack (line 24) | struct CallbackParamPack
function namespace (line 26) | namespace drogon
FILE: lib/src/HttpUtils.cc
type drogon (line 22) | namespace drogon
function ContentType (line 584) | ContentType getContentType(const std::string &fileName)
function ContentType (line 601) | ContentType parseContentType(const std::string_view &contentType)
function FileType (line 625) | FileType parseFileType(const std::string_view &fileExtension)
function FileType (line 636) | FileType getFileType(ContentType contentType)
function registerCustomExtensionMime (line 661) | void registerCustomExtensionMime(const std::string &ext,
function fileNameToMime (line 675) | const std::string_view fileNameToMime(const std::string &fileName)
function fileNameToContentTypeAndMime (line 697) | std::pair<ContentType, const std::string_view> fileNameToContentTypeAn...
FILE: lib/src/HttpUtils.h
function namespace (line 22) | namespace drogon
FILE: lib/src/JsonConfigAdapter.h
function namespace (line 4) | namespace drogon
FILE: lib/src/ListenerManager.cc
type drogon (line 26) | namespace drogon
class DrogonFileLocker (line 29) | class DrogonFileLocker : public trantor::NonCopyable
method DrogonFileLocker (line 32) | DrogonFileLocker()
FILE: lib/src/ListenerManager.h
function namespace (line 26) | namespace trantor
function namespace (line 31) | namespace drogon
FILE: lib/src/MiddlewaresFunction.cc
type drogon (line 22) | namespace drogon
type middlewares_function (line 24) | namespace middlewares_function
function doFilterChains (line 26) | static void doFilterChains(
function doFilters (line 71) | void doFilters(const std::vector<std::shared_ptr<HttpFilterBase>> &f...
function passMiddlewareChains (line 96) | static void passMiddlewareChains(
function createMiddlewares (line 150) | std::vector<std::shared_ptr<HttpMiddlewareBase>> createMiddlewares(
function passMiddlewares (line 170) | void passMiddlewares(
FILE: lib/src/MiddlewaresFunction.h
function namespace (line 22) | namespace drogon
FILE: lib/src/MultiPart.cc
function parseLine (line 90) | static std::pair<std::string_view, std::string_view> parseLine(
FILE: lib/src/MultipartStreamParser.cc
function startsWith (line 20) | static bool startsWith(const std::string_view &a, const std::string_view...
function startsWithIgnoreCase (line 36) | static bool startsWithIgnoreCase(const std::string_view &a,
function parseLine (line 90) | static std::pair<std::string_view, std::string_view> parseLine(
FILE: lib/src/MultipartStreamParser.h
function class (line 22) | class DROGON_EXPORT MultipartStreamParser
type class (line 64) | enum class
function isValid_ (line 74) | bool isValid_{true};
FILE: lib/src/PluginsManager.cc
function PluginBase (line 102) | PluginBase *PluginsManager::getPlugin(const std::string &pluginName)
FILE: lib/src/PluginsManager.h
function namespace (line 19) | namespace drogon
FILE: lib/src/PromExporter.cc
function exportCollector (line 113) | static std::string exportCollector(
FILE: lib/src/RangeParser.cc
function FileRangeParseResult (line 43) | FileRangeParseResult drogon::parseRangeHeader(const std::string &rangeStr,
FILE: lib/src/RangeParser.h
function namespace (line 20) | namespace drogon
FILE: lib/src/RateLimiter.cc
function RateLimiterPtr (line 8) | RateLimiterPtr RateLimiter::newRateLimiter(
FILE: lib/src/RealIpResolver.cc
type XForwardedForParser (line 22) | struct XForwardedForParser : public trantor::NonCopyable
method XForwardedForParser (line 24) | explicit XForwardedForParser(std::string value)
method getNext (line 29) | std::string getNext()
function parseAddress (line 63) | static trantor::InetAddress parseAddress(const std::string &addr)
FILE: lib/src/RedisClientManager.h
function namespace (line 25) | namespace drogon
FILE: lib/src/RedisClientSkipped.cc
type drogon (line 17) | namespace drogon
type nosql (line 19) | namespace nosql
FILE: lib/src/RedisResultSkipped.cc
type drogon (line 18) | namespace drogon
type nosql (line 20) | namespace nosql
function RedisResultType (line 44) | RedisResultType RedisResult::type() const noexcept
FILE: lib/src/RequestStream.cc
type drogon (line 21) | namespace drogon
class RequestStreamImpl (line 23) | class RequestStreamImpl : public RequestStream
method RequestStreamImpl (line 26) | RequestStreamImpl(const HttpRequestImplPtr &req) : weakReq_(req)
method setStreamReader (line 44) | void setStreamReader(RequestStreamReaderPtr reader) override
method setHandlerInLoop (line 57) | void setHandlerInLoop(const HttpRequestImplPtr &req,
type internal (line 82) | namespace internal
function RequestStreamPtr (line 84) | RequestStreamPtr createRequestStream(const HttpRequestPtr &req)
class DefaultStreamReader (line 99) | class DefaultStreamReader : public RequestStreamReader
method DefaultStreamReader (line 102) | DefaultStreamReader(StreamDataCallback dataCb,
method onStreamData (line 108) | void onStreamData(const char *data, size_t length) override
method onStreamFinish (line 113) | void onStreamFinish(std::exception_ptr ex) override
class NullStreamReader (line 126) | class NullStreamReader : public RequestStreamReader
method onStreamData (line 129) | void onStreamData(const char *, size_t length) override
method onStreamFinish (line 133) | void onStreamFinish(std::exception_ptr) override
class MultipartStreamReader (line 141) | class MultipartStreamReader : public RequestStreamReader
method MultipartStreamReader (line 144) | MultipartStreamReader(const std::string &contentType,
method onStreamData (line 155) | void onStreamData(const char *data, size_t length) override
method onStreamFinish (line 174) | void onStreamFinish(std::exception_ptr ex) override
function RequestStreamReaderPtr (line 199) | RequestStreamReaderPtr RequestStreamReader::newReader(
function RequestStreamReaderPtr (line 207) | RequestStreamReaderPtr RequestStreamReader::newNullReader()
function RequestStreamReaderPtr (line 212) | RequestStreamReaderPtr RequestStreamReader::newMultipartReader(
FILE: lib/src/SessionManager.cc
function SessionPtr (line 92) | SessionPtr SessionManager::getSession(const std::string &sessionID,
FILE: lib/src/SessionManager.h
function namespace (line 28) | namespace drogon
FILE: lib/src/SharedLibManager.cc
function safeExec (line 28) | static int safeExec(const std::vector<std::string> &args)
function forEachFileIn (line 63) | static void forEachFileIn(
type stat (line 135) | struct stat
type stat (line 294) | struct stat
type stat (line 304) | struct stat
FILE: lib/src/SharedLibManager.h
function namespace (line 23) | namespace drogon
FILE: lib/src/SlashRemover.cc
type removeSlashMode (line 17) | enum removeSlashMode : uint8_t
function findTrailingSlashes (line 26) | static inline size_t findTrailingSlashes(string_view url)
function removeTrailingSlashes (line 40) | static inline void removeTrailingSlashes(string &url,
function findDuplicateSlashes (line 48) | static inline size_t findDuplicateSlashes(string_view url)
function removeDuplicateSlashes (line 70) | static inline void removeDuplicateSlashes(string &url, size_t start)
function findExcessiveSlashes (line 86) | static inline std::pair<size_t, size_t> findExcessiveSlashes(string_view...
function removeExcessiveSlashes (line 140) | static inline void removeExcessiveSlashes(string &url,
function handleReq (line 153) | static inline bool handleReq(const drogon::HttpRequestPtr &req,
FILE: lib/src/SlidingWindowRateLimiter.h
function namespace (line 5) | namespace drogon
FILE: lib/src/SpinLock.h
function namespace (line 21) | namespace drogon
FILE: lib/src/StaticFileRouter.cc
type FileStat (line 282) | struct FileStat
type tm (line 285) | struct tm
function getFileStat (line 292) | static bool getFileStat(const std::string &filePath, FileStat &myStat)
FILE: lib/src/StaticFileRouter.h
function setStaticFilesCacheTime (line 41) | void setStaticFilesCacheTime(int cacheTime)
function setGzipStatic (line 51) | void setGzipStatic(bool useGzipStatic)
function setBrStatic (line 56) | void setBrStatic(bool useBrStatic)
function addALocation (line 70) | void addALocation(const std::string &uriPrefix,
function setStaticFileHeaders (line 87) | void setStaticFileHeaders(
function setImplicitPageEnable (line 93) | void setImplicitPageEnable(bool useImplicitPage)
function setImplicitPage (line 103) | void setImplicitPage(const std::string &implicitPageFile)
function setDefaultHandler (line 113) | void setDefaultHandler(DefaultHandler &&handler)
function staticFilesCacheTime_ (line 143) | int staticFilesCacheTime_{5}
function gzipStaticFlag_ (line 146) | bool gzipStaticFlag_{true};
FILE: lib/src/TaskTimeoutFlag.h
function namespace (line 23) | namespace drogon
FILE: lib/src/TokenBucketRateLimiter.h
function namespace (line 5) | namespace drogon
FILE: lib/src/Utilities.cc
type tm (line 51) | struct tm
function time_t (line 65) | time_t timegm(struct tm *tm)
type tm (line 80) | struct tm
type drogon (line 83) | namespace drogon
type utils (line 85) | namespace utils
class Base64CharMap (line 97) | class Base64CharMap
method Base64CharMap (line 100) | Base64CharMap()
method getIndex (line 122) | char getIndex(const char c) const noexcept
function isBase64 (line 133) | static inline bool isBase64(unsigned char c)
function isInteger (line 148) | bool isInteger(std::string_view str)
function isBase64 (line 156) | bool isBase64(std::string_view str)
function genRandomString (line 164) | std::string genRandomString(int length)
function hexToBinaryVector (line 181) | std::vector<char> hexToBinaryVector(const char *ptr, size_t length)
function hexToBinaryString (line 231) | std::string hexToBinaryString(const char *ptr, size_t length)
function DROGON_EXPORT (line 281) | DROGON_EXPORT void binaryStringToHex(const char *ptr,
function binaryStringToHex (line 324) | std::string binaryStringToHex(const unsigned char *ptr,
function splitStringToSet (line 333) | std::set<std::string> splitStringToSet(const std::string &str,
function createUuidString (line 358) | inline std::string createUuidString(const char *str, size_t len, boo...
function getUuid (line 374) | std::string getUuid(bool lowercase)
function base64Encode (line 432) | void base64Encode(const unsigned char *bytesToEncode,
function base64DecodeToVector (line 487) | std::vector<char> base64DecodeToVector(std::string_view encodedString)
function base64Decode (line 548) | size_t base64Decode(const char *encodedString,
function charToHex (line 608) | static std::string charToHex(char c)
function urlEncodeComponent (line 624) | std::string urlEncodeComponent(const std::string &src)
function urlEncode (line 721) | std::string urlEncode(const std::string &src)
function needUrlDecoding (line 824) | bool needUrlDecoding(const char *begin, const char *end)
function urlDecode (line 831) | std::string urlDecode(const char *begin, const char *end)
function gzipCompress (line 893) | std::string gzipCompress(const char *data, const size_t ndata)
function gzipDecompress (line 952) | std::string gzipDecompress(const char *data, const size_t ndata)
function dateToCustomFormattedString (line 1038) | void dateToCustomFormattedString(const std::string &fmtStr,
function getHttpDate (line 1068) | trantor::Date getHttpDate(const std::string &httpFullDateString)
function formattedString (line 1093) | std::string formattedString(const char *format, ...)
function createPath (line 1141) | int createPath(const std::string &path)
function brotliCompress (line 1160) | std::string brotliCompress(const char *data, const size_t ndata)
function brotliDecompress (line 1181) | std::string brotliDecompress(const char *data, const size_t ndata)
function brotliCompress (line 1220) | std::string brotliCompress(const char * /*data*/, const size_t /*nda...
function brotliDecompress (line 1227) | std::string brotliDecompress(const char * /*data*/, const size_t /*n...
function getMd5 (line 1235) | std::string getMd5(const char *data, const size_t dataLen)
function getSha1 (line 1240) | std::string getSha1(const char *data, const size_t dataLen)
function getSha256 (line 1245) | std::string getSha256(const char *data, const size_t dataLen)
function getSha3 (line 1250) | std::string getSha3(const char *data, const size_t dataLen)
function getBlake2b (line 1255) | std::string getBlake2b(const char *data, const size_t dataLen)
function replaceAll (line 1260) | void replaceAll(std::string &s, const std::string &from, const std::...
function supportsTls (line 1270) | bool supportsTls() noexcept
function secureRandomBytes (line 1275) | bool secureRandomBytes(void *ptr, size_t size)
function secureRandomString (line 1280) | std::string secureRandomString(size_t size)
type internal (line 1316) | namespace internal
FILE: lib/src/WebSocketClientImpl.cc
function WebSocketConnectionPtr (line 34) | WebSocketConnectionPtr WebSocketClientImpl::getConnection()
function WebSocketClientPtr (line 474) | WebSocketClientPtr WebSocketClient::newWebSocketClient(const std::string...
function WebSocketClientPtr (line 490) | WebSocketClientPtr WebSocketClient::newWebSocketClient(
FILE: lib/src/WebSocketClientImpl.h
function setMessageHandler (line 35) | void setMessageHandler(
function setConnectionClosedHandler (line 44) | void setConnectionClosedHandler(
function upgraded_ (line 87) | bool upgraded_{false};
FILE: lib/src/WebSocketConnectionImpl.h
function gotAll (line 34) | bool gotAll(std::string &message, WebSocketMessageType &type)
function gotAll_ (line 47) | bool gotAll_{false};
function trantor (line 71) | const trantor::InetAddress &localAddr() const override;
function setCloseCallback (line 94) | void setCloseCallback(
function onClose (line 103) | void onClose()
function isServer_ (line 114) | bool isServer_{true};
FILE: lib/src/YamlConfigAdapter.cc
type YAML (line 7) | namespace YAML
function yaml2json (line 9) | static bool yaml2json(const Node &node, Json::Value &jsonValue)
type convert<Json::Value> (line 88) | struct convert<Json::Value>
method decode (line 90) | static bool decode(const Node &node, Json::Value &rhs)
FILE: lib/src/YamlConfigAdapter.h
function namespace (line 4) | namespace drogon
FILE: lib/src/drogon_test.cc
type drogon (line 7) | namespace drogon
type test (line 9) | namespace test
type internal (line 13) | namespace internal
function registerCase (line 26) | void registerCase(Case *test)
function unregisterCase (line 32) | void unregisterCase(Case *test)
function leftpad (line 41) | static std::string leftpad(const std::string &str, size_t len)
function prettifyString (line 48) | std::string prettifyString(const std::string_view sv, size_t maxLe...
function printHelp (line 59) | static void printHelp(std::string_view argv0)
function printTestStats (line 70) | void printTestStats()
function run (line 139) | int run(int argc, char **argv)
function ThreadSafeStream (line 257) | ThreadSafeStream print()
function ThreadSafeStream (line 262) | ThreadSafeStream printErr()
FILE: lib/src/impl_forwards.h
function namespace (line 6) | namespace drogon
function namespace (line 52) | namespace trantor
function namespace (line 61) | namespace drogon
FILE: lib/tests/CookieSameSite.cc
type CookieSameSiteSequence (line 11) | struct CookieSameSiteSequence
method CookieSameSiteSequence (line 13) | CookieSameSiteSequence()
function DROGON_TEST (line 28) | DROGON_TEST(CookieSameSite)
FILE: lib/tests/RealIpResolverTest.cc
function DROGON_TEST (line 13) | DROGON_TEST(RealIpResolver)
class RealIpController (line 88) | class RealIpController : public drogon::HttpController<RealIpController>
method METHOD_LIST_END (line 93) | METHOD_LIST_END
function main (line 107) | int main(int argc, char **argv)
FILE: lib/tests/integration_test/client/HttpPipeliningTest.cc
function DROGON_TEST (line 11) | DROGON_TEST(HttpPipeliningTest)
function DROGON_TEST (line 58) | DROGON_TEST(HttpPipeliningStrangeTest1)
function DROGON_TEST (line 76) | DROGON_TEST(HttpPipeliningStrangeTest2)
FILE: lib/tests/integration_test/client/MultipleWsTest.cc
type DataPack (line 10) | struct DataPack
function DROGON_TEST (line 18) | DROGON_TEST(MultipleWsTest)
FILE: lib/tests/integration_test/client/RequestStreamTest.cc
function checkStreamRequest (line 12) | void checkStreamRequest(T &&TEST_CTX,
function DROGON_TEST (line 51) | DROGON_TEST(RequestStreamTest)
FILE: lib/tests/integration_test/client/WebSocketTest.cc
type DataPack (line 10) | struct DataPack
function DROGON_TEST (line 18) | DROGON_TEST(WebSocketTest)
FILE: lib/tests/integration_test/client/main.cc
function doTest (line 43) | void doTest(const HttpClientPtr &client, std::shared_ptr<test::Case> TES...
function loadFileLengths (line 1181) | void loadFileLengths()
function DROGON_TEST (line 1198) | DROGON_TEST(HttpTest)
function DROGON_TEST (line 1210) | DROGON_TEST(HttpsTest)
function DROGON_TEST (line 1228) | DROGON_TEST(HttpsTimeoutTest)
function main (line 1257) | int main(int argc, char **argv)
FILE: lib/tests/integration_test/server/BeginAdviceTest.h
function class (line 7) | class BeginAdviceTest : public drogon::HttpSimpleController<BeginAdviceT...
FILE: lib/tests/integration_test/server/CoroFilter.h
function class (line 9) | class CoroFilter : public drogon::HttpCoroFilter<CoroFilter>
FILE: lib/tests/integration_test/server/CustomCtrl.h
function METHOD_LIST_END (line 14) | METHOD_LIST_END
FILE: lib/tests/integration_test/server/DigestAuthFilter.cc
function method2String (line 8) | std::string method2String(HttpMethod m)
function toLower (line 31) | std::string toLower(const std::string &in)
FILE: lib/tests/integration_test/server/DigestAuthFilter.h
type std (line 6) | typedef std::pair<std::string, std::string> HttpAttribute;
type std (line 7) | typedef std::vector<HttpAttribute> HttpAttributeList;
type std (line 8) | typedef std::map<std::string /*username*/, std::string /*password*/>
FILE: lib/tests/integration_test/server/DoNothingPlugin.h
function class (line 12) | class DoNothingPlugin : public Plugin<DoNothingPlugin>
FILE: lib/tests/integration_test/server/ForwardCtrl.h
function class (line 5) | class ForwardCtrl : public drogon::HttpSimpleController<ForwardCtrl>
FILE: lib/tests/integration_test/server/JsonTestController.h
function class (line 6) | class JsonTestController
FILE: lib/tests/integration_test/server/ListParaCtl.h
function class (line 5) | class ListParaCtl : public drogon::HttpSimpleController<ListParaCtl>
FILE: lib/tests/integration_test/server/MethodTest.cc
function makeGetRespose (line 3) | static void makeGetRespose(
function makePostRespose (line 9) | static void makePostRespose(
FILE: lib/tests/integration_test/server/MethodTest.h
function class (line 5) | class MethodTest : public drogon::HttpController<MethodTest>
FILE: lib/tests/integration_test/server/MiddlewareTest.cc
class Middleware1 (line 5) | class Middleware1 : public drogon::HttpMiddleware<Middleware1>
method Middleware1 (line 8) | Middleware1()
method invoke (line 14) | void invoke(const HttpRequestPtr &req,
class Middleware2 (line 29) | class Middleware2 : public drogon::HttpMiddleware<Middleware2>
method Middleware2 (line 32) | Middleware2()
method invoke (line 38) | void invoke(const HttpRequestPtr &req,
class Middleware3 (line 54) | class Middleware3 : public drogon::HttpMiddleware<Middleware3>
method Middleware3 (line 57) | Middleware3()
method invoke (line 63) | void invoke(const HttpRequestPtr &req,
class MiddlewareBlock (line 79) | class MiddlewareBlock : public drogon::HttpMiddleware<MiddlewareBlock>
method MiddlewareBlock (line 82) | MiddlewareBlock()
method invoke (line 88) | void invoke(const HttpRequestPtr &req,
class MiddlewareCoro (line 101) | class MiddlewareCoro : public drogon::HttpCoroMiddleware<MiddlewareCoro>
method MiddlewareCoro (line 104) | MiddlewareCoro()
method invoke (line 110) | Task<HttpResponsePtr> invoke(const HttpRequestPtr &req,
class MiddlewareTest (line 126) | class MiddlewareTest : public drogon::HttpController<MiddlewareTest>
method METHOD_LIST_END (line 153) | METHOD_LIST_END
FILE: lib/tests/integration_test/server/PipeliningTest.h
function class (line 17) | class PipeliningTest : public drogon::HttpController<PipeliningTest>
FILE: lib/tests/integration_test/server/RangeTestController.h
function class (line 5) | class RangeTestController : public drogon::HttpController<RangeTestContr...
FILE: lib/tests/integration_test/server/RequestStreamTestCtrl.cc
class RequestStreamTestCtrl (line 8) | class RequestStreamTestCtrl : public HttpController<RequestStreamTestCtrl>
method METHOD_LIST_END (line 17) | METHOD_LIST_END
method stream_chunk (line 35) | void stream_chunk(
method stream_upload_echo (line 80) | void stream_upload_echo(
FILE: lib/tests/integration_test/server/TestController.h
function namespace (line 9) | namespace example
FILE: lib/tests/integration_test/server/TestPlugin.h
function class (line 12) | class TestPlugin : public Plugin<TestPlugin>
FILE: lib/tests/integration_test/server/TestViewCtl.h
function class (line 5) | class TestViewCtl : public drogon::HttpSimpleController<TestViewCtl>
FILE: lib/tests/integration_test/server/TimeFilter.h
function class (line 10) | class TimeFilter : public drogon::HttpFilter<TimeFilter>
FILE: lib/tests/integration_test/server/WebSocketTest.cc
type Subscriber (line 4) | struct Subscriber
FILE: lib/tests/integration_test/server/WebSocketTest.h
function namespace (line 6) | namespace example
FILE: lib/tests/integration_test/server/api_Attachment.h
function namespace (line 5) | namespace api
FILE: lib/tests/integration_test/server/api_v1_ApiTest.h
function namespace (line 5) | namespace api
FILE: lib/tests/integration_test/server/api_v1_CoroTest.h
function namespace (line 5) | namespace api
FILE: lib/tests/integration_test/server/main.cc
class A (line 16) | class A : public DrObjectBase
method handle (line 19) | void handle(const HttpRequestPtr &req,
method staticHandle (line 39) | static void staticHandle(
class B (line 61) | class B : public DrObjectBase
class C (line 80) | class C : public drogon::HttpController<C>
method METHOD_LIST_END (line 86) | METHOD_LIST_END
type api (line 96) | namespace api
type v1 (line 98) | namespace v1
class Test (line 100) | class Test : public HttpController<Test>
method METHOD_LIST_END (line 111) | METHOD_LIST_END
method list (line 127) | void list(const HttpRequestPtr &req,
type drogon (line 148) | namespace drogon
function fromRequest (line 151) | std::string_view fromRequest(const HttpRequest &req)
class Middleware4 (line 157) | class Middleware4 : public drogon::HttpMiddleware<Middleware4, false>
method Middleware4 (line 160) | Middleware4()
method invoke (line 165) | void invoke(const HttpRequestPtr &req,
function main (line 183) | int main()
FILE: lib/tests/main_CookieSameSite.cc
class CookieSameSiteController (line 12) | class CookieSameSiteController
method METHOD_LIST_END (line 20) | METHOD_LIST_END
function main (line 55) | int main(int argc, char **argv)
FILE: lib/tests/unittests/Base64Test.cc
function DROGON_TEST (line 5) | DROGON_TEST(Base64)
FILE: lib/tests/unittests/BrotliTest.cc
function DROGON_TEST (line 7) | DROGON_TEST(BrotliTest)
FILE: lib/tests/unittests/CacheMapTest.cc
function DROGON_TEST (line 11) | DROGON_TEST(CacheMapTest)
FILE: lib/tests/unittests/ClassNameTest.cc
type api (line 3) | namespace api
type v1 (line 5) | namespace v1
class handler (line 8) | class handler : public drogon::DrObject<T>
method name (line 11) | static std::string name()
class hh (line 17) | class hh : public handler<hh>
function DROGON_TEST (line 23) | DROGON_TEST(ClassName)
FILE: lib/tests/unittests/ControllerCreationTest.cc
class Ctrl (line 6) | class Ctrl : public drogon::HttpController<Ctrl, false>
method initPathRouting (line 9) | static void initPathRouting()
class SimpleCtrl (line 17) | class SimpleCtrl : public drogon::HttpController<Ctrl, false>
method initPathRouting (line 20) | static void initPathRouting()
class WsCtrl (line 28) | class WsCtrl : public drogon::WebSocketController<WsCtrl, false>
method initPathRouting (line 31) | static void initPathRouting()
function DROGON_TEST (line 43) | DROGON_TEST(ControllerCreation)
FILE: lib/tests/unittests/CookieTest.cc
function DROGON_TEST (line 4) | DROGON_TEST(CookieTest)
FILE: lib/tests/unittests/CoroutineTest.cc
type drogon::internal (line 18) | namespace drogon::internal
type SomeStruct (line 20) | struct SomeStruct
type StructAwaiter (line 32) | struct StructAwaiter : public CallbackAwaiter<std::shared_ptr<SomeStru...
method await_suspend (line 34) | void await_suspend(std::coroutine_handle<> handle)
function DROGON_TEST (line 49) | DROGON_TEST(CroutineBasics)
function DROGON_TEST (line 130) | DROGON_TEST(CompilcatedCoroutineLifetime)
function DROGON_TEST (line 155) | DROGON_TEST(CoroutineDestruction)
function DROGON_TEST (line 173) | DROGON_TEST(AsyncWaitLifetime)
function DROGON_TEST (line 208) | DROGON_TEST(SwitchThread)
function DROGON_TEST (line 225) | DROGON_TEST(Mutex)
function DROGON_TEST (line 254) | DROGON_TEST(WhenAll)
FILE: lib/tests/unittests/DrObjectTest.cc
class TestA (line 7) | class TestA : public DrObject<TestA>
type test (line 11) | namespace test
class TestB (line 13) | class TestB : public DrObject<TestB>
function DROGON_TEST (line 18) | DROGON_TEST(DrObjectCreationTest)
function DROGON_TEST (line 32) | DROGON_TEST(DrObjectNamespaceTest)
class TestC (line 46) | class TestC : public DrObject<TestC>
class TestD (line 52) | class TestD : public DrObject<TestD>
class TestE (line 58) | class TestE : public DrObject<TestE>
function DROGON_TEST (line 78) | DROGON_TEST(IsAutoCreationClassTest)
FILE: lib/tests/unittests/FileTypeTest.cc
function DROGON_TEST (line 6) | DROGON_TEST(ExtensionTest)
function DROGON_TEST (line 27) | DROGON_TEST(ContentTypeTest)
function DROGON_TEST (line 86) | DROGON_TEST(FileTypeTest)
FILE: lib/tests/unittests/GzipTest.cc
function DROGON_TEST (line 6) | DROGON_TEST(Gzip)
FILE: lib/tests/unittests/HttpDateTest.cc
function DROGON_TEST (line 5) | DROGON_TEST(HttpDate)
FILE: lib/tests/unittests/HttpFileTest.cc
function DROGON_TEST (line 8) | DROGON_TEST(HttpFile)
FILE: lib/tests/unittests/HttpFullDateTest.cc
function DROGON_TEST (line 8) | DROGON_TEST(HttpFullDateTest)
FILE: lib/tests/unittests/HttpHeaderTest.cc
function DROGON_TEST (line 8) | DROGON_TEST(HttpHeaderRequest)
function DROGON_TEST (line 19) | DROGON_TEST(HttpHeaderResponse)
function DROGON_TEST (line 40) | DROGON_TEST(ResponseSetCustomContentTypeString)
function DROGON_TEST (line 55) | DROGON_TEST(ResquestSetCustomContentTypeString)
FILE: lib/tests/unittests/HttpViewDataTest.cc
function DROGON_TEST (line 7) | DROGON_TEST(HttpViewData)
FILE: lib/tests/unittests/MD5Test.cc
function DROGON_TEST (line 5) | DROGON_TEST(Md5Test)
FILE: lib/tests/unittests/MainLoopTest.cc
type TestCookie (line 8) | struct TestCookie
method TestCookie (line 10) | TestCookie(std::shared_ptr<test::CaseBase> ctx) : TEST_CTX(ctx)
method take (line 22) | void take()
function DROGON_TEST (line 32) | DROGON_TEST(MainLoopTest)
FILE: lib/tests/unittests/MsgBufferTest.cc
function DROGON_TEST (line 8) | DROGON_TEST(MsgBufferTest)
FILE: lib/tests/unittests/MultiPartParserTest.cc
function DROGON_TEST (line 6) | DROGON_TEST(MultiPartParser)
function DROGON_TEST (line 65) | DROGON_TEST(MultiPartStreamParser)
FILE: lib/tests/unittests/OStringStreamTest.cc
function DROGON_TEST (line 7) | DROGON_TEST(OStringStreamTest)
FILE: lib/tests/unittests/PubSubServiceUnittest.cc
function DROGON_TEST (line 4) | DROGON_TEST(PubSubServiceTest)
FILE: lib/tests/unittests/Sha1Test.cc
function DROGON_TEST (line 5) | DROGON_TEST(SHA1Test)
FILE: lib/tests/unittests/SlashRemoverTest.cc
function DROGON_TEST (line 7) | DROGON_TEST(SlashRemoverTest)
FILE: lib/tests/unittests/StringOpsTest.cc
type SameContent (line 5) | struct SameContent
method SameContent (line 7) | SameContent(const std::vector<std::string> &container)
function DROGON_TEST (line 37) | DROGON_TEST(StringOpsTest)
FILE: lib/tests/unittests/UrlCodecTest.cc
function DROGON_TEST (line 6) | DROGON_TEST(URLCodec)
FILE: lib/tests/unittests/UtilitiesTest.cc
type ConvertibleFromStringStream (line 9) | struct ConvertibleFromStringStream
type NotConvertibleFromStringStream (line 18) | struct NotConvertibleFromStringStream
function DROGON_TEST (line 22) | DROGON_TEST(CanConvertFromStringStream)
type ConstructibleFromString (line 46) | struct ConstructibleFromString
method ConstructibleFromString (line 48) | ConstructibleFromString(const std::string &)
type NotConstructibleFromString (line 53) | struct NotConstructibleFromString
function DROGON_TEST (line 57) | DROGON_TEST(CanConstructFromString)
type ConvertibleFromString (line 73) | struct ConvertibleFromString
method ConvertibleFromString (line 75) | ConvertibleFromString &operator=(const std::string &)
type NotConvertibleFromString (line 81) | struct NotConvertibleFromString
function DROGON_TEST (line 85) | DROGON_TEST(CanConvertFromString)
FILE: lib/tests/unittests/UuidUnittest.cc
function DROGON_TEST (line 6) | DROGON_TEST(UuidTest)
FILE: lib/tests/unittests/WebsocketResponseTest.cc
function DROGON_TEST (line 9) | DROGON_TEST(WebsocketReponseTest)
FILE: lib/tests/unittests/main.cc
function DROGON_TEST (line 8) | DROGON_TEST(TestFrameworkSelfTest)
function main (line 37) | int main(int argc, char **argv)
FILE: nosql_lib/redis/inc/drogon/nosql/RedisClient.h
function namespace (line 30) | namespace drogon
FILE: nosql_lib/redis/inc/drogon/nosql/RedisException.h
function RedisErrorCode (line 24) | enum class RedisErrorCode
FILE: nosql_lib/redis/inc/drogon/nosql/RedisResult.h
type redisReply (line 23) | struct redisReply
function namespace (line 25) | namespace drogon
FILE: nosql_lib/redis/inc/drogon/nosql/RedisSubscriber.h
function namespace (line 19) | namespace drogon::nosql
FILE: nosql_lib/redis/src/RedisClientImpl.cc
function RedisConnectionPtr (line 66) | RedisConnectionPtr RedisClientImpl::newConnection(trantor::EventLoop *loop)
function RedisConnectionPtr (line 117) | RedisConnectionPtr RedisClientImpl::newSubscribeConnection(
FILE: nosql_lib/redis/src/RedisClientImpl.h
function namespace (line 27) | namespace drogon
FILE: nosql_lib/redis/src/RedisClientLockFree.cc
function RedisConnectionPtr (line 43) | RedisConnectionPtr RedisClientLockFree::newConnection()
function RedisConnectionPtr (line 88) | RedisConnectionPtr RedisClientLockFree::newSubscribeConnection(
FILE: nosql_lib/redis/src/RedisClientLockFree.h
function namespace (line 26) | namespace drogon
FILE: nosql_lib/redis/src/RedisConnection.h
type class (line 35) | enum class
function setConnectCallback (line 53) | void setConnectCallback(
function setDisconnectCallback (line 60) | void setDisconnectCallback(
function setIdleCallback (line 67) | void setIdleCallback(
function std (line 74) | static std::string getFormattedCommand(const std::string_view &command,
function sendCommand (line 169) | void sendCommand(RedisResultCallback &&resultCallback,
function ConnectStatus (line 202) | ConnectStatus status_{ConnectStatus::kNone};
FILE: nosql_lib/redis/src/RedisResult.cc
function RedisResultType (line 84) | RedisResultType RedisResult::type() const noexcept
FILE: nosql_lib/redis/src/RedisSubscriberImpl.h
function namespace (line 25) | namespace drogon::nosql
FILE: nosql_lib/redis/src/RedisTransactionImpl.h
function namespace (line 20) | namespace drogon
FILE: nosql_lib/redis/src/SubscribeContext.cc
type SubCommandType (line 23) | enum class SubCommandType
function formatSubscribeCommand (line 31) | static std::string formatSubscribeCommand(const std::string &channel,
FILE: nosql_lib/redis/src/SubscribeContext.h
function addMessageCallback (line 56) | void addMessageCallback(RedisMessageCallback &&messageCallback)
function disable (line 62) | void disable()
function clear (line 69) | void clear()
function isPattern_ (line 107) | bool isPattern_{false};
FILE: nosql_lib/redis/tests/redis_subscriber_test.cc
function DROGON_TEST (line 16) | DROGON_TEST(RedisSubscriberTest)
function main (line 98) | int main(int argc, char **argv)
FILE: nosql_lib/redis/tests/redis_test.cc
function DROGON_TEST (line 13) | DROGON_TEST(RedisTest)
function main (line 186) | int main(int argc, char **argv)
FILE: orm_lib/inc/drogon/orm/ArrayParser.h
function namespace (line 34) | namespace drogon
FILE: orm_lib/inc/drogon/orm/BaseBuilder.h
function namespace (line 30) | namespace drogon
function std (line 156) | inline std::vector<std::string> gen_args() const noexcept
function std (line 231) | inline std::future<ResultType> execAsyncFuture(
FILE: orm_lib/inc/drogon/orm/CoroMapper.h
function namespace (line 23) | namespace drogon
function internal (line 307) | inline internal::MapperAwaiter<std::vector<T>> findBy(
function internal (line 591) | inline internal::MapperAwaiter<size_t> deleteBy(const Criteria &criteria)
function deleteByPrimaryKey (line 621) | size_t> deleteByPrimaryKey(
FILE: orm_lib/inc/drogon/orm/Criteria.h
function namespace (line 25) | namespace Json
function namespace (line 30) | namespace drogon
FILE: orm_lib/inc/drogon/orm/DbClient.h
function namespace (line 46) | namespace internal
function SqlAwaiter (line 229) | SqlAwaiter execSqlCoro(const std::string &sql,
function class (line 385) | class Transaction : public DbClient
function await_suspend (line 399) | inline void internal::TransactionAwaiter::await_suspend(
FILE: orm_lib/inc/drogon/orm/DbConfig.h
function namespace (line 21) | namespace drogon::orm
FILE: orm_lib/inc/drogon/orm/DbListener.h
function namespace (line 22) | namespace trantor
function namespace (line 27) | namespace drogon
FILE: orm_lib/inc/drogon/orm/DbTypes.h
function namespace (line 17) | namespace drogon
FILE: orm_lib/inc/drogon/orm/Exception.h
function namespace (line 33) | namespace drogon
function class (line 282) | class UnexpectedRows : public RangeError
function class (line 296) | class FeatureNotSupported : public SqlError
function class (line 316) | class DataException : public SqlError
function class (line 335) | class IntegrityConstraintViolation : public SqlError
function class (line 354) | class RestrictViolation : public IntegrityConstraintViolation
function class (line 373) | class NotNullViolation : public IntegrityConstraintViolation
function class (line 392) | class ForeignKeyViolation : public IntegrityConstraintViolation
function class (line 411) | class UniqueViolation : public IntegrityConstraintViolation
function class (line 430) | class CheckViolation : public IntegrityConstraintViolation
function class (line 449) | class InvalidCursorState : public SqlError
function class (line 468) | class InvalidSqlStatementName : public SqlError
function class (line 487) | class InvalidCursorName : public SqlError
function class (line 506) | class SyntaxError : public SqlError
FILE: orm_lib/inc/drogon/orm/Field.h
function class (line 43) | class DROGON_EXPORT Field
FILE: orm_lib/inc/drogon/orm/FilterBuilder.h
function namespace (line 20) | namespace drogon
FILE: orm_lib/inc/drogon/orm/FunctionTraits.h
function namespace (line 21) | namespace drogon
FILE: orm_lib/inc/drogon/orm/Mapper.h
function namespace (line 27) | namespace drogon
function else (line 1964) | else if (client_->type() == ClientType::Mysql ||
FILE: orm_lib/inc/drogon/orm/QueryBuilder.h
function namespace (line 20) | namespace drogon
FILE: orm_lib/inc/drogon/orm/RestfulController.h
function namespace (line 26) | namespace drogon
FILE: orm_lib/inc/drogon/orm/Result.h
function namespace (line 27) | namespace drogon
FILE: orm_lib/inc/drogon/orm/ResultIterator.h
function namespace (line 23) | namespace drogon
function class (line 119) | class ConstReverseResultIterator : private ConstResultIterator
FILE: orm_lib/inc/drogon/orm/Row.h
function namespace (line 24) | namespace drogon
FILE: orm_lib/inc/drogon/orm/RowIterator.h
function namespace (line 23) | namespace drogon
function class (line 115) | class ConstReverseRowIterator : private ConstRowIterator
FILE: orm_lib/inc/drogon/orm/SqlBinder.h
function T (line 64) | T htonT(T value) noexcept
function htonll (line 76) | inline uint64_t htonll(uint64_t value)
function ntohll (line 81) | inline uint64_t ntohll(uint64_t value)
function ClientType (line 92) | enum class ClientType
function noexcept (line 562) | noexcept(true)
function noexcept (line 589) | noexcept(true)
function noexcept (line 594) | noexcept(true)
function else (line 637) | else if constexpr (std::is_same_v<T, uint32_t> ||
function else (line 645) | else if constexpr (std::is_same_v<T, int64_t> ||
function else (line 651) | else if constexpr (std::is_same_v<T, uint64_t> ||
function parametersNumber_ (line 679) | size_t parametersNumber_{0}
function Mode (line 684) | Mode mode_{Mode::NonBlocking};
FILE: orm_lib/inc/drogon/orm/TransformBuilder.h
function namespace (line 21) | namespace drogon
FILE: orm_lib/src/ArrayParser.cc
function parse_single_quoted_string (line 79) | std::string parse_single_quoted_string(const char begin[], const char en...
function parse_double_quoted_string (line 131) | std::string parse_double_quoted_string(const char begin[], const char en...
function parse_unquoted_string (line 173) | std::string parse_unquoted_string(const char begin[], const char end[])
FILE: orm_lib/src/Criteria.cc
type drogon (line 18) | namespace drogon
type orm (line 20) | namespace orm
function Criteria (line 22) | const Criteria operator&&(Criteria cond1, Criteria cond2)
function Criteria (line 56) | const Criteria operator||(Criteria cond1, Criteria cond2)
FILE: orm_lib/src/DbClientImpl.cc
function DbConnectionPtr (line 377) | DbConnectionPtr DbClientImpl::newConnection(trantor::EventLoop *loop)
FILE: orm_lib/src/DbClientImpl.h
function hasAvailableConnections (line 59) | bool hasAvailableConnections() const noexcept override;
function autoBatch_ (line 75) | bool autoBatch_{false};
FILE: orm_lib/src/DbClientLockFree.cc
function DbConnectionPtr (line 406) | DbConnectionPtr DbClientLockFree::newConnection()
FILE: orm_lib/src/DbClientLockFree.h
function namespace (line 28) | namespace drogon
FILE: orm_lib/src/DbClientManager.cc
function escapeConnString (line 25) | inline std::string escapeConnString(const std::string &str)
function initFastDbClients (line 45) | static void initFastDbClients(IOThreadStorage<orm::DbClientPtr> &storage,
function buildConnStr (line 147) | static std::string buildConnStr(const std::string &host,
FILE: orm_lib/src/DbConnection.h
function namespace (line 29) | namespace drogon
FILE: orm_lib/src/Result.cc
function ConstResultIterator (line 93) | ConstResultIterator ConstResultIterator::operator++(int)
function ConstResultIterator (line 100) | ConstResultIterator ConstResultIterator::operator--(int)
function ConstReverseResultIterator (line 107) | ConstReverseResultIterator ConstReverseResultIterator::operator++(int)
function ConstReverseResultIterator (line 114) | ConstReverseResultIterator ConstReverseResultIterator::operator--(int)
function Result (line 178) | Result &Result::operator=(const Result &r) noexcept
function Result (line 184) | Result &Result::operator=(Result &&r) noexcept
FILE: orm_lib/src/ResultImpl.h
function namespace (line 20) | namespace drogon
FILE: orm_lib/src/Row.cc
function ConstRowIterator (line 122) | ConstRowIterator ConstRowIterator::operator++(int)
function ConstRowIterator (line 129) | ConstRowIterator ConstRowIterator::operator--(int)
function ConstReverseRowIterator (line 136) | ConstReverseRowIterator ConstReverseRowIterator::operator++(int)
function ConstReverseRowIterator (line 143) | ConstReverseRowIterator ConstReverseRowIterator::operator--(int)
FILE: orm_lib/src/SqlBinder.cc
function SqlBinder (line 140) | SqlBinder &SqlBinder::operator<<(const RawParameter ¶m)
function SqlBinder (line 150) | SqlBinder &SqlBinder::operator<<(RawParameter &¶m)
function SqlBinder (line 160) | SqlBinder &SqlBinder::operator<<(const std::string_view &str)
function SqlBinder (line 182) | SqlBinder &SqlBinder::operator<<(const std::string &str)
function SqlBinder (line 204) | SqlBinder &SqlBinder::operator<<(std::string &&str)
function SqlBinder (line 227) | SqlBinder &SqlBinder::operator<<(const std::vector<char> &v)
function SqlBinder (line 250) | SqlBinder &SqlBinder::operator<<(std::vector<char> &&v)
function SqlBinder (line 273) | SqlBinder &SqlBinder::operator<<(double f)
function SqlBinder (line 295) | SqlBinder &SqlBinder::operator<<(std::nullptr_t)
function SqlBinder (line 315) | SqlBinder &SqlBinder::operator<<(DefaultValue dv)
FILE: orm_lib/src/TransactionImpl.h
function namespace (line 22) | namespace drogon
FILE: orm_lib/src/mysql_impl/MysqlConnection.cc
type drogon (line 35) | namespace drogon
type orm (line 37) | namespace orm
function Result (line 39) | Result makeResult(std::shared_ptr<MYSQL_RES> &&r = nullptr,
FILE: orm_lib/src/mysql_impl/MysqlConnection.h
function namespace (line 28) | namespace drogon
FILE: orm_lib/src/mysql_impl/MysqlResultImpl.h
function namespace (line 25) | namespace drogon
FILE: orm_lib/src/mysql_impl/test/test1.cc
function main (line 13) | int main()
FILE: orm_lib/src/postgresql_impl/PgBatchConnection.cc
type drogon (line 27) | namespace drogon
type orm (line 29) | namespace orm
function Result (line 33) | Result makeResult(std::shared_ptr<PGresult> &&r = nullptr)
function checkSql (line 38) | bool checkSql(const std::string_view &sql_)
FILE: orm_lib/src/postgresql_impl/PgConnection.cc
type drogon (line 27) | namespace drogon
type orm (line 29) | namespace orm
function Result (line 31) | Result makeResult(std::shared_ptr<PGresult> &&r = nullptr)
FILE: orm_lib/src/postgresql_impl/PgConnection.h
function namespace (line 31) | namespace drogon
function disconnect (line 94) | void disconnect() override;
function preparedStatementsID_ (line 110) | size_t preparedStatementsID_{0}
function parametersNumber_ (line 132) | int parametersNumber_{0}
function sendBatchEnd_ (line 146) | bool sendBatchEnd_{false};
FILE: orm_lib/src/postgresql_impl/PgListener.cc
function PgConnectionPtr (line 245) | PgConnectionPtr PgListener::newConnection(
FILE: orm_lib/src/postgresql_impl/PgListener.h
function namespace (line 25) | namespace drogon
FILE: orm_lib/src/postgresql_impl/PostgreSQLResultImpl.h
function namespace (line 23) | namespace drogon
FILE: orm_lib/src/postgresql_impl/test/test1.cc
function main (line 9) | int main()
FILE: orm_lib/src/postgresql_impl/test/test2.cc
class User (line 13) | class User
method User (line 22) | explicit User(const Row &r)
function main (line 43) | int main()
FILE: orm_lib/src/sqlite3_impl/Sqlite3Connection.h
function namespace (line 32) | namespace drogon
FILE: orm_lib/src/sqlite3_impl/Sqlite3ResultImpl.h
function namespace (line 25) | namespace drogon
FILE: orm_lib/src/sqlite3_impl/test/Groups.h
function namespace (line 26) | namespace drogon
function namespace (line 35) | namespace drogon_model
FILE: orm_lib/src/sqlite3_impl/test/test1.cc
function main (line 15) | int main()
FILE: orm_lib/tests/conn_options_test.cc
function DROGON_TEST (line 10) | DROGON_TEST(ConnOptionsTest)
function main (line 65) | int main(int argc, char **argv)
FILE: orm_lib/tests/db_api_test.cc
function DROGON_TEST (line 9) | DROGON_TEST(DbApiTest)
function parseJson (line 109) | bool parseJson(std::string_view str, Json::Value *root, Json::String *errs)
function main (line 121) | int main(int argc, char **argv)
FILE: orm_lib/tests/db_listener_test.cc
function DROGON_TEST (line 31) | DROGON_TEST(ListenNotifyTest)
function main (line 86) | int main(int argc, char **argv)
FILE: orm_lib/tests/db_test.cc
function expFunction (line 57) | void expFunction(const DrogonDbException &e)
function DROGON_TEST (line 63) | DROGON_TEST(PostgreTest)
function DROGON_TEST (line 1495) | DROGON_TEST(MySQLTest)
function DROGON_TEST (line 2746) | DROGON_TEST(SQLite3Test)
function main (line 4068) | int main(int argc, char **argv)
FILE: orm_lib/tests/mysql/Blog.cc
function Category (line 702) | Category Blog::getCategory(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/mysql/Blog.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/mysql/BlogTag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/mysql/Category.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/mysql/Tag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/mysql/Users.cc
function Wallets (line 1811) | Wallets Users::getWallet(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/mysql/Users.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/mysql/Wallets.cc
function Users (line 706) | Users Wallets::getUser(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/mysql/Wallets.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/pipeline_test.cpp
function DROGON_TEST (line 26) | DROGON_TEST(PgPipelineTest)
function main (line 233) | int main(int argc, char **argv)
FILE: orm_lib/tests/postgresql/Blog.cc
function Category (line 701) | Category Blog::getCategory(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/postgresql/Blog.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/postgresql/BlogTag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/postgresql/Category.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/postgresql/Tag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/postgresql/Users.cc
function Wallets (line 1810) | Wallets Users::getWallet(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/postgresql/Users.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/postgresql/Wallets.cc
function Users (line 705) | Users Wallets::getUser(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/postgresql/Wallets.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/Blog.cc
function Category (line 723) | Category Blog::getCategory(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/sqlite3/Blog.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/BlogTag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/Category.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/Tag.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/Users.cc
type tm (line 99) | struct tm
type tm (line 183) | struct tm
type tm (line 312) | struct tm
type tm (line 421) | struct tm
type tm (line 549) | struct tm
type tm (line 657) | struct tm
function Wallets (line 2058) | Wallets Users::getWallet(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/sqlite3/Users.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: orm_lib/tests/sqlite3/Wallets.cc
function Users (line 704) | Users Wallets::getUser(const DbClientPtr &clientPtr) const
FILE: orm_lib/tests/sqlite3/Wallets.h
function namespace (line 29) | namespace drogon
function namespace (line 38) | namespace drogon_model
FILE: third_party/mman-win32/mman.c
function __map_mman_error (line 12) | static int __map_mman_error(const DWORD err, const int deferr)
function DWORD (line 20) | static DWORD __map_mmap_prot_page(const int prot)
function DWORD (line 41) | static DWORD __map_mmap_prot_file(const int prot)
function munmap (line 134) | int munmap(void *addr, size_t len)
function _mprotect (line 144) | int _mprotect(void *addr, size_t len, int prot)
function msync (line 157) | int msync(void *addr, size_t len, int flags)
function mlock (line 167) | int mlock(const void *addr, size_t len)
function munlock (line 177) | int munlock(const void *addr, size_t len)
FILE: third_party/mman-win32/mman.h
type OffsetType (line 34) | typedef int64_t OffsetType;
type OffsetType (line 36) | typedef uint32_t OffsetType;
FILE: third_party/mman-win32/test.c
function test_anon_map_readwrite (line 14) | int test_anon_map_readwrite()
function test_anon_map_readonly (line 34) | int test_anon_map_readonly()
function test_anon_map_writeonly (line 54) | int test_anon_map_writeonly()
function test_anon_map_readonly_nowrite (line 74) | int test_anon_map_readonly_nowrite()
function test_file_map_readwrite (line 96) | int test_file_map_readwrite()
function test_file_map_mlock_munlock (line 123) | int test_file_map_mlock_munlock()
function test_file_map_msync (line 173) | int test_file_map_msync()
function main (line 219) | int main()
Condensed preview — 545 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,656K chars).
[
{
"path": ".Doxyfile",
"chars": 110633,
"preview": "# Doxyfile 1.8.16\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org)"
},
{
"path": ".clang-format",
"chars": 4130,
"preview": "---\nLanguage: Cpp\n# BasedOnStyle: Google\nAccessModifierOffset: -2\nAlignAfterOpenBracket: Align\nAlignConsecutiveA"
},
{
"path": ".github/FUNDING.yml",
"chars": 612,
"preview": "# These are supported funding model platforms\n\ngithub: drogonframework \npatreon: # Replace with a single Patreon usernam"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 1132,
"preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Notice**\nIf yo"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 893,
"preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Notice**\nIf"
},
{
"path": ".github/dependabot.yml",
"chars": 442,
"preview": "# To get started with Dependabot version updates, you'll need to specify which\n# package ecosystems to update and where "
},
{
"path": ".github/workflows/cmake.yml",
"chars": 8127,
"preview": "name: Build & Test\n\non:\n push:\n branches: [master]\n pull_request:\n workflow_dispatch:\n\nconcurrency:\n group: ${{ g"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 2618,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ 'master' ]\n pull_request:\n # The branches below must be a subset of the "
},
{
"path": ".github/workflows/codespell.yml",
"chars": 430,
"preview": "# Look for typos in the codebase using codespell.\n# https://github.com/codespell-project/codespell#readme\nname: codespel"
},
{
"path": ".github/workflows/cpp.yml",
"chars": 805,
"preview": "name: C++\n\non:\n push:\n branches: [master]\n pull_request:\n\npermissions:\n contents: read\n\njobs:\n format:\n runs-o"
},
{
"path": ".github/workflows/docker-publish.yml",
"chars": 626,
"preview": "name: Build and Push Docker Image\n\non:\n release:\n types: [created] # 当新版本被创建时触发\n\njobs:\n build:\n runs-on: ubuntu"
},
{
"path": ".gitignore",
"chars": 447,
"preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic"
},
{
"path": ".gitmodules",
"chars": 100,
"preview": "[submodule \"trantor\"]\n\tpath = trantor\n\turl = https://github.com/an-tao/trantor.git\n\tbranch = master\n"
},
{
"path": "CMakeLists.txt",
"chars": 31929,
"preview": "cmake_minimum_required(VERSION 3.5...3.31)\n\nproject(drogon)\n\nmessage(STATUS \"compiler: \" ${CMAKE_CXX_COMPILER_ID})\n\nopti"
},
{
"path": "CONTRIBUTING.md",
"chars": 4009,
"preview": "# Contributing\n\n**Drogon** is an open source project at its heart and every contribution is\nwelcome. By participating in"
},
{
"path": "CPPLINT.cfg",
"chars": 820,
"preview": "# Stop searching for additional config files.\nset noparent\n\nexclude_files=trantor\nexclude_files=build\n\n# Use non-const r"
},
{
"path": "ChangeLog.md",
"chars": 43316,
"preview": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\n## [Unreleased]\n\n### Added\n\n- dg_ctl "
},
{
"path": "LICENSE",
"chars": 1068,
"preview": "MIT License\n\nCopyright (c) 2019-2023 An Tao\n\nPermission is hereby granted, free of charge, to any person obtaining a cop"
},
{
"path": "README.md",
"chars": 10792,
"preview": "\n\n[\n\n[\n\n[ {\n\n #Update the submodule and initialize\n git submodule"
},
{
"path": "cmake/DrogonUtilities.cmake",
"chars": 2723,
"preview": "# ##############################################################################\n# function drogon_create_views(target s"
},
{
"path": "cmake/Packages.cmake",
"chars": 1250,
"preview": "include(GNUInstallDirs)\n\nset(CPACK_RESOURCE_FILE_LICENSE \"${PROJECT_SOURCE_DIR}/LICENSE\")\nset(CPACK_PACKAGE_CONTACT \"htt"
},
{
"path": "cmake/ParseAndAddDrogonTests.cmake",
"chars": 4115,
"preview": "#==================================================================================================#\n# Adapted and re-wr"
},
{
"path": "cmake/templates/DrogonConfig.cmake.in",
"chars": 1838,
"preview": "# - Config file for the Drogon package\n# It defines the following variables\n# DROGON_INCLUDE_DIRS - include directories"
},
{
"path": "cmake/templates/config.h.in",
"chars": 443,
"preview": "#pragma once\n\n#cmakedefine01 USE_POSTGRESQL\n#cmakedefine01 LIBPQ_SUPPORTS_BATCH_MODE\n#cmakedefine01 USE_MYSQL\n#cmakedefi"
},
{
"path": "cmake/templates/version.h.in",
"chars": 215,
"preview": "#pragma once\n\n#define MAJOR @DROGON_MAJOR_VERSION@\n#define MINOR @DROGON_MINOR_VERSION@\n#define PATCH @DROGON_PATCH_VERS"
},
{
"path": "cmake/tests/check_has_std_filesystem_path.cc",
"chars": 99,
"preview": "#include <filesystem>\r\n\r\nint main()\r\n{\r\n std::filesystem::path aPath(\"../\");\r\n return 0;\r\n}\r\n"
},
{
"path": "cmake/tests/normal_uuid_lib_test.cc",
"chars": 84,
"preview": "#include <uuid.h>\nint main()\n{\n uuid_t uu;\n uuid_generate(uu);\n return 0;\n}"
},
{
"path": "cmake/tests/ossp_uuid_lib_test.cc",
"chars": 123,
"preview": "#include <uuid.h>\nint main()\n{\n uuid_t *uuid;\n uuid_create(&uuid);\n uuid_make(uuid, UUID_MAKE_V1);\n return 0"
},
{
"path": "cmake/tests/test_libpq_batch_mode.cc",
"chars": 153,
"preview": "#include <libpq-fe.h>\n\nint main()\n{\n PQenterPipelineMode(NULL);\n PQexitPipelineMode(NULL);\n PQpipelineSync(NULL"
},
{
"path": "cmake_modules/FindBrotli.cmake",
"chars": 2230,
"preview": "# ***************************************************************************\n# _ _ _"
},
{
"path": "cmake_modules/FindFilesystem.cmake",
"chars": 8772,
"preview": "# Distributed under the OSI-approved BSD 3-Clause License. See accompanying\n# file Copyright.txt or https://cmake.org/l"
},
{
"path": "cmake_modules/FindHiredis.cmake",
"chars": 1383,
"preview": "# Try to find hiredis\n# Once done, this will define\n#\n# HIREDIS_FOUND - system has hiredis\n# HIREDIS_INCLUDE_DIRS"
},
{
"path": "cmake_modules/FindJsoncpp.cmake",
"chars": 2746,
"preview": "# Find jsoncpp\n#\n# Find the jsoncpp includes and library\n#\n# if you nee to add a custom library search path, do it via v"
},
{
"path": "cmake_modules/FindMySQL.cmake",
"chars": 6111,
"preview": "# --------------------------------------------------------\n# Copyright (C) 1995-2007 MySQL AB\n#\n# This program is free s"
},
{
"path": "cmake_modules/FindSQLite3.cmake",
"chars": 1838,
"preview": "# Copyright (C) 2007-2009 LuaDist. Created by Peter Kapec <kapecp@gmail.com>\n# Redistribution and use of this file is al"
},
{
"path": "cmake_modules/FindUUID.cmake",
"chars": 3559,
"preview": "# * Try to find UUID Once done this will define\n#\n# UUID_FOUND - system has UUID \n# UUID_INCLUDE_DIRS - the UUID include"
},
{
"path": "cmake_modules/Findcoz-profiler.cmake",
"chars": 818,
"preview": "find_path(COZ_INCLUDE_DIRS NAMES coz.h)\n\nfind_library(COZ_LIBRARIES NAMES coz PATH_SUFFIXES coz-profiler)\n\ninclude(FindP"
},
{
"path": "cmake_modules/Findpg.cmake",
"chars": 1092,
"preview": "# Find PostgreSQL\n#\n# Find the PostgreSQL includes and library\n#\n# This module defines PG_INCLUDE_DIRS, where to find he"
},
{
"path": "conanfile.txt",
"chars": 170,
"preview": "[requires]\njsoncpp/1.9.4\nzlib/1.2.11\ngtest/1.10.0\nsqlite3/3.40.1\n#libpq/13.2\nopenssl/1.1.1t\nhiredis/1.0.0\nbrotli/1.0.9\n\n"
},
{
"path": "config.example.json",
"chars": 18125,
"preview": "/* This is a JSON format configuration file\n */\n{\n /*\n //ssl:The global SSL settings. \"key\" and \"cert\" are the pat"
},
{
"path": "config.example.yaml",
"chars": 15012,
"preview": "# This is a YAML format configuration file\n\n# ssl:The global SSL settings. \"key\" and \"cert\" are the path to the SSL key "
},
{
"path": "docker/alpine/Dockerfile",
"chars": 1172,
"preview": "FROM alpine:3.14\n\nARG USER=drogon\nARG UID=1000\nARG GID=1000\nARG USER_HOME=/drogon\n\nENV TZ=UTC\n\nRUN apk update && apk --n"
},
{
"path": "docker/alpine/README.md",
"chars": 781,
"preview": "## Build Docker Image\n\n```shell\n$ cd drogon/docker/alpine # from this repository\n$ docker build --no-cache --build-arg U"
},
{
"path": "docker/arch/Dockerfile",
"chars": 543,
"preview": "FROM archlinux:base-20210307.0.16708\n\nRUN pacman -Syu --noconfirm && pacman -S wget sudo cmake make git gcc jsoncpp post"
},
{
"path": "docker/ubuntu/Dockerfile",
"chars": 912,
"preview": "FROM ubuntu:22.04\n\nENV TZ=UTC\nRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone\n\nRUN apt-ge"
},
{
"path": "drogon_ctl/CMakeLists.txt",
"chars": 3259,
"preview": "set(ctl_sources\n cmd.cc\n create.cc\n create_controller.cc\n create_filter.cc\n create_model.cc\n create_pl"
},
{
"path": "drogon_ctl/CommandHandler.h",
"chars": 719,
"preview": "/**\n *\n * CommandHandler.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "drogon_ctl/CopyDlls.cmake",
"chars": 344,
"preview": "make_directory(\"${INSTALL_BIN_DIR}\")\nget_filename_component(CTL_PATH ${CTL_FILE} DIRECTORY)\nfile(GLOB DLL_FILES ${CTL_PA"
},
{
"path": "drogon_ctl/cmd.cc",
"chars": 1315,
"preview": "/**\n *\n * cmd.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon\n "
},
{
"path": "drogon_ctl/cmd.h",
"chars": 432,
"preview": "/**\n *\n * cmd.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon\n *"
},
{
"path": "drogon_ctl/create.cc",
"chars": 2221,
"preview": "/**\n *\n * @file create.cc\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.co"
},
{
"path": "drogon_ctl/create.h",
"chars": 799,
"preview": "/**\n *\n * create.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon"
},
{
"path": "drogon_ctl/create_controller.cc",
"chars": 15596,
"preview": "/**\n *\n * create_controller.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/a"
},
{
"path": "drogon_ctl/create_controller.h",
"chars": 2142,
"preview": "/**\n *\n * create_controller.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an"
},
{
"path": "drogon_ctl/create_filter.cc",
"chars": 3533,
"preview": "/**\n *\n * create_filter.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "drogon_ctl/create_filter.h",
"chars": 697,
"preview": "/**\n *\n * create_filter.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao"
},
{
"path": "drogon_ctl/create_model.cc",
"chars": 51355,
"preview": "/**\n *\n * create_model.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao"
},
{
"path": "drogon_ctl/create_model.h",
"chars": 11737,
"preview": "/**\n *\n * create_model.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/"
},
{
"path": "drogon_ctl/create_plugin.cc",
"chars": 3528,
"preview": "/**\n *\n * create_plugin.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "drogon_ctl/create_plugin.h",
"chars": 697,
"preview": "/**\n *\n * create_plugin.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao"
},
{
"path": "drogon_ctl/create_project.cc",
"chars": 4071,
"preview": "/**\n *\n * create_project.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-t"
},
{
"path": "drogon_ctl/create_project.h",
"chars": 746,
"preview": "/**\n *\n * create_project.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "drogon_ctl/create_view.cc",
"chars": 18875,
"preview": "/**\n *\n * @file create_view.cc\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://gith"
},
{
"path": "drogon_ctl/create_view.h",
"chars": 1207,
"preview": "/**\n *\n * @file create_view.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://githu"
},
{
"path": "drogon_ctl/help.cc",
"chars": 2077,
"preview": "/**\n *\n * help.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon\n"
},
{
"path": "drogon_ctl/help.h",
"chars": 684,
"preview": "/**\n *\n * help.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon\n "
},
{
"path": "drogon_ctl/main.cc",
"chars": 876,
"preview": "/**\n *\n * @file main.cc\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/"
},
{
"path": "drogon_ctl/press.cc",
"chars": 14210,
"preview": "/**\n *\n * press.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon"
},
{
"path": "drogon_ctl/press.h",
"chars": 1932,
"preview": "/**\n *\n * press.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon\n"
},
{
"path": "drogon_ctl/templates/cmake.csp",
"chars": 2686,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject([[ProjectName]] CXX)\n\ninclude(CheckIncludeFileCXX)\n\ncheck_include_file_cxx(a"
},
{
"path": "drogon_ctl/templates/config_json.csp",
"chars": 17922,
"preview": "/* This is a JSON format configuration file\n */\n{\n /*\n //ssl:The global SSL settings. \"key\" and \"cert\" are the pat"
},
{
"path": "drogon_ctl/templates/config_yaml.csp",
"chars": 14915,
"preview": "# This is a YAML format configuration file\n\n# ssl:The global SSL settings. \"key\" and \"cert\" are the path to the SSL key "
},
{
"path": "drogon_ctl/templates/demoMain.csp",
"chars": 375,
"preview": "#include <drogon/drogon.h>\nint main() {\n //Set HTTP listener address and port\n drogon::app().addListener(\"0.0.0.0\""
},
{
"path": "drogon_ctl/templates/filter_cc.csp",
"chars": 621,
"preview": "/**\n *\n * [[filename]].cc\n *\n */\n\n#include \"[[filename]].h\"\n\nusing namespace drogon;\n<%c++auto namespaceStr=@@.get<std:"
},
{
"path": "drogon_ctl/templates/filter_h.csp",
"chars": 613,
"preview": "/**\n *\n * [[filename]].h\n *\n */\n\n#pragma once\n\n#include <drogon/HttpFilter.h>\nusing namespace drogon;\n<%c++\nauto namesp"
},
{
"path": "drogon_ctl/templates/gitignore.csp",
"chars": 9631,
"preview": "# Created by https://www.toptal.com/developers/gitignore/api/intellij+all,visualstudio,visualstudiocode,cmake,c,c++\n# Ed"
},
{
"path": "drogon_ctl/templates/model_cc.csp",
"chars": 80129,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n/**\n *\n * [[className]].cc\n * DO NOT EDIT. This file is "
},
{
"path": "drogon_ctl/templates/model_h.csp",
"chars": 18567,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n/**\n *\n * [[className]].h\n * DO NOT EDIT. This file is g"
},
{
"path": "drogon_ctl/templates/model_json.csp",
"chars": 4148,
"preview": "{\n //rdbms: server type, postgresql,mysql or sqlite3\n \"rdbms\": \"postgresql\",\n //filename: sqlite3 db file name\n"
},
{
"path": "drogon_ctl/templates/plugin_cc.csp",
"chars": 393,
"preview": "/**\n *\n * [[filename]].cc\n *\n */\n\n#include \"[[filename]].h\"\n\nusing namespace drogon;\n<%c++auto namespaceStr=@@.get<std:"
},
{
"path": "drogon_ctl/templates/plugin_h.csp",
"chars": 784,
"preview": "/**\n *\n * [[filename]].h\n *\n */\n\n#pragma once\n\n#include <drogon/plugins/Plugin.h>\n<%c++\nauto namespaceVector=@@.get<std"
},
{
"path": "drogon_ctl/templates/restful_controller_base_cc.csp",
"chars": 15636,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n\n/**\n *\n * [[fileName]]Base.cc\n * DO NOT EDIT. This file"
},
{
"path": "drogon_ctl/templates/restful_controller_base_h.csp",
"chars": 2493,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n/**\n *\n * [[fileName]]Base.h\n * DO NOT EDIT. This file i"
},
{
"path": "drogon_ctl/templates/restful_controller_cc.csp",
"chars": 1537,
"preview": "/**\n *\n * [[fileName]].cc\n * This file is generated by drogon_ctl\n *\n */\n\n#include \"[[fileName]].h\"\n#include <string>\n"
},
{
"path": "drogon_ctl/templates/restful_controller_custom_cc.csp",
"chars": 1994,
"preview": "/**\n *\n * [[fileName]].cc\n * This file is generated by drogon_ctl\n *\n */\n\n#include \"[[fileName]].h\"\n#include <string>\n"
},
{
"path": "drogon_ctl/templates/restful_controller_custom_h.csp",
"chars": 3090,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n/**\n *\n * [[fileName]].h\n * This file is generated by dr"
},
{
"path": "drogon_ctl/templates/restful_controller_h.csp",
"chars": 2592,
"preview": "<%inc#include \"create_model.h\"\nusing namespace drogon_ctl;\n%>\n/**\n *\n * [[fileName]].h\n * This file is generated by dr"
},
{
"path": "drogon_ctl/templates/test_cmake.csp",
"chars": 495,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject([[ProjectName]]_test CXX)\n\nadd_executable(${PROJECT_NAME} test_main.cc)\n\n# #"
},
{
"path": "drogon_ctl/templates/test_main.csp",
"chars": 777,
"preview": "#define DROGON_TEST_MAIN\n#include <drogon/drogon_test.h>\n#include <drogon/drogon.h>\n\nDROGON_TEST(BasicTest)\n{\n // Add"
},
{
"path": "drogon_ctl/version.cc",
"chars": 2124,
"preview": "/**\n *\n * version.cc\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drog"
},
{
"path": "drogon_ctl/version.h",
"chars": 728,
"preview": "/**\n *\n * version.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogo"
},
{
"path": "examples/CMakeLists.txt",
"chars": 2617,
"preview": "link_libraries(${PROJECT_NAME})\n\nset(benchmark_sources benchmark/BenchmarkCtrl.cc benchmark/JsonCtrl.cc\n "
},
{
"path": "examples/README.md",
"chars": 2921,
"preview": "# Drogon Examples\n\nThe following examples can help you understand how to use Drogon:\n\n1. [helloworld](https://github.com"
},
{
"path": "examples/async_stream/RequestStreamExampleCtrl.cc",
"chars": 5437,
"preview": "#include <drogon/drogon.h>\n#include <drogon/HttpController.h>\n#include <drogon/HttpRequest.h>\n#include <fstream>\n\nusing "
},
{
"path": "examples/async_stream/main.cc",
"chars": 4230,
"preview": "#include <drogon/drogon.h>\n#include <chrono>\n#include <functional>\n#include <mutex>\n#include <unordered_map>\n#include <t"
},
{
"path": "examples/benchmark/BenchmarkCtrl.cc",
"chars": 347,
"preview": "#include \"BenchmarkCtrl.h\"\n\nvoid BenchmarkCtrl::asyncHandleHttpRequest(\n const HttpRequestPtr &,\n std::function<vo"
},
{
"path": "examples/benchmark/BenchmarkCtrl.h",
"chars": 381,
"preview": "#pragma once\n#include <drogon/HttpSimpleController.h>\nusing namespace drogon;\n\nclass BenchmarkCtrl : public drogon::Http"
},
{
"path": "examples/benchmark/JsonCtrl.cc",
"chars": 301,
"preview": "#include \"JsonCtrl.h\"\n\nvoid JsonCtrl::asyncHandleHttpRequest(\n const HttpRequestPtr &,\n std::function<void(const H"
},
{
"path": "examples/benchmark/JsonCtrl.h",
"chars": 401,
"preview": "#pragma once\n#include <drogon/HttpSimpleController.h>\nusing namespace drogon;\n\nclass JsonCtrl : public drogon::HttpSimpl"
},
{
"path": "examples/benchmark/main.cc",
"chars": 629,
"preview": "#include <drogon/drogon.h>\n\nusing namespace drogon;\n\nint main()\n{\n app()\n .setLogPath(\"./\")\n .setLogLev"
},
{
"path": "examples/client_example/main.cc",
"chars": 2600,
"preview": "#include <drogon/drogon.h>\n\n#include <future>\n#include <iostream>\n\n#ifdef __linux__\n#include <sys/socket.h>\n#include <ne"
},
{
"path": "examples/cors/main.cc",
"chars": 5396,
"preview": "#include <drogon/HttpAppFramework.h>\n#include <drogon/HttpResponse.h>\n#include <drogon/drogon.h>\n#include \"trantor/utils"
},
{
"path": "examples/file_upload/FileUpload.csp",
"chars": 2862,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <title>File upload</title>\n <script type=\"text/javascrip"
},
{
"path": "examples/file_upload/file_upload.cc",
"chars": 1514,
"preview": "#include <drogon/drogon.h>\nusing namespace drogon;\n\nint main()\n{\n app().registerHandler(\n \"/\",\n [](cons"
},
{
"path": "examples/helloworld/HelloController.cc",
"chars": 1427,
"preview": "#include <drogon/HttpController.h>\n\nusing namespace drogon;\n\n// HttpControllers are automatically added to Drogon upon D"
},
{
"path": "examples/helloworld/HelloView.csp",
"chars": 469,
"preview": "<!DOCTYPE html>\n<html>\n<%c++\n auto name=@@.get<std::string>(\"name\");\n\tbool nameIsEmpty = name == \"\";\n\tif (nameIsEmpty"
},
{
"path": "examples/helloworld/HelloViewController.cc",
"chars": 998,
"preview": "#include <drogon/HttpSimpleController.h>\n#include <drogon/HttpResponse.h>\n\nusing namespace drogon;\n\n// HttpSimpleControl"
},
{
"path": "examples/helloworld/main.cc",
"chars": 3466,
"preview": "#include <trantor/utils/Logger.h>\n#ifdef _WIN32\n#include <ws2tcpip.h>\n#else\n#include <netinet/tcp.h>\n#include <sys/socke"
},
{
"path": "examples/jsonstore/README.md",
"chars": 3662,
"preview": "This folder contains a [jsonstore](https://github.com/bluzi/jsonstore)-like storage service. But is multi-threaded and s"
},
{
"path": "examples/jsonstore/main.cc",
"chars": 6567,
"preview": "#include <drogon/drogon.h>\n\nusing namespace drogon;\n\nHttpResponsePtr makeFailedResponse()\n{\n Json::Value json;\n js"
},
{
"path": "examples/login_session/LoginPage.csp",
"chars": 580,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <title>session example</title>\n</head>\n\t<body>\n\t<form actio"
},
{
"path": "examples/login_session/LogoutPage.csp",
"chars": 277,
"preview": "<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"UTF-8\">\n <title>session example</title>\n</head>\n\t<body>\n\t<form actio"
},
{
"path": "examples/login_session/main.cc",
"chars": 2508,
"preview": "#include <drogon/drogon.h>\n#include <chrono>\nusing namespace drogon;\nusing namespace std::chrono_literals;\n\nint main()\n{"
},
{
"path": "examples/prometheus_example/.gitignore",
"chars": 9632,
"preview": "# Created by https://www.toptal.com/developers/gitignore/api/intellij+all,visualstudio,visualstudiocode,cmake,c,c++\n# Ed"
},
{
"path": "examples/prometheus_example/CMakeLists.txt",
"chars": 2689,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(prometheus_example CXX)\n\ninclude(CheckIncludeFileCXX)\n\ncheck_include_file_cx"
},
{
"path": "examples/prometheus_example/config.json",
"chars": 944,
"preview": "{\n\n \"listeners\": [\n {\n \"address\": \"0.0.0.0\",\n \"port\": 5555,\n \"https\": false\n "
},
{
"path": "examples/prometheus_example/controllers/PromTestCtrl.cc",
"chars": 865,
"preview": "#include \"PromTestCtrl.h\"\n\nusing namespace drogon;\n\nvoid PromTestCtrl::fast(const HttpRequestPtr &req,\n "
},
{
"path": "examples/prometheus_example/controllers/PromTestCtrl.h",
"chars": 593,
"preview": "#pragma once\n\n#include <drogon/HttpController.h>\n#include <drogon/utils/coroutine.h>\n\nusing namespace drogon;\n\nclass Pro"
},
{
"path": "examples/prometheus_example/filters/PromStat.cc",
"chars": 1587,
"preview": "/**\n *\n * PromStat.cc\n *\n */\n\n#include \"PromStat.h\"\n#include <drogon/plugins/PromExporter.h>\n#include <drogon/utils/mon"
},
{
"path": "examples/prometheus_example/filters/PromStat.h",
"chars": 388,
"preview": "/**\n *\n * PromStat.h\n *\n */\n\n#pragma once\n\n#include <drogon/HttpMiddleware.h>\n\nusing namespace drogon;\n\nclass PromStat "
},
{
"path": "examples/prometheus_example/main.cc",
"chars": 115,
"preview": "#include <drogon/drogon.h>\n\nint main()\n{\n drogon::app().loadConfigFile(\"../config.json\").run();\n return 0;\n}\n"
},
{
"path": "examples/prometheus_example/test/CMakeLists.txt",
"chars": 498,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(prometheus_example_test CXX)\n\nadd_executable(${PROJECT_NAME} test_main.cc)\n\n"
},
{
"path": "examples/prometheus_example/test/test_main.cc",
"chars": 777,
"preview": "#define DROGON_TEST_MAIN\n#include <drogon/drogon_test.h>\n#include <drogon/drogon.h>\n\nDROGON_TEST(BasicTest)\n{\n // Add"
},
{
"path": "examples/redis/CMakeLists.txt",
"chars": 2427,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(redis CXX)\n\ninclude(CheckIncludeFileCXX)\n\ncheck_include_file_cxx(any HAS_ANY"
},
{
"path": "examples/redis/README.md",
"chars": 768,
"preview": "# Redis example\n\nA simple redis example\n\n## Usage\n\nFirst of all you need redis running on the port 6379\n\n### Post\n\n```\nc"
},
{
"path": "examples/redis/controllers/Client.cc",
"chars": 2501,
"preview": "#include \"Client.h\"\n\nusing namespace drogon;\n\nvoid Client::get(const HttpRequestPtr &,\n std::function<vo"
},
{
"path": "examples/redis/controllers/Client.h",
"chars": 553,
"preview": "#pragma once\n#include <drogon/HttpController.h>\nusing namespace drogon;\n\nclass Client : public drogon::HttpController<Cl"
},
{
"path": "examples/redis/controllers/WsClient.cc",
"chars": 4571,
"preview": "#include \"WsClient.h\"\n\n#include <memory>\n#include <unordered_set>\n\nstruct ClientContext\n{\n std::unordered_set<std::st"
},
{
"path": "examples/redis/controllers/WsClient.h",
"chars": 615,
"preview": "#pragma once\n\n#include <drogon/WebSocketController.h>\n\nusing namespace drogon;\n\nclass WsClient : public drogon::WebSocke"
},
{
"path": "examples/redis/main.cc",
"chars": 303,
"preview": "#include <drogon/drogon.h>\n\nint main()\n{\n // Set HTTP listener address and port\n drogon::app().addListener(\"0.0.0."
},
{
"path": "examples/redis_cache/.gitignore",
"chars": 9632,
"preview": "# Created by https://www.toptal.com/developers/gitignore/api/intellij+all,visualstudio,visualstudiocode,cmake,c,c++\n# Ed"
},
{
"path": "examples/redis_cache/CMakeLists.txt",
"chars": 611,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(redis_cache CXX)\n\ninclude(CheckIncludeFileCXX)\n\nset(CMAKE_CXX_STANDARD 20)\n\n"
},
{
"path": "examples/redis_cache/DateFuncs.h",
"chars": 320,
"preview": "#pragma once\n#include \"RedisCache.h\"\n\ntemplate <>\ninline trantor::Date fromString<trantor::Date>(const std::string &str)"
},
{
"path": "examples/redis_cache/README.md",
"chars": 590,
"preview": "# Redis example\n\nAn example for using coroutines of redis clients. This example is a redis implementation of\nthe [local "
},
{
"path": "examples/redis_cache/RedisCache.h",
"chars": 767,
"preview": "#pragma once\n#include <drogon/utils/coroutine.h>\n#include <drogon/nosql/RedisClient.h>\n\ntemplate <typename T>\nT fromStri"
},
{
"path": "examples/redis_cache/config.json",
"chars": 12346,
"preview": "/* This is a JSON format configuration file\n */\n{\n \"listeners\": [\n {\n //address: Ip address,0.0.0.0"
},
{
"path": "examples/redis_cache/controllers/SlowCtrl.cc",
"chars": 1127,
"preview": "#include \"SlowCtrl.h\"\n#include \"RedisCache.h\"\n#include \"DateFuncs.h\"\n#include <drogon/drogon.h>\n#define VDate \"visitDate"
},
{
"path": "examples/redis_cache/controllers/SlowCtrl.h",
"chars": 642,
"preview": "#pragma once\n#include <drogon/HttpController.h>\nusing namespace drogon;\n\nclass SlowCtrl : public drogon::HttpController<"
},
{
"path": "examples/redis_cache/filters/TimeFilter.cc",
"chars": 2354,
"preview": "//\n// Created by antao on 2018/5/22.\n//\n\n#include \"TimeFilter.h\"\n#include <drogon/utils/coroutine.h>\n#include <drogon/dr"
},
{
"path": "examples/redis_cache/filters/TimeFilter.h",
"chars": 399,
"preview": "//\n// Created by antao on 2018/5/22.\n//\n\n#pragma once\n\n#include <drogon/HttpFilter.h>\nusing namespace drogon;\n\nclass Tim"
},
{
"path": "examples/redis_cache/main.cc",
"chars": 134,
"preview": "#include <drogon/drogon.h>\n\nint main()\n{\n drogon::app().loadConfigFile(\"../config.json\");\n drogon::app().run();\n "
},
{
"path": "examples/redis_cache/test/CMakeLists.txt",
"chars": 496,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(redis_cache_test CXX)\n\nadd_executable(${PROJECT_NAME} test_main.cc)\n\n# #####"
},
{
"path": "examples/redis_cache/test/test_main.cc",
"chars": 777,
"preview": "#define DROGON_TEST_MAIN\n#include <drogon/drogon_test.h>\n#include <drogon/drogon.h>\n\nDROGON_TEST(BasicTest)\n{\n // Add"
},
{
"path": "examples/redis_chat/CMakeLists.txt",
"chars": 2429,
"preview": "cmake_minimum_required(VERSION 3.5)\nproject(redis_chat CXX)\n\ninclude(CheckIncludeFileCXX)\n\ncheck_include_file_cxx(any HA"
},
{
"path": "examples/redis_chat/README.md",
"chars": 373,
"preview": "# Redis example\n\nA simple redis chat server\n\n## Usage\n\nFirst you need redis running on the port 6379.\n\n### Connect with "
},
{
"path": "examples/redis_chat/controllers/Chat.cc",
"chars": 7883,
"preview": "#include \"Chat.h\"\n\n#include <memory>\n#include <unordered_set>\n\nstatic void redisLogin(std::function<void(int)> &&callbac"
},
{
"path": "examples/redis_chat/controllers/Chat.h",
"chars": 583,
"preview": "#pragma once\n\n#include <drogon/WebSocketController.h>\n\nusing namespace drogon;\n\nclass Chat : public drogon::WebSocketCon"
},
{
"path": "examples/redis_chat/main.cc",
"chars": 186,
"preview": "#include <drogon/drogon.h>\n\nint main()\n{\n drogon::app().addListener(\"0.0.0.0\", 8080);\n drogon::app().createRedisCl"
},
{
"path": "examples/simple_reverse_proxy/.gitignore",
"chars": 301,
"preview": "# Prerequisites\n*.d\n\n# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic"
},
{
"path": "examples/simple_reverse_proxy/CMakeLists.txt",
"chars": 1917,
"preview": "cmake_minimum_required (VERSION 3.5)\nproject(simple_reverse_proxy CXX)\n\ninclude(CheckIncludeFileCXX)\n\ncheck_include_file"
},
{
"path": "examples/simple_reverse_proxy/README.md",
"chars": 192,
"preview": "### An example that shows how to use drogon as an http reverse proxy with a simple round robin.\n\nThis project is created"
},
{
"path": "examples/simple_reverse_proxy/config.json",
"chars": 8088,
"preview": "/* This is a JSON format configuration file\n */\n{\n /*\n //ssl: The global ssl files setting\n \"ssl\": {\n \"c"
},
{
"path": "examples/simple_reverse_proxy/main.cc",
"chars": 252,
"preview": "#include <drogon/drogon.h>\n\nint main()\n{\n // Set HTTP listener address and port\n drogon::app().loadConfigFile(\"../"
},
{
"path": "examples/simple_reverse_proxy/plugins/SimpleReverseProxy.cc",
"chars": 3146,
"preview": "/**\n *\n * @file SimpleReverseProxy.cc\n *\n */\n\n#include \"SimpleReverseProxy.h\"\n\nusing namespace drogon;\nusing namespace "
},
{
"path": "examples/simple_reverse_proxy/plugins/SimpleReverseProxy.h",
"chars": 1195,
"preview": "/**\n *\n * @file SimpleReverseProxy.h\n *\n */\n\n#pragma once\n\n#include <drogon/plugins/Plugin.h>\n#include <drogon/drogon.h"
},
{
"path": "examples/websocket_client/WebSocketClient.cc",
"chars": 2519,
"preview": "#include <drogon/WebSocketClient.h>\n#include <drogon/HttpAppFramework.h>\n\n#include <iostream>\n\nusing namespace drogon;\nu"
},
{
"path": "examples/websocket_server/WebSocketServer.cc",
"chars": 2467,
"preview": "#include <drogon/WebSocketController.h>\n#include <drogon/PubSubService.h>\n#include <drogon/HttpAppFramework.h>\nusing nam"
},
{
"path": "format.sh",
"chars": 574,
"preview": "#!/usr/bin/env bash\n\n# You can customize the clang-format path by setting the CLANG_FORMAT environment variable\nCLANG_FO"
},
{
"path": "lib/inc/drogon/Attribute.h",
"chars": 2946,
"preview": "/**\n *\n * Attribute.h\n * armstrong@sweelia.com\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github"
},
{
"path": "lib/inc/drogon/CacheMap.h",
"chars": 16789,
"preview": "/**\n *\n * @file CacheMap.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "lib/inc/drogon/Cookie.h",
"chars": 8920,
"preview": "/**\n *\n * @file Cookie.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com"
},
{
"path": "lib/inc/drogon/DrClassMap.h",
"chars": 4115,
"preview": "/**\n *\n * @file DrClassMap.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github"
},
{
"path": "lib/inc/drogon/DrObject.h",
"chars": 3314,
"preview": "/**\n *\n * @file DrObject.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.c"
},
{
"path": "lib/inc/drogon/DrTemplate.h",
"chars": 499,
"preview": "/**\n *\n * DrTemplate.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/dr"
},
{
"path": "lib/inc/drogon/DrTemplateBase.h",
"chars": 1531,
"preview": "/**\n *\n * @file DrTemplateBase.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://gi"
},
{
"path": "lib/inc/drogon/HttpAppFramework.h",
"chars": 63770,
"preview": "/**\n *\n * @file HttpAppFramework.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://"
},
{
"path": "lib/inc/drogon/HttpBinder.h",
"chars": 14500,
"preview": "/**\n *\n * @file HttpBinder.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github"
},
{
"path": "lib/inc/drogon/HttpClient.h",
"chars": 13396,
"preview": "/**\n *\n * @file HttpClient.h\n *\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://git"
},
{
"path": "lib/inc/drogon/HttpController.h",
"chars": 4510,
"preview": "/**\n *\n * HttpController.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-ta"
},
{
"path": "lib/inc/drogon/HttpFilter.h",
"chars": 4105,
"preview": "/**\n *\n * @file HttpFilter.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github"
},
{
"path": "lib/inc/drogon/HttpMiddleware.h",
"chars": 5481,
"preview": "/**\n *\n * @file HttpMiddleware.h\n * @author Nitromelon\n *\n * Copyright 2024, Nitromelon. All rights reserved.\n * ht"
},
{
"path": "lib/inc/drogon/HttpRequest.h",
"chars": 15933,
"preview": "/**\n *\n * @file HttpRequest.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://githu"
},
{
"path": "lib/inc/drogon/HttpResponse.h",
"chars": 22176,
"preview": "/**\n * @file HttpResponse.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github."
},
{
"path": "lib/inc/drogon/HttpSimpleController.h",
"chars": 2805,
"preview": "/**\n *\n * HttpSimpleController.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com"
},
{
"path": "lib/inc/drogon/HttpTypes.h",
"chars": 6830,
"preview": "/**\n * @file HttpTypes.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com"
},
{
"path": "lib/inc/drogon/HttpViewData.h",
"chars": 4624,
"preview": "/**\n *\n * @file HttpViewData.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://gith"
},
{
"path": "lib/inc/drogon/IOThreadStorage.h",
"chars": 4326,
"preview": "/**\n *\n * @file IOThreadStorage.h\n * @author Daniel Mensinger\n *\n * Copyright 2019, Daniel Mensinger. All rights res"
},
{
"path": "lib/inc/drogon/IntranetIpFilter.h",
"chars": 721,
"preview": "/**\n *\n * @file IntranetIpFilter.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://"
},
{
"path": "lib/inc/drogon/LocalHostFilter.h",
"chars": 712,
"preview": "/**\n *\n * @file LocalHostFilter.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://g"
},
{
"path": "lib/inc/drogon/MultiPart.h",
"chars": 5859,
"preview": "/**\n *\n * @file MultiPart.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github."
},
{
"path": "lib/inc/drogon/NotFound.h",
"chars": 740,
"preview": "// this file is generated by program automatically,don't modify it!\n\n/**\n *\n * @file NotFound.h\n * @author An Tao\n *\n "
},
{
"path": "lib/inc/drogon/PubSubService.h",
"chars": 8066,
"preview": "/**\n *\n * @file PubSubService.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://git"
},
{
"path": "lib/inc/drogon/RateLimiter.h",
"chars": 1888,
"preview": "#pragma once\n#include <drogon/exports.h>\n#include <memory>\n#include <chrono>\n#include <mutex>\n#include <string>\n\nnamespa"
},
{
"path": "lib/inc/drogon/RequestStream.h",
"chars": 2756,
"preview": "/**\n *\n * @file RequestStream.h\n * @author Nitromelon\n *\n * Copyright 2024, Nitromelon. All rights reserved.\n * htt"
},
{
"path": "lib/inc/drogon/Session.h",
"chars": 7225,
"preview": "/**\n *\n * @file Session.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.co"
},
{
"path": "lib/inc/drogon/UploadFile.h",
"chars": 1979,
"preview": "/**\n *\n * UploadFile.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/dr"
},
{
"path": "lib/inc/drogon/WebSocketClient.h",
"chars": 9537,
"preview": "/**\n *\n * @file WebSocketClient.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://g"
},
{
"path": "lib/inc/drogon/WebSocketConnection.h",
"chars": 7861,
"preview": "/**\n *\n * @file WebSocketConnection.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https"
},
{
"path": "lib/inc/drogon/WebSocketController.h",
"chars": 3757,
"preview": "/**\n *\n * WebSocketController.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/"
},
{
"path": "lib/inc/drogon/drogon.h",
"chars": 1382,
"preview": "/**\n *\n * drogon.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-tao/drogon"
},
{
"path": "lib/inc/drogon/drogon_callbacks.h",
"chars": 1184,
"preview": "/**\n *\n * drogon_callbacks.h\n * An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-"
},
{
"path": "lib/inc/drogon/drogon_test.h",
"chars": 30553,
"preview": "#pragma once\n#include <trantor/utils/NonCopyable.h>\n#include <drogon/DrObject.h>\n#include <drogon/exports.h>\n\n#include <"
},
{
"path": "lib/inc/drogon/plugins/AccessLogger.h",
"chars": 9333,
"preview": "/**\n *\n * AccessLogger.h\n *\n */\n\n#pragma once\n\n#include <drogon/HttpRequest.h>\n#include <drogon/HttpResponse.h>\n#includ"
},
{
"path": "lib/inc/drogon/plugins/GlobalFilters.h",
"chars": 1273,
"preview": "#pragma once\n\n#include <drogon/plugins/Plugin.h>\n#include <regex>\n#include <vector>\n#include <memory>\n#include <drogon/H"
},
{
"path": "lib/inc/drogon/plugins/Hodor.h",
"chars": 5262,
"preview": "/**\n * @file Hodor.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an-"
},
{
"path": "lib/inc/drogon/plugins/Plugin.h",
"chars": 2991,
"preview": "/**\n * @file Plugin.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github.com/an"
},
{
"path": "lib/inc/drogon/plugins/PromExporter.h",
"chars": 2590,
"preview": "/**\n * @file PromExporter.h\n * @author An Tao\n *\n * Copyright 2018, An Tao. All rights reserved.\n * https://github."
}
]
// ... and 345 more files (download for full content)
About this extraction
This page contains the full source code of the drogonframework/drogon GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 545 files (3.3 MB), approximately 894.9k tokens, and a symbol index with 1098 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.