]> git.tdb.fi Git - libs/net.git/blob - source/net/inet.cpp
Move most platform-specific code into overlay directories
[libs/net.git] / source / net / inet.cpp
1 #include "platform_api.h"
2 #include <msp/strings/format.h>
3 #include "inet.h"
4 #include "sockaddr_private.h"
5
6 using namespace std;
7
8 namespace Msp {
9 namespace Net {
10
11 InetAddr::InetAddr():
12         port(0)
13 {
14         fill(addr, addr+4, 0);
15 }
16
17 InetAddr::InetAddr(const SysAddr &sa)
18 {
19         const sockaddr_in &sai = reinterpret_cast<const sockaddr_in &>(sa.addr);
20         const char *ptr = reinterpret_cast<const char *>(&sai.sin_addr.s_addr);
21         std::copy(ptr, ptr+4, addr);
22         port = ntohs(sai.sin_port);
23 }
24
25 SockAddr::SysAddr InetAddr::to_sys() const
26 {
27         SysAddr sa;
28         sa.size = sizeof(sockaddr_in);
29         sockaddr_in &sai = reinterpret_cast<sockaddr_in &>(sa.addr);
30         sai.sin_family = AF_INET;
31         char *ptr = reinterpret_cast<char *>(&sai.sin_addr.s_addr);
32         std::copy(addr, addr+4, ptr);
33         sai.sin_port = htons(port);
34
35         return sa;
36 }
37
38 string InetAddr::str() const
39 {
40         string result = format("%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
41         if(port)
42                 result += format(":%d", port);
43         return result;
44 }
45
46 } // namespace Net
47 } // namespace Msp