From 27dda3c65c263a9dcc6b4a4e38f67e6ee0bc9a78 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 14 Nov 2011 23:19:37 +0900 Subject: Support IPv6 address for FTP via HTTP tunneling. We use control connection address as data connection address, so we don't need to store both address and port. We just store port in PASV/EPSV response and use SocketCore::getPeerInfo() to get peer's address when needed. --- src/SocketCore.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/SocketCore.cc') diff --git a/src/SocketCore.cc b/src/SocketCore.cc index f0a3b5bb..793dc1bd 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -345,12 +345,13 @@ SocketCore* SocketCore::acceptConnection() const return new SocketCore(fd, sockType_); } -void SocketCore::getAddrInfo(std::pair& addrinfo) const +int SocketCore::getAddrInfo(std::pair& addrinfo) const { sockaddr_union sockaddr; socklen_t len = sizeof(sockaddr); getAddrInfo(sockaddr, len); addrinfo = util::getNumericNameInfo(&sockaddr.sa, len); + return sockaddr.storage.ss_family; } void SocketCore::getAddrInfo(sockaddr_union& sockaddr, socklen_t& len) const @@ -369,7 +370,7 @@ int SocketCore::getAddressFamily() const return sockaddr.storage.ss_family; } -void SocketCore::getPeerInfo(std::pair& peerinfo) const +int SocketCore::getPeerInfo(std::pair& peerinfo) const { sockaddr_union sockaddr; socklen_t len = sizeof(sockaddr); @@ -378,6 +379,7 @@ void SocketCore::getPeerInfo(std::pair& peerinfo) const throw DL_ABORT_EX(fmt(EX_SOCKET_GET_NAME, errorMsg(errNum).c_str())); } peerinfo = util::getNumericNameInfo(&sockaddr.sa, len); + return sockaddr.storage.ss_family; } void SocketCore::establishConnection(const std::string& host, uint16_t port) -- cgit