integrated changes from 1.3.5

This commit is contained in:
Guenter Obiltschnig 2009-06-16 17:04:40 +00:00
parent 99c48cff49
commit c93c16008b
9 changed files with 53 additions and 62 deletions

View File

@ -1,7 +1,7 @@
//
// DNS.cpp
//
// $Id: //poco/Main/Net/src/DNS.cpp#10 $
// $Id: //poco/Main/Net/src/DNS.cpp#11 $
//
// Library: Net
// Package: NetCore
@ -137,6 +137,7 @@ HostEntry DNS::hostByAddress(const IPAddress& address)
struct addrinfo* pAI;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_CANONNAME;
if (getaddrinfo(fqname, NULL, &hints, &pAI) == 0)
{
std::pair<DNSCache::iterator, bool> res = _cache.insert(std::pair<std::string, HostEntry>(std::string(fqname), HostEntry(pAI)));

View File

@ -1,7 +1,7 @@
//
// HostEntry.cpp
//
// $Id: //poco/Main/Net/src/HostEntry.cpp#9 $
// $Id: //poco/Main/Net/src/HostEntry.cpp#10 $
//
// Library: Net
// Package: NetCore
@ -92,15 +92,15 @@ HostEntryImpl::HostEntryImpl(struct addrinfo* ainfo)
{
_name.assign(ai->ai_canonname);
}
else if (ai->ai_addrlen && ai->ai_addr)
if (ai->ai_addrlen && ai->ai_addr)
{
switch (ai->ai_addr->sa_family)
{
case AF_INET:
_addresses.push_back(IPAddress(&reinterpret_cast<struct sockaddr_in*>(&ai->ai_addr)->sin_addr, sizeof(in_addr)));
_addresses.push_back(IPAddress(&reinterpret_cast<struct sockaddr_in*>(ai->ai_addr)->sin_addr, sizeof(in_addr)));
break;
case AF_INET6:
_addresses.push_back(IPAddress(&reinterpret_cast<struct sockaddr_in6*>(&ai->ai_addr)->sin6_addr, sizeof(in6_addr)));
_addresses.push_back(IPAddress(&reinterpret_cast<struct sockaddr_in6*>(ai->ai_addr)->sin6_addr, sizeof(in6_addr)));
break;
}
}

View File

@ -1,7 +1,7 @@
//
// IPAddress.cpp
//
// $Id: //poco/Main/Net/src/IPAddress.cpp#21 $
// $Id: //poco/Main/Net/src/IPAddress.cpp#22 $
//
// Library: Net
// Package: NetCore
@ -175,9 +175,9 @@ public:
bool isSiteLocal() const
{
UInt32 addr = ntohl(_addr.s_addr);
return (addr & 0xFF000000) == 0x0A000000 || // 10.0.0.0/24
(addr & 0xFFFF0000) == 0xC0A80000 || // 192.68.0.0/16
addr >= 0xAC100000 && addr <= 0xAC1FFFFF; // 172.16.0.0 to 172.31.255.255
return (addr & 0xFF000000) == 0x0A000000 || // 10.0.0.0/24
(addr & 0xFFFF0000) == 0xC0A80000 || // 192.68.0.0/16
(addr >= 0xAC100000 && addr <= 0xAC1FFFFF); // 172.16.0.0 to 172.31.255.255
}
bool isIPv4Compatible() const

View File

@ -1,7 +1,7 @@
//
// MulticastSocket.cpp
//
// $Id: //poco/svn/Net/src/MulticastSocket.cpp#2 $
// $Id: //poco/Main/Net/src/MulticastSocket.cpp#13 $
//
// Library: Net
// Package: Sockets
@ -43,9 +43,11 @@
#include <cstring>
#if defined(hpux) && defined(_XOPEN_SOURCE_EXTENDED)
#if defined(hpux) && defined(_XOPEN_SOURCE_EXTENDED) && defined(POCO_HPUX_IP_MREQ_HACK)
// netinet/in.h does not define struct ip_mreq if
// _XOPEN_SOURCE_EXTENDED is #define'd.
// _XOPEN_SOURCE_EXTENDED is #define'd in HP-UX 11.x
// versions prior to 11.30. Compile with -DPOCO_HPUX_IP_MREQ_HACK
// if you experience problems.
struct ip_mreq
{
struct in_addr imr_multiaddr;

View File

@ -1,7 +1,7 @@
//
// NetworkInterface.cpp
//
// $Id: //poco/Main/Net/src/NetworkInterface.cpp#23 $
// $Id: //poco/Main/Net/src/NetworkInterface.cpp#24 $
//
// Library: Net
// Package: Sockets
@ -296,7 +296,7 @@ NetworkInterface NetworkInterface::forName(const std::string& name, bool require
NetworkInterfaceList ifs = list();
for (NetworkInterfaceList::const_iterator it = ifs.begin(); it != ifs.end(); ++it)
{
if (it->name() == name && it->supportsIPv6() == requireIPv6)
if (it->name() == name && ((requireIPv6 && it->supportsIPv6()) || !requireIPv6))
return *it;
}
throw InterfaceNotFoundException(name);
@ -389,7 +389,7 @@ NetworkInterface::NetworkInterfaceList NetworkInterface::list()
pAdapterAddresses = reinterpret_cast<IP_ADAPTER_ADDRESSES*>(new char[addrLen]);
// Make an initial call to GetAdaptersAddresses to get
// the necessary size into addrLen
rc = GetAdaptersAddresses(AF_INET6, 0, 0, pAdapterAddresses, &addrLen);
rc = GetAdaptersAddresses(AF_UNSPEC, 0, 0, pAdapterAddresses, &addrLen);
if (rc == ERROR_BUFFER_OVERFLOW)
{
delete [] reinterpret_cast<char*>(pAdapterAddresses);
@ -401,14 +401,23 @@ NetworkInterface::NetworkInterfaceList NetworkInterface::list()
}
try
{
if (GetAdaptersAddresses(AF_INET6, 0, 0, pAdapterAddresses, &addrLen) == NO_ERROR)
if (GetAdaptersAddresses(AF_UNSPEC, 0, 0, pAdapterAddresses, &addrLen) == NO_ERROR)
{
pAddress = pAdapterAddresses;
while (pAddress)
{
if (pAddress->FirstUnicastAddress)
{
IPAddress addr(pAddress->FirstUnicastAddress->Address.lpSockaddr, pAddress->FirstUnicastAddress->Address.iSockaddrLength);
IPAddress addr;
switch (pAddress->FirstUnicastAddress->Address.lpSockaddr->sa_family)
{
case AF_INET:
addr = IPAddress(&reinterpret_cast<struct sockaddr_in*>(pAddress->FirstUnicastAddress->Address.lpSockaddr)->sin_addr, sizeof(in_addr));
break;
case AF_INET6:
addr = IPAddress(&reinterpret_cast<struct sockaddr_in6*>(pAddress->FirstUnicastAddress->Address.lpSockaddr)->sin6_addr, sizeof(in6_addr));
break;
}
std::string name(pAddress->AdapterName);
std::string displayName;
#ifdef POCO_WIN32_UTF8
@ -431,6 +440,7 @@ NetworkInterface::NetworkInterfaceList NetworkInterface::list()
throw;
}
delete [] reinterpret_cast<char*>(pAdapterAddresses);
return result;
#endif
// Add IPv4 loopback interface (not returned by GetAdaptersInfo)

View File

@ -1,7 +1,7 @@
//
// StreamSocketImpl.cpp
//
// $Id: //poco/Main/Net/src/StreamSocketImpl.cpp#9 $
// $Id: //poco/Main/Net/src/StreamSocketImpl.cpp#10 $
//
// Library: Net
// Package: Sockets
@ -35,6 +35,7 @@
#include "Poco/Net/StreamSocketImpl.h"
#include "Poco/Exception.h"
namespace Poco {
@ -54,7 +55,7 @@ StreamSocketImpl::StreamSocketImpl(IPAddress::Family family)
else if (family == IPAddress::IPv6)
init(AF_INET6);
#endif
else throw InvalidArgumentException("Invalid or unsupported address family passed to StreamSocketImpl");
else throw Poco::InvalidArgumentException("Invalid or unsupported address family passed to StreamSocketImpl");
}

View File

@ -1,7 +1,7 @@
//
// DNSTest.cpp
//
// $Id: //poco/svn/Net/testsuite/src/DNSTest.cpp#2 $
// $Id: //poco/Main/Net/testsuite/src/DNSTest.cpp#8 $
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
@ -61,10 +61,13 @@ void DNSTest::testHostByName()
{
HostEntry he1 = DNS::hostByName("www.appinf.com");
assert (he1.name() == "appinf.com");
#if !defined(_WIN32) && !defined(POCO_HAVE_IPv6)
// getaddrinfo() does not report any aliases
assert (!he1.aliases().empty());
assert (he1.aliases()[0] == "www.appinf.com");
#endif
assert (he1.addresses().size() == 1);
assert (he1.addresses()[0].toString() == "213.229.60.82");
assert (he1.addresses()[0].toString() == "216.146.46.35");
try
{
@ -82,12 +85,12 @@ void DNSTest::testHostByName()
void DNSTest::testHostByAddress()
{
IPAddress ip1("213.229.60.82");
IPAddress ip1("216.146.46.35");
HostEntry he1 = DNS::hostByAddress(ip1);
assert (he1.name() == "quentin.inode.at");
assert (he1.name() == "web.appinf.com");
assert (he1.aliases().empty());
assert (he1.addresses().size() == 1);
assert (he1.addresses()[0].toString() == "213.229.60.82");
assert (he1.addresses()[0].toString() == "216.146.46.35");
IPAddress ip2("10.0.244.253");
try

View File

@ -1,7 +1,7 @@
//
// NameValueCollectionTest.cpp
//
// $Id: //poco/svn/Net/testsuite/src/NameValueCollectionTest.cpp#2 $
// $Id: //poco/Main/Net/testsuite/src/NameValueCollectionTest.cpp#7 $
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
@ -108,7 +108,7 @@ void NameValueCollectionTest::testNameValueCollection()
std::string v2 = it->second;
assert (it->first == "name3");
assert (v1 == "value3" && v2 == "value31" || v1 == "value31" && v2 == "value3");
assert ((v1 == "value3" && v2 == "value31") || (v1 == "value31" && v2 == "value3"));
nvc.erase("name3");
assert (!nvc.has("name3"));

View File

@ -1,7 +1,7 @@
//
// SocketTest.cpp
//
// $Id: //poco/1.3/Net/testsuite/src/SocketTest.cpp#2 $
// $Id: //poco/Main/Net/testsuite/src/SocketTest.cpp#10 $
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
@ -282,8 +282,8 @@ void SocketTest::testTimeout()
void SocketTest::testBufferSize()
{
EchoServer echoServer;
StreamSocket ss;
ss.connect(SocketAddress("localhost", echoServer.port()));
SocketAddress sa("localhost", 1234);
StreamSocket ss(sa.family());
int osz = ss.getSendBufferSize();
int rsz = 32000;
@ -335,15 +335,6 @@ void SocketTest::testOptions()
void SocketTest::testSelect()
{
doSelectOrPoll1(Socket::select);
#if defined(POCO_HAVE_FD_POLL)
doSelectOrPoll1(Socket::poll);
#endif
}
void SocketTest::doSelectOrPoll1(SelectPtr pAction)
{
Timespan timeout(250000);
@ -356,7 +347,7 @@ void SocketTest::doSelectOrPoll1(SelectPtr pAction)
Socket::SocketList exceptList;
readList.push_back(ss);
assert (pAction(readList, writeList, exceptList, timeout) == 0);
assert (Socket::select(readList, writeList, exceptList, timeout) == 0);
assert (readList.empty());
assert (writeList.empty());
assert (exceptList.empty());
@ -367,7 +358,7 @@ void SocketTest::doSelectOrPoll1(SelectPtr pAction)
readList.push_back(ss);
writeList.push_back(ss);
assert (pAction(readList, writeList, exceptList, timeout) == 2);
assert (Socket::select(readList, writeList, exceptList, timeout) == 2);
assert (!readList.empty());
assert (!writeList.empty());
assert (exceptList.empty());
@ -381,15 +372,6 @@ void SocketTest::doSelectOrPoll1(SelectPtr pAction)
void SocketTest::testSelect2()
{
doSelectOrPoll2(Socket::select);
#if defined(POCO_HAVE_FD_POLL)
doSelectOrPoll2(Socket::poll);
#endif
}
void SocketTest::doSelectOrPoll2(SelectPtr pAction)
{
Timespan timeout(100000);
@ -404,7 +386,7 @@ void SocketTest::doSelectOrPoll2(SelectPtr pAction)
readList.push_back(ss1);
readList.push_back(ss2);
assert (pAction(readList, writeList, exceptList, timeout) == 0);
assert (Socket::select(readList, writeList, exceptList, timeout) == 0);
assert (readList.empty());
assert (writeList.empty());
assert (exceptList.empty());
@ -415,7 +397,7 @@ void SocketTest::doSelectOrPoll2(SelectPtr pAction)
readList.push_back(ss1);
readList.push_back(ss2);
assert (pAction(readList, writeList, exceptList, timeout) == 1);
assert (Socket::select(readList, writeList, exceptList, timeout) == 1);
assert (readList.size() == 1);
assert (readList[0] == ss1);
@ -431,7 +413,7 @@ void SocketTest::doSelectOrPoll2(SelectPtr pAction)
exceptList.clear();
writeList.push_back(ss1);
writeList.push_back(ss2);
assert (pAction(readList, writeList, exceptList, timeout) == 2);
assert (Socket::select(readList, writeList, exceptList, timeout) == 2);
assert (readList.empty());
assert (writeList.size() == 2);
assert (writeList[0] == ss1);
@ -444,22 +426,13 @@ void SocketTest::doSelectOrPoll2(SelectPtr pAction)
void SocketTest::testSelect3()
{
doSelectOrPoll3(Socket::select);
#if defined(POCO_HAVE_FD_POLL)
doSelectOrPoll3(Socket::poll);
#endif
}
void SocketTest::doSelectOrPoll3(SelectPtr pAction)
{
Socket::SocketList readList;
Socket::SocketList writeList;
Socket::SocketList exceptList;
Timespan timeout(1000);
int rc = pAction(readList, writeList, exceptList, timeout);
int rc = Socket::select(readList, writeList, exceptList, timeout);
assert (rc == 0);
}
@ -492,5 +465,6 @@ CppUnit::Test* SocketTest::suite()
CppUnit_addTest(pSuite, SocketTest, testSelect);
CppUnit_addTest(pSuite, SocketTest, testSelect2);
CppUnit_addTest(pSuite, SocketTest, testSelect3);
return pSuite;
}