From: Christian P. <cp...@us...> - 2005-01-07 13:40:39
|
Update of /cvsroot/pclasses/pclasses2/src/Net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4806/src/Net Modified Files: InetAddress.cpp Log Message: Added InetAddress::fromString(). Fixed InetAddress string ctor and assign operator. Index: InetAddress.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/Net/InetAddress.cpp,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- InetAddress.cpp 23 Dec 2004 06:23:09 -0000 1.3 +++ InetAddress.cpp 7 Jan 2005 13:40:30 -0000 1.4 @@ -18,8 +18,11 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "pclasses/System/CriticalSection.h" #include "pclasses/Net/InetAddress.h" + #include <netinet/in.h> +#include <arpa/inet.h> namespace P { @@ -42,6 +45,12 @@ { } +InetAddress::InetAddress(const std::string& str) +: NetworkAddress(AF_INET, 0, sizeof(in_addr)) +{ + *this = fromString(str); +} + InetAddress::~InetAddress() { } @@ -61,11 +70,14 @@ return (*this == InetAddress(Loopback)); } -Unicode::String InetAddress::str() const +std::string InetAddress::str() const { - //@todo InetAddress::str() - return Unicode::String(); - // ^^^^ added by stephan to avoid an implicit return warning. + // inet_ntoa is not reentrant on many systems ... + static System::CriticalSection cs; + System::CriticalSection::ScopedLock lck(cs); + + std::string ret = inet_ntoa(*((in_addr*)addr())); + return ret; } InetAddress* InetAddress::clone() const @@ -91,6 +103,18 @@ return *this; } +InetAddress& InetAddress::operator=(const std::string& str) +{ + *this = fromString(str); + return *this; +} + +InetAddress InetAddress::fromString(const std::string& str) +{ + in_addr addr; + inet_aton(str.c_str(), &addr); + return InetAddress(addr); +} } |