commit:     35b9d59e01a24b9ee7a6fecf948c95c49768956e
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 22 00:09:19 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Sun Dec 22 00:09:19 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=35b9d59e

dev-libs/botan: add 3.6.1

Closes: https://bugs.gentoo.org/946389
Signed-off-by: Sam James <sam <AT> gentoo.org>

 dev-libs/botan/Manifest                           |   2 +
 dev-libs/botan/botan-3.6.1.ebuild                 | 227 +++++++++++++++
 dev-libs/botan/files/botan-3.6.1-boost-1.87.patch | 322 ++++++++++++++++++++++
 3 files changed, 551 insertions(+)

diff --git a/dev-libs/botan/Manifest b/dev-libs/botan/Manifest
index 15dd4e0b8776..54dbb0c1c7ae 100644
--- a/dev-libs/botan/Manifest
+++ b/dev-libs/botan/Manifest
@@ -8,3 +8,5 @@ DIST Botan-3.2.0.tar.xz 8998204 BLAKE2B 
f21e7574af93ab3331607f4a4ecf1b2cbbc0db4b
 DIST Botan-3.2.0.tar.xz.asc 488 BLAKE2B 
f7bc716dd18eedf35928933e22c75de3d2731330dfdaf8a5048e8ad86e1f3896ea55294a64b7f82593af16dd2e4097a9ba68f25baa024e175b7334478bcf84a6
 SHA512 
3ee42ac73e1bd6cea0a2e9f468b88d67c02a4a69786c41ddf9fc7f94b6847be00e0f3f0f38f934ab599b8d6dd29006414294df8b371f5cf2422292f3dd176756
 DIST Botan-3.3.0.tar.xz 7164024 BLAKE2B 
051a24c28e6858fdff2af15d01a871ebe5bab11d773be821c0a56a55c725c91cf3119280195ac736f4df83305c1d4910430e6b26deded0d4c634e5c2fc23b389
 SHA512 
90930add225a2b4376046b3ed0177c71e7d19e983fb2b99c40751de5e6c3959b520eaa1e836782eb02ebc8aff8e9a4fd928f585de5e6b1798a8ad4aa0464f19b
 DIST Botan-3.3.0.tar.xz.asc 488 BLAKE2B 
043538ff2572a449d4d9ad4bba6d7cab78865e924f712d1b4d4aad9f378cc417f07c19a25adefa22b6e1c06259a50880414c11ce8d3ad1e7f815cf458dbbe6b8
 SHA512 
c951079c22665966b96cf18c20df7b709353b42dab4aeb33d021b4a8abbc0f06d8fe909f1a5db3e736b4f93b17374d8f832f7aa9f25757a5d5ab1604320581b2
+DIST Botan-3.6.1.tar.xz 7581864 BLAKE2B 
744eed158e021d26b9414b3a098e017e6e2c2160fc7fb6a0f24f6cbbb4b08501157108dedd7a71fc3645e27c86608a9ba5d18a11087adfd1c9b174ca3ce85b30
 SHA512 
06327c55bee5e0d2e142f81b997dd8a1ef98f61ef920b57f6eb4e80ebf6b3de1c62373b889d4a32e62509495792e0b46d5dcc82a6446266974b4d4ead8d9f287
+DIST Botan-3.6.1.tar.xz.asc 488 BLAKE2B 
3538c941f707a182f86226dfdbb8222570671e0bce3ca61137a5d978c2b1f5e658ffc1168d7e73a1861210adfac8aa661124c9cbc4950973f7b1e2c3360aab90
 SHA512 
871c6d91368d8a080e704afb53b1339c6d06aa57aaa45f260bccf1cb1ed31c635587ba930f954ab55668a7ca13b89b2f2acba3c0f1723e3f7190c6ebe9dc2e0b

diff --git a/dev-libs/botan/botan-3.6.1.ebuild 
b/dev-libs/botan/botan-3.6.1.ebuild
new file mode 100644
index 000000000000..a74ebb175427
--- /dev/null
+++ b/dev-libs/botan/botan-3.6.1.ebuild
@@ -0,0 +1,227 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/botan.asc
+inherit edo flag-o-matic multiprocessing ninja-utils python-r1 toolchain-funcs 
verify-sig
+
+MY_P="Botan-${PV}"
+DESCRIPTION="C++ crypto library"
+HOMEPAGE="https://botan.randombit.net/";
+SRC_URI="https://botan.randombit.net/releases/${MY_P}.tar.xz";
+SRC_URI+=" verify-sig? ( 
https://botan.randombit.net/releases/${MY_P}.tar.xz.asc )"
+S="${WORKDIR}/${MY_P}"
+
+LICENSE="BSD-2"
+# New major versions are parallel-installable
+SLOT="$(ver_cut 1)/$(ver_cut 1-2)" # soname version
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 
~ppc-macos"
+IUSE="doc boost bzip2 lzma python static-libs sqlite test tools zlib"
+CPU_USE=(
+       cpu_flags_arm_{aes,neon,sha1,sha2}
+       cpu_flags_ppc_altivec
+       cpu_flags_x86_{aes,avx2,popcnt,rdrand,sha,sse2,ssse3,sse4_1,sse4_2}
+)
+IUSE+=" ${CPU_USE[@]}"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
+
+# NOTE: Boost is needed at runtime too for the CLI tool.
+DEPEND="
+       boost? ( dev-libs/boost:= )
+       bzip2? ( >=app-arch/bzip2-1.0.5:= )
+       lzma? ( app-arch/xz-utils:= )
+       python? ( ${PYTHON_DEPS} )
+       sqlite? ( dev-db/sqlite:3= )
+       zlib? ( >=sys-libs/zlib-1.2.3:= )
+"
+RDEPEND="
+       ${DEPEND}
+       !<dev-libs/botan-2.19.3-r1:2[tools]
+"
+BDEPEND="
+       ${PYTHON_DEPS}
+       ${NINJA_DEPEND}
+       $(python_gen_any_dep '
+               doc? ( dev-python/sphinx[${PYTHON_USEDEP}] )
+       ')
+       || ( >=sys-devel/gcc-11:* >=llvm-core/clang-14:* )
+       verify-sig? ( sec-keys/openpgp-keys-botan )
+"
+
+# NOTE: Considering patching Botan?
+# Please see upstream's guidance:
+# 
https://botan.randombit.net/handbook/packaging.html#minimize-distribution-patches
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.6.1-boost-1.87.patch
+)
+
+python_check_deps() {
+       use doc || return 0
+       python_has_version "dev-python/sphinx[${PYTHON_USEDEP}]"
+}
+
+pkg_pretend() {
+       [[ ${MERGE_TYPE} == binary ]] && return
+
+       # bug #908958
+       if tc-is-gcc && ver_test $(gcc-version) -lt 11 ; then
+               eerror "Botan needs >=gcc-11 or >=clang-14 to compile."
+               eerror "Please upgrade GCC: emerge -v1 sys-devel/gcc"
+               die "GCC version is too old to compile Botan!"
+       elif tc-is-clang && ver_test $(clang-version) -lt 14 ; then
+               eerror "Botan needs >=gcc-11 or >=clang-14 to compile."
+               eerror "Please upgrade Clang: emerge -v1 llvm-core/clang"
+               die "Clang version is too old to compile Botan!"
+       fi
+}
+
+src_configure() {
+       tc-export AR CC CXX
+       python_setup
+
+       local disable_modules=(
+               $(usev !boost 'boost')
+       )
+
+       if [[ -z "${DISABLE_MODULES}" ]] ; then
+               elog "Disabling module(s): ${disable_modules[@]}"
+       fi
+
+       local chostarch="${CHOST%%-*}"
+
+       # Arch specific wrangling
+       local myos=
+       case ${CHOST} in
+               *-darwin*)
+                       myos=darwin
+                       ;;
+               *)
+                       myos=linux
+
+                       if [[ ${CHOST} == *hppa* ]] ; then
+                               chostarch=parisc
+                       elif [[ ${ABI} == sparc64 ]] ; then
+                               chostarch="sparc64"
+                       elif [[ ${ABI} == sparc32 ]] ; then
+                               chostarch="sparc32"
+                       fi
+                       ;;
+       esac
+
+       local pythonvers=()
+       if use python ; then
+               _append() {
+                       pythonvers+=( ${EPYTHON/python/} )
+               }
+
+               python_foreach_impl _append
+       fi
+
+       local myargs=(
+               # Intrinsics
+               # TODO: x86 RDSEED (new CPU_FLAGS_X86?)
+               # TODO: POWER Crypto (new CPU_FLAGS_PPC?)
+               $(usev !cpu_flags_arm_aes '--disable-armv8crypto')
+               $(usev !cpu_flags_arm_neon '--disable-neon')
+               $(usev !cpu_flags_arm_sha1 '--disable-armv8crypto')
+               $(usev !cpu_flags_arm_sha2 '--disable-armv8crypto')
+               $(usev !cpu_flags_ppc_altivec '--disable-altivec')
+               $(usev !cpu_flags_x86_aes '--disable-aes-ni')
+               $(usev !cpu_flags_x86_avx2 '--disable-avx2')
+               $(usev !cpu_flags_x86_popcnt '--disable-bmi2')
+               $(usev !cpu_flags_x86_rdrand '--disable-rdrand')
+               $(usev !cpu_flags_x86_sha '--disable-sha-ni')
+               $(usev !cpu_flags_x86_sse2 '--disable-sse2')
+               $(usev !cpu_flags_x86_ssse3 '--disable-ssse3')
+               $(usev !cpu_flags_x86_sse4_1 '--disable-sse4.1')
+               $(usev !cpu_flags_x86_sse4_2 '--disable-sse4.2')
+
+               # HPPA's GCC doesn't support SSP
+               $(usev hppa '--without-stack-protector')
+
+               $(use_with boost)
+               $(use_with bzip2)
+               $(use_with doc documentation)
+               $(use_with doc sphinx)
+               $(use_with lzma)
+               $(use_enable static-libs static-library)
+               $(use_with sqlite sqlite3)
+               $(use_with zlib)
+
+               --build-tool=ninja
+               --cpu=${chostarch}
+               --docdir=share/doc
+               --disable-modules=$(IFS=","; echo "${disable_modules[*]}")
+               --distribution-info="Gentoo ${PVR}"
+               --libdir="$(get_libdir)"
+               # Avoid collisions between slots for tools (bug #905700)
+               --program-suffix=$(ver_cut 1)
+
+               # Don't install Python bindings automatically
+               # (do it manually later in the right place)
+               # bug #723096
+               --no-install-python-module
+
+               --os=${myos}
+               --prefix="${EPREFIX}"/usr
+               --with-endian="$(tc-endian)"
+               --with-python-version=$(IFS=","; echo "${pythonvers[*]}")
+       )
+
+       local build_targets=(
+               shared
+               $(usev static-libs static)
+               $(usev tools cli)
+               $(usev test tests)
+       )
+
+       myargs+=(
+               --build-targets=$(IFS=","; echo "${build_targets[*]}")
+       )
+
+       if ( use elibc_glibc || use elibc_musl ) && use kernel_linux ; then
+               myargs+=(
+                       --with-os-features=getrandom,getentropy
+               )
+       fi
+
+       local sanitizers=()
+       if is-flagq -fsanitize=address ; then
+               sanitizers+=( address )
+       fi
+       if is-flagq -fsanitize=undefined ; then
+               sanitizers+=( undefined )
+       fi
+       filter-flags '-fsanitize=*'
+       myargs+=(
+               --enable-sanitizers=$(IFS=","; echo "${sanitizers[*]}")
+       )
+
+       edo ${EPYTHON} configure.py --verbose "${myargs[@]}"
+}
+
+src_compile() {
+       eninja
+}
+
+src_test() {
+       LD_LIBRARY_PATH="${S}" edo ./botan-test$(ver_cut 1) 
--test-threads="$(makeopts_jobs)"
+}
+
+src_install() {
+       DESTDIR="${D}" eninja install
+
+       if [[ -d "${ED}"/usr/share/doc/${P} && ${P} != ${PF} ]] ; then
+               # --docdir in configure controls the parent directory 
unfortunately
+               mv "${ED}"/usr/share/doc/${P} "${ED}"/usr/share/doc/${PF} || die
+       fi
+
+       # Manually install the Python bindings (bug #723096)
+       if use python ; then
+               python_foreach_impl python_domodule src/python/botan$(ver_cut 
1).py
+       fi
+}

diff --git a/dev-libs/botan/files/botan-3.6.1-boost-1.87.patch 
b/dev-libs/botan/files/botan-3.6.1-boost-1.87.patch
new file mode 100644
index 000000000000..eb42cad0567d
--- /dev/null
+++ b/dev-libs/botan/files/botan-3.6.1-boost-1.87.patch
@@ -0,0 +1,322 @@
+https://bugs.gentoo.org/946389
+https://github.com/randombit/botan/pull/4484
+
+From 2a406beab449a2cb310fa543451a7087ca7b4b1a Mon Sep 17 00:00:00 2001
+From: q66 <[email protected]>
+Date: Sun, 15 Dec 2024 02:42:02 +0100
+Subject: [PATCH 1/2] Remove usage of deprecated asio API
+
+These were all finally dropped with boost 1.87, so this fixes
+build with boost 1.87.
+--- a/src/cli/tls_proxy.cpp
++++ b/src/cli/tls_proxy.cpp
+@@ -106,11 +106,11 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+ 
+       typedef std::shared_ptr<tls_proxy_session> pointer;
+ 
+-      static pointer create(boost::asio::io_service& io,
++      static pointer create(boost::asio::io_context& io,
+                             const 
std::shared_ptr<Botan::TLS::Session_Manager>& session_manager,
+                             const 
std::shared_ptr<Botan::Credentials_Manager>& credentials,
+                             const std::shared_ptr<Botan::TLS::Policy>& policy,
+-                            const tcp::resolver::iterator& endpoints) {
++                            const tcp::resolver::results_type& endpoints) {
+          auto session = std::make_shared<tls_proxy_session>(io, endpoints);
+ 
+          // Defer the setup of the TLS server to make use of
+@@ -144,7 +144,7 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+          }
+       }
+ 
+-      tls_proxy_session(boost::asio::io_service& io, tcp::resolver::iterator 
endpoints) :
++      tls_proxy_session(boost::asio::io_context& io, 
tcp::resolver::results_type endpoints) :
+             m_strand(io),
+             m_server_endpoints(std::move(endpoints)),
+             m_client_socket(io),
+@@ -287,7 +287,7 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+ 
+       void tls_session_activated() override {
+          auto onConnect = [self = weak_from_this()](boost::system::error_code 
ec,
+-                                                    const 
tcp::resolver::iterator& /*endpoint*/) {
++                                                    
tcp::resolver::results_type::iterator /*endpoint*/) {
+             if(ec) {
+                log_error("Server connection", ec);
+                return;
+@@ -301,7 +301,7 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+                return;
+             }
+          };
+-         async_connect(m_server_socket, m_server_endpoints, onConnect);
++         async_connect(m_server_socket, m_server_endpoints.begin(), 
m_server_endpoints.end(), onConnect);
+       }
+ 
+       void tls_session_established(const Botan::TLS::Session_Summary& 
session) override {
+@@ -315,9 +315,9 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+          }
+       }
+ 
+-      boost::asio::io_service::strand m_strand;
++      boost::asio::io_context::strand m_strand;
+ 
+-      tcp::resolver::iterator m_server_endpoints;
++      tcp::resolver::results_type m_server_endpoints;
+ 
+       tcp::socket m_client_socket;
+       tcp::socket m_server_socket;
+@@ -341,9 +341,9 @@ class tls_proxy_server final {
+    public:
+       typedef tls_proxy_session session;
+ 
+-      tls_proxy_server(boost::asio::io_service& io,
++      tls_proxy_server(boost::asio::io_context& io,
+                        unsigned short port,
+-                       tcp::resolver::iterator endpoints,
++                       tcp::resolver::results_type endpoints,
+                        std::shared_ptr<Botan::Credentials_Manager> creds,
+                        std::shared_ptr<Botan::TLS::Policy> policy,
+                        std::shared_ptr<Botan::TLS::Session_Manager> 
session_mgr,
+@@ -383,7 +383,7 @@ class tls_proxy_server final {
+       }
+ 
+       tcp::acceptor m_acceptor;
+-      tcp::resolver::iterator m_server_endpoints;
++      tcp::resolver::results_type m_server_endpoints;
+ 
+       std::shared_ptr<Botan::Credentials_Manager> m_creds;
+       std::shared_ptr<Botan::TLS::Policy> m_policy;
+@@ -429,10 +429,10 @@ class TLS_Proxy final : public Command {
+ 
+          auto policy = load_tls_policy(get_arg("policy"));
+ 
+-         boost::asio::io_service io;
++         boost::asio::io_context io;
+ 
+          tcp::resolver resolver(io);
+-         auto server_endpoint_iterator = resolver.resolve({target, 
target_port});
++         auto server_endpoint_iterator = resolver.resolve(target, 
target_port);
+ 
+          std::shared_ptr<Botan::TLS::Session_Manager> session_mgr;
+ 
+--- a/src/lib/utils/socket/socket.cpp
++++ b/src/lib/utils/socket/socket.cpp
+@@ -46,20 +46,19 @@ class Asio_Socket final : public OS::Socket {
+    public:
+       Asio_Socket(std::string_view hostname, std::string_view service, 
std::chrono::milliseconds timeout) :
+             m_timeout(timeout), m_timer(m_io), m_tcp(m_io) {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+          check_timeout();
+ 
+          boost::asio::ip::tcp::resolver resolver(m_io);
+-         boost::asio::ip::tcp::resolver::query query(std::string{hostname}, 
std::string{service});
+-         boost::asio::ip::tcp::resolver::iterator dns_iter = 
resolver.resolve(query);
++         boost::asio::ip::tcp::resolver::results_type dns_iter = 
resolver.resolve(std::string{hostname}, std::string{service});
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+-         auto connect_cb = [&ec](const boost::system::error_code& e, const 
boost::asio::ip::tcp::resolver::iterator&) {
++         auto connect_cb = [&ec](const boost::system::error_code& e, 
boost::asio::ip::tcp::resolver::results_type::iterator) {
+             ec = e;
+          };
+ 
+-         boost::asio::async_connect(m_tcp, dns_iter, connect_cb);
++         boost::asio::async_connect(m_tcp, dns_iter.begin(), dns_iter.end(), 
connect_cb);
+ 
+          while(ec == boost::asio::error::would_block) {
+             m_io.run_one();
+@@ -74,7 +73,7 @@ class Asio_Socket final : public OS::Socket {
+       }
+ 
+       void write(const uint8_t buf[], size_t len) override {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+@@ -90,7 +89,7 @@ class Asio_Socket final : public OS::Socket {
+       }
+ 
+       size_t read(uint8_t buf[], size_t len) override {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+          size_t got = 0;
+@@ -116,7 +115,7 @@ class Asio_Socket final : public OS::Socket {
+ 
+    private:
+       void check_timeout() {
+-         if(m_tcp.is_open() && m_timer.expires_at() < 
std::chrono::system_clock::now()) {
++         if(m_tcp.is_open() && m_timer.expiry() < 
std::chrono::system_clock::now()) {
+             boost::system::error_code err;
+ 
+             // NOLINTNEXTLINE(bugprone-unused-return-value,cert-err33-c)
+@@ -127,7 +126,7 @@ class Asio_Socket final : public OS::Socket {
+       }
+ 
+       const std::chrono::milliseconds m_timeout;
+-      boost::asio::io_service m_io;
++      boost::asio::io_context m_io;
+       boost::asio::system_timer m_timer;
+       boost::asio::ip::tcp::socket m_tcp;
+ };
+--- a/src/lib/utils/socket/socket_udp.cpp
++++ b/src/lib/utils/socket/socket_udp.cpp
+@@ -46,20 +46,19 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+    public:
+       Asio_SocketUDP(std::string_view hostname, std::string_view service, 
std::chrono::microseconds timeout) :
+             m_timeout(timeout), m_timer(m_io), m_udp(m_io) {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+          check_timeout();
+ 
+          boost::asio::ip::udp::resolver resolver(m_io);
+-         boost::asio::ip::udp::resolver::query query(std::string{hostname}, 
std::string{service});
+-         boost::asio::ip::udp::resolver::iterator dns_iter = 
resolver.resolve(query);
++         boost::asio::ip::udp::resolver::results_type dns_iter = 
resolver.resolve(std::string{hostname}, std::string{service});
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+-         auto connect_cb = [&ec](const boost::system::error_code& e, const 
boost::asio::ip::udp::resolver::iterator&) {
++         auto connect_cb = [&ec](const boost::system::error_code& e, 
boost::asio::ip::udp::resolver::results_type::iterator) {
+             ec = e;
+          };
+ 
+-         boost::asio::async_connect(m_udp, dns_iter, connect_cb);
++         boost::asio::async_connect(m_udp, dns_iter.begin(), dns_iter.end(), 
connect_cb);
+ 
+          while(ec == boost::asio::error::would_block) {
+             m_io.run_one();
+@@ -74,7 +73,7 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+       }
+ 
+       void write(const uint8_t buf[], size_t len) override {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+@@ -90,7 +89,7 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+       }
+ 
+       size_t read(uint8_t buf[], size_t len) override {
+-         m_timer.expires_from_now(m_timeout);
++         m_timer.expires_after(m_timeout);
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+          size_t got = 0;
+@@ -116,7 +115,7 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+ 
+    private:
+       void check_timeout() {
+-         if(m_udp.is_open() && m_timer.expires_at() < 
std::chrono::system_clock::now()) {
++         if(m_udp.is_open() && m_timer.expiry() < 
std::chrono::system_clock::now()) {
+             boost::system::error_code err;
+ 
+             // NOLINTNEXTLINE(bugprone-unused-return-value,cert-err33-c)
+@@ -127,7 +126,7 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+       }
+ 
+       const std::chrono::microseconds m_timeout;
+-      boost::asio::io_service m_io;
++      boost::asio::io_context m_io;
+       boost::asio::system_timer m_timer;
+       boost::asio::ip::udp::socket m_udp;
+ };
+
+From 3820f357017eacef1fcb5119582bc9789b88f6c2 Mon Sep 17 00:00:00 2001
+From: Jack Lloyd <[email protected]>
+Date: Wed, 18 Dec 2024 17:10:34 -0500
+Subject: [PATCH 2/2] Address review comments
+
+--- a/src/cli/tls_proxy.cpp
++++ b/src/cli/tls_proxy.cpp
+@@ -287,7 +287,7 @@ class tls_proxy_session final : public 
std::enable_shared_from_this<tls_proxy_se
+ 
+       void tls_session_activated() override {
+          auto onConnect = [self = weak_from_this()](boost::system::error_code 
ec,
+-                                                    
tcp::resolver::results_type::iterator /*endpoint*/) {
++                                                    const 
tcp::resolver::results_type::iterator& /*endpoint*/) {
+             if(ec) {
+                log_error("Server connection", ec);
+                return;
+--- a/src/examples/tls_stream_client.cpp
++++ b/src/examples/tls_stream_client.cpp
+@@ -35,7 +35,7 @@ class Credentials_Manager : public 
Botan::Credentials_Manager {
+ class client {
+    public:
+       client(boost::asio::io_context& io_context,
+-             boost::asio::ip::tcp::resolver::iterator endpoint_iterator,
++             const boost::asio::ip::tcp::resolver::results_type& endpoints,
+              std::string_view host,
+              const http::request<http::string_body>& req) :
+             m_request(req),
+@@ -46,7 +46,8 @@ class client {
+                                                         host)),
+             m_stream(io_context, m_ctx) {
+          boost::asio::async_connect(m_stream.lowest_layer(),
+-                                    std::move(endpoint_iterator),
++                                    endpoints.begin(),
++                                    endpoints.end(),
+                                     boost::bind(&client::handle_connect, 
this, ap::error));
+       }
+ 
+@@ -111,8 +112,7 @@ int main(int argc, char* argv[]) {
+       boost::asio::io_context io_context;
+ 
+       boost::asio::ip::tcp::resolver resolver(io_context);
+-      boost::asio::ip::tcp::resolver::query query(host, port);
+-      boost::asio::ip::tcp::resolver::iterator iterator = 
resolver.resolve(query);
++      boost::asio::ip::tcp::resolver::results_type endpoints = 
resolver.resolve(host, port);
+ 
+       http::request<http::string_body> req;
+       req.version(11);
+@@ -121,7 +121,7 @@ int main(int argc, char* argv[]) {
+       req.set(http::field::host, host);
+       req.set(http::field::user_agent, Botan::version_string());
+ 
+-      client c(io_context, iterator, host, req);
++      client c(io_context, endpoints, host, req);
+ 
+       io_context.run();
+    } catch(std::exception& e) {
+--- a/src/lib/utils/socket/socket.cpp
++++ b/src/lib/utils/socket/socket.cpp
+@@ -50,13 +50,12 @@ class Asio_Socket final : public OS::Socket {
+          check_timeout();
+ 
+          boost::asio::ip::tcp::resolver resolver(m_io);
+-         boost::asio::ip::tcp::resolver::results_type dns_iter = 
resolver.resolve(std::string{hostname}, std::string{service});
++         boost::asio::ip::tcp::resolver::results_type dns_iter =
++            resolver.resolve(std::string{hostname}, std::string{service});
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+-         auto connect_cb = [&ec](const boost::system::error_code& e, 
boost::asio::ip::tcp::resolver::results_type::iterator) {
+-            ec = e;
+-         };
++         auto connect_cb = [&ec](const boost::system::error_code& e, const 
auto&) { ec = e; };
+ 
+          boost::asio::async_connect(m_tcp, dns_iter.begin(), dns_iter.end(), 
connect_cb);
+ 
+--- a/src/lib/utils/socket/socket_udp.cpp
++++ b/src/lib/utils/socket/socket_udp.cpp
+@@ -50,13 +50,13 @@ class Asio_SocketUDP final : public OS::SocketUDP {
+          check_timeout();
+ 
+          boost::asio::ip::udp::resolver resolver(m_io);
+-         boost::asio::ip::udp::resolver::results_type dns_iter = 
resolver.resolve(std::string{hostname}, std::string{service});
++         boost::asio::ip::udp::resolver::results_type dns_iter =
++            resolver.resolve(std::string{hostname}, std::string{service});
+ 
+          boost::system::error_code ec = boost::asio::error::would_block;
+ 
+-         auto connect_cb = [&ec](const boost::system::error_code& e, 
boost::asio::ip::udp::resolver::results_type::iterator) {
+-            ec = e;
+-         };
++         auto connect_cb = [&ec](const boost::system::error_code& e,
++                                 const 
boost::asio::ip::udp::resolver::results_type::iterator&) { ec = e; };
+ 
+          boost::asio::async_connect(m_udp, dns_iter.begin(), dns_iter.end(), 
connect_cb);
+ 
+

Reply via email to