// Copyright (c) 2009-2010 Satoshi Nakamoto
-// Copyright (c) 2011 The Bitcoin developers
+// Copyright (c) 2009-2012 The Bitcoin developers
// Distributed under the MIT/X11 software license, see the accompanying
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
bool static LookupIntern(const char *pszName, std::vector<CNetAddr>& vIP, int nMaxSolutions, bool fAllowLookup)
{
vIP.clear();
- struct addrinfo aiHint = {};
+ struct addrinfo aiHint;
+ memset(&aiHint, 0, sizeof(struct addrinfo));
+
aiHint.ai_socktype = SOCK_STREAM;
aiHint.ai_protocol = IPPROTO_TCP;
#ifdef WIN32
return LookupHost(pszName, vIP, nMaxSolutions, false);
}
-bool Lookup(const char *pszName, CService& addr, int portDefault, bool fAllowLookup)
+bool Lookup(const char *pszName, std::vector<CService>& vAddr, int portDefault, bool fAllowLookup, int nMaxSolutions)
{
if (pszName[0] == 0)
return false;
}
std::vector<CNetAddr> vIP;
- bool fRet = LookupIntern(pszHost, vIP, 1, fAllowLookup);
+ bool fRet = LookupIntern(pszHost, vIP, nMaxSolutions, fAllowLookup);
if (!fRet)
return false;
- addr = CService(vIP[0], port);
+ vAddr.resize(vIP.size());
+ for (int i = 0; i < vIP.size(); i++)
+ vAddr[i] = CService(vIP[i], port);
+ return true;
+}
+
+bool Lookup(const char *pszName, CService& addr, int portDefault, bool fAllowLookup)
+{
+ std::vector<CService> vService;
+ bool fRet = Lookup(pszName, vService, portDefault, fAllowLookup, 1);
+ if (!fRet)
+ return false;
+ addr = vService[0];
return true;
}
*this = ip;
}
-CService::CService(const char *pszIp, int portIn, bool fAllowLookup)
+CService::CService(const char *pszIpPort, int portDefault, bool fAllowLookup)
{
- std::vector<CNetAddr> ip;
- if (LookupHost(pszIp, ip, 1, fAllowLookup))
- *this = CService(ip[0], portIn);
+ Init();
+ CService ip;
+ if (Lookup(pszIpPort, ip, portDefault, fAllowLookup))
+ *this = ip;
}
CService::CService(const std::string &strIpPort, bool fAllowLookup)
*this = ip;
}
-CService::CService(const std::string &strIp, int portIn, bool fAllowLookup)
+CService::CService(const std::string &strIpPort, int portDefault, bool fAllowLookup)
{
- std::vector<CNetAddr> ip;
- if (LookupHost(strIp.c_str(), ip, 1, fAllowLookup))
- *this = CService(ip[0], portIn);
+ Init();
+ CService ip;
+ if (Lookup(strIpPort.c_str(), ip, portDefault, fAllowLookup))
+ *this = ip;
}
unsigned short CService::GetPort() const