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