-/* $Id$
-
-This file is part of libmspnet
-Copyright © 2008 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;
namespace Net {
InetAddr::InetAddr():
- addr(0),
port(0)
-{ }
-
-InetAddr::InetAddr(sockaddr_in &sa):
- addr(sa.sin_addr.s_addr),
- port(sa.sin_port)
-{ }
-
-InetAddr::InetAddr(in_addr_t a, in_port_t p):
- addr(htonl(a)),
- port(htons(p))
-{ }
+{
+ fill(addr, addr+4, 0);
+}
-string InetAddr::str() const
+InetAddr::InetAddr(const SysAddr &sa)
{
- const unsigned char *ptr=reinterpret_cast<const unsigned char *>(&addr);
- return format("%d.%d.%d.%d:%d", static_cast<int>(ptr[0]), static_cast<int>(ptr[1]), static_cast<int>(ptr[2]), static_cast<int>(ptr[3]), ntohs(port));
+ 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);
}
-unsigned InetAddr::fill_sockaddr(sockaddr &sa) const
+SockAddr::SysAddr InetAddr::to_sys() const
{
- sockaddr_in &sai=reinterpret_cast<sockaddr_in &>(sa);
- sai.sin_family=AF_INET;
- sai.sin_addr.s_addr=addr;
- sai.sin_port=port;
+ 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;
+}
- return sizeof(sockaddr_in);
+string InetAddr::str() const
+{
+ string result = format("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
+ if(port)
+ result += format(":%d", port);
+ return result;
}
} // namespace Net