diff options
author | louiz’ <louiz@louiz.org> | 2016-11-15 00:23:19 +0100 |
---|---|---|
committer | louiz’ <louiz@louiz.org> | 2016-11-15 00:23:19 +0100 |
commit | d872c2b49214c0a4db40a9e2d860802d9eedc563 (patch) | |
tree | cccd27de262b2823d126a48c82455d208696dbdc /louloulibs/network/tcp_client_socket_handler.cpp | |
parent | ed7e66471f7018f2e7e1c6a469e5cd758b913255 (diff) | |
download | biboumi-d872c2b49214c0a4db40a9e2d860802d9eedc563.tar.gz biboumi-d872c2b49214c0a4db40a9e2d860802d9eedc563.tar.bz2 biboumi-d872c2b49214c0a4db40a9e2d860802d9eedc563.tar.xz biboumi-d872c2b49214c0a4db40a9e2d860802d9eedc563.zip |
Support the ident protocol
fix #3211
Diffstat (limited to 'louloulibs/network/tcp_client_socket_handler.cpp')
-rw-r--r-- | louloulibs/network/tcp_client_socket_handler.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/louloulibs/network/tcp_client_socket_handler.cpp b/louloulibs/network/tcp_client_socket_handler.cpp index f22d756..dc9221d 100644 --- a/louloulibs/network/tcp_client_socket_handler.cpp +++ b/louloulibs/network/tcp_client_socket_handler.cpp @@ -154,6 +154,25 @@ void TCPClientSocketHandler::connect(const std::string& address, const std::stri #endif this->connection_date = std::chrono::system_clock::now(); + // Get our local TCP port and store it + this->local_port = static_cast<uint16_t>(-1); + if (rp->ai_family == AF_INET6) + { + struct sockaddr_in6 a; + socklen_t l = sizeof(a); + if (::getsockname(this->socket, (struct sockaddr*)&a, &l) != -1) + this->local_port = ::ntohs(a.sin6_port); + } + else if (rp->ai_family == AF_INET) + { + struct sockaddr_in a; + socklen_t l = sizeof(a); + if (::getsockname(this->socket, (struct sockaddr*)&a, &l) != -1) + this->local_port = ::ntohs(a.sin_port); + } + + log_debug("Local port: ", this->local_port, ", and remote port: ", this->port); + this->on_connected(); return ; } @@ -231,3 +250,9 @@ std::string TCPClientSocketHandler::get_port() const { return this->port; } + +bool TCPClientSocketHandler::match_port_pairt(const uint16_t local, const uint16_t remote) const +{ + const uint16_t remote_port = static_cast<uint16_t>(std::stoi(this->port)); + return this->is_connected() && local == this->local_port && remote == remote_port; +} |