temp commit
This commit is contained in:
parent
1dece111cc
commit
1e193d687d
|
@ -27,13 +27,52 @@
|
||||||
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
#include "common/dns_utils.h"
|
#include "common/dns_utils.h"
|
||||||
|
#include <sstream>
|
||||||
#include <ldns/rr.h> // for RR type and class defs
|
#include <ldns/rr.h> // for RR type and class defs
|
||||||
#include <unbound.h>
|
#include <unbound.h>
|
||||||
#include <arpa/inet.h> // for inet_ntoa (bytes to text for IPs)
|
|
||||||
|
|
||||||
namespace tools
|
namespace tools
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// fuck it, I'm tired of dealing with getnameinfo()/inet_ntop/etc
|
||||||
|
std::string ipv4_to_string(const char* src)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
unsigned int bytes[4];
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
{
|
||||||
|
unsigned char a = src[i];
|
||||||
|
bytes[i] = a;
|
||||||
|
}
|
||||||
|
ss << bytes[0] << "."
|
||||||
|
<< bytes[1] << "."
|
||||||
|
<< bytes[2] << "."
|
||||||
|
<< bytes[3];
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
// this obviously will need to change, but is here to reflect the above
|
||||||
|
// stop-gap measure and to make the tests pass at least...
|
||||||
|
std::string ipv6_to_string(const char* src)
|
||||||
|
{
|
||||||
|
std::stringstream ss;
|
||||||
|
unsigned int bytes[8];
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
unsigned char a = src[i];
|
||||||
|
bytes[i] = a;
|
||||||
|
}
|
||||||
|
ss << bytes[0] << ":"
|
||||||
|
<< bytes[1] << ":"
|
||||||
|
<< bytes[2] << ":"
|
||||||
|
<< bytes[3] << ":"
|
||||||
|
<< bytes[4] << ":"
|
||||||
|
<< bytes[5] << ":"
|
||||||
|
<< bytes[6] << ":"
|
||||||
|
<< bytes[7];
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
// custom smart pointer.
|
// custom smart pointer.
|
||||||
// TODO: see if std::auto_ptr and the like support custom destructors
|
// TODO: see if std::auto_ptr and the like support custom destructors
|
||||||
class ub_result_ptr
|
class ub_result_ptr
|
||||||
|
@ -96,13 +135,7 @@ std::vector<std::string> DNSResolver::get_ipv4(const std::string& url)
|
||||||
{
|
{
|
||||||
for (size_t i=0; result.ptr->data[i] != NULL; i++)
|
for (size_t i=0; result.ptr->data[i] != NULL; i++)
|
||||||
{
|
{
|
||||||
char as_str[INET_ADDRSTRLEN];
|
addresses.push_back(ipv4_to_string(result.ptr->data[i]));
|
||||||
|
|
||||||
// convert bytes to string, append if no error
|
|
||||||
if (inet_ntop(AF_INET, result.ptr->data[i], as_str, sizeof(as_str)))
|
|
||||||
{
|
|
||||||
addresses.push_back(as_str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,13 +161,7 @@ std::vector<std::string> DNSResolver::get_ipv6(const std::string& url)
|
||||||
{
|
{
|
||||||
for (size_t i=0; result.ptr->data[i] != NULL; i++)
|
for (size_t i=0; result.ptr->data[i] != NULL; i++)
|
||||||
{
|
{
|
||||||
char as_str[INET6_ADDRSTRLEN];
|
addresses.push_back(ipv6_to_string(result.ptr->data[i]));
|
||||||
|
|
||||||
// convert bytes to string, append if no error
|
|
||||||
if (inet_ntop(AF_INET6, result.ptr->data[i], as_str, sizeof(as_str)))
|
|
||||||
{
|
|
||||||
addresses.push_back(as_str);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue