diff options
Diffstat (limited to 'dep/src/sockets/Ipv4Address.cpp')
-rw-r--r-- | dep/src/sockets/Ipv4Address.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/dep/src/sockets/Ipv4Address.cpp b/dep/src/sockets/Ipv4Address.cpp index edd56ece048..b89cc2a449b 100644 --- a/dep/src/sockets/Ipv4Address.cpp +++ b/dep/src/sockets/Ipv4Address.cpp @@ -5,14 +5,17 @@ **/ /* Copyright (C) 2007 Anders Hedstrom + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. @@ -24,10 +27,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include <netdb.h> #endif + #ifdef SOCKETS_NAMESPACE namespace SOCKETS_NAMESPACE { #endif + + Ipv4Address::Ipv4Address(port_t port) : m_valid(true) { memset(&m_addr, 0, sizeof(m_addr)); @@ -35,6 +41,7 @@ Ipv4Address::Ipv4Address(port_t port) : m_valid(true) m_addr.sin_port = htons( port ); } + Ipv4Address::Ipv4Address(ipaddr_t a,port_t port) : m_valid(true) { memset(&m_addr, 0, sizeof(m_addr)); @@ -43,6 +50,7 @@ Ipv4Address::Ipv4Address(ipaddr_t a,port_t port) : m_valid(true) memcpy(&m_addr.sin_addr, &a, sizeof(struct in_addr)); } + Ipv4Address::Ipv4Address(struct in_addr& a,port_t port) : m_valid(true) { memset(&m_addr, 0, sizeof(m_addr)); @@ -51,6 +59,7 @@ Ipv4Address::Ipv4Address(struct in_addr& a,port_t port) : m_valid(true) m_addr.sin_addr = a; } + Ipv4Address::Ipv4Address(const std::string& host,port_t port) : m_valid(false) { memset(&m_addr, 0, sizeof(m_addr)); @@ -66,36 +75,43 @@ Ipv4Address::Ipv4Address(const std::string& host,port_t port) : m_valid(false) } } + Ipv4Address::Ipv4Address(struct sockaddr_in& sa) { m_addr = sa; m_valid = sa.sin_family == AF_INET; } + Ipv4Address::~Ipv4Address() { } + Ipv4Address::operator struct sockaddr *() { return (struct sockaddr *)&m_addr; } + Ipv4Address::operator socklen_t() { return sizeof(struct sockaddr_in); } + void Ipv4Address::SetPort(port_t port) { m_addr.sin_port = htons( port ); } + port_t Ipv4Address::GetPort() { return ntohs( m_addr.sin_port ); } + bool Ipv4Address::Resolve(const std::string& hostname,struct in_addr& a) { struct sockaddr_in sa; @@ -113,6 +129,7 @@ bool Ipv4Address::Resolve(const std::string& hostname,struct in_addr& a) return true; } + bool Ipv4Address::Reverse(struct in_addr& a,std::string& name) { struct sockaddr_in sa; @@ -122,6 +139,7 @@ bool Ipv4Address::Reverse(struct in_addr& a,std::string& name) return Utility::reverse((struct sockaddr *)&sa, sizeof(sa), name); } + std::string Ipv4Address::Convert(bool include_port) { if (include_port) @@ -129,6 +147,7 @@ std::string Ipv4Address::Convert(bool include_port) return Convert(m_addr.sin_addr); } + std::string Ipv4Address::Convert(struct in_addr& a) { struct sockaddr_in sa; @@ -140,21 +159,25 @@ std::string Ipv4Address::Convert(struct in_addr& a) return name; } + void Ipv4Address::SetAddress(struct sockaddr *sa) { memcpy(&m_addr, sa, sizeof(struct sockaddr_in)); } + int Ipv4Address::GetFamily() { return m_addr.sin_family; } + bool Ipv4Address::IsValid() { return m_valid; } + bool Ipv4Address::operator==(SocketAddress& a) { if (a.GetFamily() != GetFamily()) @@ -170,11 +193,13 @@ bool Ipv4Address::operator==(SocketAddress& a) return true; } + std::auto_ptr<SocketAddress> Ipv4Address::GetCopy() { return std::auto_ptr<SocketAddress>(new Ipv4Address(m_addr)); } + std::string Ipv4Address::Reverse() { std::string tmp; @@ -182,7 +207,9 @@ std::string Ipv4Address::Reverse() return tmp; } + #ifdef SOCKETS_NAMESPACE } // namespace SOCKETS_NAMESPACE { #endif + |