szaszm commented on code in PR #1599:
URL: https://github.com/apache/nifi-minifi-cpp/pull/1599#discussion_r1301254315
##########
libminifi/include/utils/net/AsioSocketUtils.h:
##########
@@ -63,6 +64,64 @@ asio::awaitable<std::tuple<std::error_code>>
handshake(SslSocket& socket, asio::
asio::ssl::context getSslContext(const controllers::SSLContextService&
ssl_context_service, asio::ssl::context::method ssl_context_method =
asio::ssl::context::tlsv12_client);
+
+struct SocketData {
+ std::string host = "localhost";
+ int port = -1;
+ std::shared_ptr<minifi::controllers::SSLContextService> ssl_context_service;
+};
+
+class AsioSocketConnection : public io::BaseStream {
+ public:
+ explicit AsioSocketConnection(SocketData socket_data);
+ int initialize() override;
+ size_t read(std::span<std::byte> out_buffer) override {
+ gsl_Expects(stream_);
+ return stream_->read(out_buffer);
+ }
+ size_t write(const uint8_t *in_buffer, size_t len) override {
+ gsl_Expects(stream_);
+ return stream_->write(in_buffer, len);
+ }
+
+ void setInterface(const std::string& local_network_interface) {
+ local_network_interface_ = local_network_interface;
+ }
+
+ private:
+ template<typename SocketType>
+ bool bindToLocalInterface(SocketType& socket) {
+ if (local_network_interface_.empty()) {
+ return true;
+ }
+
+ asio::ip::tcp::endpoint
local_endpoint(asio::ip::address::from_string(local_network_interface_), 0);
+ asio::error_code err;
+ socket.open(local_endpoint.protocol(), err);
+ if (err) {
+ logger_->log_error("Failed to open socket on network interface '%s' with
the following message: '%s'", local_network_interface_, err.message());
+ return false;
+ }
+ socket.set_option(asio::ip::tcp::socket::reuse_address(true));
Review Comment:
I found the original code now, and it used `getifaddrs` to find the IP
address of the specified interface, when needed. There doesn't seem to be a
similar utility in asio.
How is the code here supposed to achieve this? According to the docs,
`asio::ip::address::from_string` converts dotted decimal form IP addresses (or
hex notation IPv6 address) to binary form, but it doesn't say anything about
converting interface names to interface addresses.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]