]> git.tdb.fi Git - libs/net.git/blob - source/inet.cpp
Add IPv6 support
[libs/net.git] / source / inet.cpp
1 /* $Id$
2
3 This file is part of libmspnet
4 Copyright © 2008, 2011  Mikkosoft Productions, Mikko Rasa
5 Distributed under the LGPL
6 */
7
8 #include <msp/strings/formatter.h>
9 #include "inet.h"
10
11 using namespace std;
12
13 namespace Msp {
14 namespace Net {
15
16 InetAddr::InetAddr():
17         addr(0),
18         port(0)
19 { }
20
21 InetAddr::InetAddr(const sockaddr_in &sa):
22         addr(sa.sin_addr.s_addr),
23         port(sa.sin_port)
24 { }
25
26 InetAddr::InetAddr(in_addr_t a, in_port_t p):
27         addr(htonl(a)),
28         port(htons(p))
29 { }
30
31 string InetAddr::str() const
32 {
33         const unsigned char *ptr=reinterpret_cast<const unsigned char *>(&addr);
34         string result = format("%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);
35         if(port)
36                 result += format(":%d", ntohs(port));
37         return result;
38 }
39
40 unsigned InetAddr::fill_sockaddr(sockaddr &sa) const
41 {
42         sockaddr_in &sai=reinterpret_cast<sockaddr_in &>(sa);
43         sai.sin_family=AF_INET;
44         sai.sin_addr.s_addr=addr;
45         sai.sin_port=port;
46
47         return sizeof(sockaddr_in);
48 }
49
50 } // namespace Net
51 } // namespace Msp