Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-kde
Path: blob/main/ftp/fineftp-server/files/patch-git-gfc323ccece
16461 views
From fc323ccece40626a9bf67b7e1983ff2addd00fe4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fred=20Helmesj=C3=B6?= <[email protected]>
Date: Thu, 3 Apr 2025 08:12:05 +0200
Subject: [PATCH] Added compatibility with asio 1.33 and up (#77)

Mostly replaced deprecated 'io_service' with 'io_context'. The deprecated API was removed with asio 1.33.
---
 fineftp-server/src/ftp_session.cpp | 36 +++++++++++++++---------------
 fineftp-server/src/ftp_session.h   |  8 +++----
 fineftp-server/src/server_impl.cpp | 10 ++++-----
 fineftp-server/src/server_impl.h   |  2 +-
 4 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/fineftp-server/src/ftp_session.cpp b/fineftp-server/src/ftp_session.cpp
index 109d293..ae67095 100755
--- a/fineftp-server/src/ftp_session.cpp
+++ b/fineftp-server/src/ftp_session.cpp
@@ -44,18 +44,18 @@
 namespace fineftp
 {
 
-  FtpSession::FtpSession(asio::io_service& io_service, const UserDatabase& user_database, const std::function<void()>& completion_handler, std::ostream& output, std::ostream& error)
+  FtpSession::FtpSession(asio::io_context& io_context, const UserDatabase& user_database, const std::function<void()>& completion_handler, std::ostream& output, std::ostream& error)
     : completion_handler_   (completion_handler)
     , user_database_        (user_database)
-    , io_service_           (io_service)
-    , command_strand_       (io_service)
-    , command_socket_       (io_service)
+    , io_context_           (io_context)
+    , command_strand_       (io_context)
+    , command_socket_       (io_context)
     , data_type_binary_     (false)
     , shutdown_requested_   (false)
     , ftp_working_directory_("/")
-    , data_acceptor_        (io_service)
-    , data_socket_strand_   (io_service)
-    , timer_                (io_service)
+    , data_acceptor_        (io_context)
+    , data_socket_strand_   (io_context)
+    , timer_                (io_context)
     , output_(output)
     , error_(error)
   {
@@ -96,7 +96,7 @@ namespace fineftp
     command_socket_.set_option(asio::ip::tcp::no_delay(true), ec);
     if (ec) error_ << "Unable to set socket option tcp::no_delay: " << ec.message() << std::endl;
 
-    command_strand_.post([me = shared_from_this()]() { me->readFtpCommand(); });
+    asio::post(command_strand_, [me = shared_from_this()]() { me->readFtpCommand(); });
     sendFtpMessage(FtpMessage(FtpReplyCode::SERVICE_READY_FOR_NEW_USER, "Welcome to fineFTP Server"));
   }
 
@@ -116,7 +116,7 @@ namespace fineftp
 
   void FtpSession::sendRawFtpMessage(const std::string& raw_message)
   {
-    command_strand_.post([me = shared_from_this(), raw_message]()
+    asio::post(command_strand_, [me = shared_from_this(), raw_message]()
                          {
                            const bool write_in_progress = !me->command_output_queue_.empty();
                            me->command_output_queue_.push_back(raw_message);
@@ -188,7 +188,7 @@ namespace fineftp
                               me->data_acceptor_.close(ec_);
                             }
 
-                            me->data_socket_strand_.post([me]()
+                            asio::post(me->data_socket_strand_, [me]()
                             {
                               auto data_socket = me->data_socket_weakptr_.lock();
                               if (data_socket)
@@ -449,7 +449,7 @@ namespace fineftp
     }
     {
       asio::error_code ec;
-      data_acceptor_.listen(asio::socket_base::max_connections, ec);
+      data_acceptor_.listen(asio::socket_base::max_listen_connections, ec);
       if (ec)
       {
         error_ << "Error listening on data acceptor: " << ec.message() << std::endl;
@@ -1205,7 +1205,7 @@ namespace fineftp
 
   void FtpSession::sendDirectoryListing(const std::map<std::string, Filesystem::FileStatus>& directory_content)
   {
-    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_service_);
+    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 
     data_acceptor_.async_accept(*data_socket
                               , data_socket_strand_.wrap([data_socket, directory_content, me = shared_from_this()](auto ec)
@@ -1248,7 +1248,7 @@ namespace fineftp
 
   void FtpSession::sendNameList(const std::map<std::string, Filesystem::FileStatus>& directory_content)
   {
-    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_service_);
+    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 
     data_acceptor_.async_accept(*data_socket
                               , data_socket_strand_.wrap([data_socket, directory_content, me = shared_from_this()](auto ec)
@@ -1283,7 +1283,7 @@ namespace fineftp
 
   void FtpSession::sendFile(const std::shared_ptr<ReadableFile>& file)
   {
-    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_service_);
+    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 
     data_acceptor_.async_accept(*data_socket
                               , data_socket_strand_.wrap([data_socket, file, me = shared_from_this()](auto ec)
@@ -1352,7 +1352,7 @@ namespace fineftp
 
   void FtpSession::addDataToBufferAndSend(const std::shared_ptr<std::vector<char>>& data, const std::shared_ptr<asio::ip::tcp::socket>& data_socket)
   {
-    data_socket_strand_.post([me = shared_from_this(), data, data_socket]()
+    asio::post(data_socket_strand_, [me = shared_from_this(), data, data_socket]()
                             {
                               const bool write_in_progress = (!me->data_buffer_.empty());
 
@@ -1367,7 +1367,7 @@ namespace fineftp
 
   void FtpSession::writeDataToSocket(const std::shared_ptr<asio::ip::tcp::socket>& data_socket)
   {
-    data_socket_strand_.post(
+    asio::post(data_socket_strand_,
       [me = shared_from_this(), data_socket]()
       {
         auto data = me->data_buffer_.front();
@@ -1417,7 +1417,7 @@ namespace fineftp
 
   void FtpSession::receiveFile(const std::shared_ptr<WriteableFile>& file)
   {
-    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_service_);
+    auto data_socket = std::make_shared<asio::ip::tcp::socket>(io_context_);
 
     data_acceptor_.async_accept(*data_socket
                               , data_socket_strand_.wrap([data_socket, file, me = shared_from_this()](auto ec)
@@ -1469,7 +1469,7 @@ namespace fineftp
 
   void FtpSession::endDataReceiving(const std::shared_ptr<WriteableFile>& file, const std::shared_ptr<asio::ip::tcp::socket>& data_socket)
   {
-    data_socket_strand_.post([me = shared_from_this(), file, data_socket]()
+    asio::post(data_socket_strand_, [me = shared_from_this(), file, data_socket]()
                              {
                                file->close();
                                me->sendFtpMessage(FtpReplyCode::CLOSING_DATA_CONNECTION, "Done");
diff --git a/fineftp-server/src/ftp_session.h b/fineftp-server/src/ftp_session.h
index a448b9d..2d585b4 100755
--- a/fineftp-server/src/ftp_session.h
+++ b/fineftp-server/src/ftp_session.h
@@ -33,7 +33,7 @@ namespace fineftp
   // Public API
   ////////////////////////////////////////////////////////
   public:
-    FtpSession(asio::io_service& io_service, const UserDatabase& user_database, const std::function<void()>& completion_handler, std::ostream& output, std::ostream& error);
+    FtpSession(asio::io_context& io_context, const UserDatabase& user_database, const std::function<void()>& completion_handler, std::ostream& output, std::ostream& error);
 
     // Copy (disabled, as we are inheriting from shared_from_this)
     FtpSession(const FtpSession&)            = delete;
@@ -182,11 +182,11 @@ namespace fineftp
     std::shared_ptr<FtpUser> logged_in_user_;
 
     // "Global" io service
-    asio::io_service&        io_service_;
+    asio::io_context&        io_context_;
 
     // Command Socket.
     // Note that the command_strand_ is used to serialize access to all of the 9 member variables following it.
-    asio::io_service::strand command_strand_;
+    asio::io_context::strand command_strand_;
     asio::ip::tcp::socket    command_socket_;
     asio::streambuf          command_input_stream_;
     std::deque<std::string>  command_output_queue_;
@@ -204,7 +204,7 @@ namespace fineftp
     asio::ip::tcp::acceptor                        data_acceptor_;
 
     // Note that the data_socket_strand_ is used to serialize access to the 2 member variables following it.
-    asio::io_service::strand                       data_socket_strand_;
+    asio::io_context::strand                       data_socket_strand_;
     std::weak_ptr<asio::ip::tcp::socket>           data_socket_weakptr_;
     std::deque<std::shared_ptr<std::vector<char>>> data_buffer_;
 
diff --git a/fineftp-server/src/server_impl.cpp b/fineftp-server/src/server_impl.cpp
index dd1e00c..d7c7726 100644
--- a/fineftp-server/src/server_impl.cpp
+++ b/fineftp-server/src/server_impl.cpp
@@ -20,7 +20,7 @@ namespace fineftp
     : ftp_users_            (output, error)
     , port_                 (port)
     , address_              (address)
-    , acceptor_             (io_service_)
+    , acceptor_             (io_context_)
     , open_connection_count_(0)
     , output_               (output)
     , error_                (error)
@@ -43,7 +43,7 @@ namespace fineftp
 
   bool FtpServerImpl::start(size_t thread_count)
   {
-    auto ftp_session = std::make_shared<FtpSession>(io_service_, ftp_users_, [this]() { open_connection_count_--; }, output_, error_);
+    auto ftp_session = std::make_shared<FtpSession>(io_context_, ftp_users_, [this]() { open_connection_count_--; }, output_, error_);
 
     // set up the acceptor to listen on the tcp port
     asio::error_code make_address_ec;
@@ -108,7 +108,7 @@ namespace fineftp
 
     for (size_t i = 0; i < thread_count; i++)
     {
-      thread_pool_.emplace_back([this] {io_service_.run(); });
+      thread_pool_.emplace_back([this] {io_context_.run(); });
     }
     
     return true;
@@ -116,7 +116,7 @@ namespace fineftp
 
   void FtpServerImpl::stop()
   {
-    io_service_.stop();
+    io_context_.stop();
     for (std::thread& thread : thread_pool_)
     {
       thread.join();
@@ -140,7 +140,7 @@ namespace fineftp
 
     ftp_session->start();
 
-    auto new_session = std::make_shared<FtpSession>(io_service_, ftp_users_, [this]() { open_connection_count_--; }, output_, error_);
+    auto new_session = std::make_shared<FtpSession>(io_context_, ftp_users_, [this]() { open_connection_count_--; }, output_, error_);
 
     acceptor_.async_accept(new_session->getSocket()
                           , [this, new_session](auto ec)
diff --git a/fineftp-server/src/server_impl.h b/fineftp-server/src/server_impl.h
index 7f1c0d5..6e19cf5 100644
--- a/fineftp-server/src/server_impl.h
+++ b/fineftp-server/src/server_impl.h
@@ -55,7 +55,7 @@ namespace fineftp
     const std::string address_;
 
     std::vector<std::thread> thread_pool_;
-    asio::io_service         io_service_;
+    asio::io_context         io_context_;
     asio::ip::tcp::acceptor  acceptor_;
 
     std::atomic<int> open_connection_count_;