]> git.tdb.fi Git - libs/net.git/blobdiff - source/inet.cpp
Add an overload for resolve that takes host and service separately
[libs/net.git] / source / inet.cpp
index 57d8085cd299f0fb2bb72e5a932652adf69e214f..29e24aa7836d6843652da740fb47de576e8db387 100644 (file)
@@ -1,12 +1,11 @@
-/* $Id$
-
-This file is part of libmspnet
-Copyright © 2008, 2011  Mikkosoft Productions, Mikko Rasa
-Distributed under the LGPL
-*/
-
-#include <msp/strings/formatter.h>
+#ifdef WIN32
+#include <winsock2.h>
+#else
+#include <netinet/in.h>
+#endif
+#include <msp/strings/format.h>
 #include "inet.h"
+#include "sockaddr_private.h"
 
 using namespace std;
 
@@ -14,38 +13,40 @@ namespace Msp {
 namespace Net {
 
 InetAddr::InetAddr():
-       addr(0),
        port(0)
-{ }
+{
+       fill(addr, addr+4, 0);
+}
 
-InetAddr::InetAddr(const sockaddr_in &sa):
-       addr(sa.sin_addr.s_addr),
-       port(sa.sin_port)
-{ }
+InetAddr::InetAddr(const SysAddr &sa)
+{
+       const sockaddr_in &sai = reinterpret_cast<const sockaddr_in &>(sa.addr);
+       addr[0] = sai.sin_addr.s_addr>>24;
+       addr[1] = sai.sin_addr.s_addr>>16;
+       addr[2] = sai.sin_addr.s_addr>>8;
+       addr[3] = sai.sin_addr.s_addr;
+       port = ntohs(sai.sin_port);
+}
 
-InetAddr::InetAddr(in_addr_t a, in_port_t p):
-       addr(htonl(a)),
-       port(htons(p))
-{ }
+SockAddr::SysAddr InetAddr::to_sys() const
+{
+       SysAddr sa;
+       sa.size = sizeof(sockaddr_in);
+       sockaddr_in &sai = reinterpret_cast<sockaddr_in &>(sa.addr);
+       sai.sin_family = AF_INET;
+       sai.sin_addr.s_addr = (addr[0]<<24) | (addr[1]<<16) | (addr[2]<<8) | (addr[3]);
+       sai.sin_port = htons(port);
+
+       return sa;
+}
 
 string InetAddr::str() const
 {
-       const unsigned char *ptr=reinterpret_cast<const unsigned char *>(&addr);
-       string result = format("%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);
+       string result = format("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
        if(port)
-               result += format(":%d", ntohs(port));
+               result += format(":%d", port);
        return result;
 }
 
-unsigned InetAddr::fill_sockaddr(sockaddr &sa) const
-{
-       sockaddr_in &sai=reinterpret_cast<sockaddr_in &>(sa);
-       sai.sin_family=AF_INET;
-       sai.sin_addr.s_addr=addr;
-       sai.sin_port=port;
-
-       return sizeof(sockaddr_in);
-}
-
 } // namespace Net
 } // namespace Msp