]> git.tdb.fi Git - libs/net.git/blob - source/net/sockaddr.cpp
Add a dynamic receiver class for more flexible packet handling
[libs/net.git] / source / net / sockaddr.cpp
1 #include "sockaddr.h"
2 #include <stdexcept>
3 #include "platform_api.h"
4 #include "inet.h"
5 #include "inet6.h"
6 #include "sockaddr_private.h"
7 #include "unix.h"
8
9 using namespace std;
10
11 namespace Msp {
12 namespace Net {
13
14 SockAddr *SockAddr::new_from_sys(const SysAddr &sa)
15 {
16         switch(sa.addr.ss_family)
17         {
18         case AF_INET:
19                 return new InetAddr(sa);
20         case AF_INET6:
21                 return new Inet6Addr(sa);
22         case AF_UNIX:
23                 return new UnixAddr(sa);
24         default:
25                 throw invalid_argument("SockAddr::create");
26         }
27 }
28
29 SockAddr::SysAddr::SysAddr()
30 {
31         addr.ss_family = AF_UNSPEC;
32 }
33
34
35 int family_to_sys(Family f)
36 {
37         switch(f)
38         {
39         case UNSPEC: return AF_UNSPEC;
40         case INET:   return AF_INET;
41         case INET6:  return AF_INET6;
42         case UNIX:   return AF_UNIX;
43         default: throw invalid_argument("family_to_sys");
44         }
45 }
46
47 Family family_from_sys(int f)
48 {
49         switch(f)
50         {
51         case AF_UNSPEC: return UNSPEC;
52         case AF_INET:   return INET;
53         case AF_INET6:  return INET6;
54         case AF_UNIX:   return UNIX;
55         default: throw invalid_argument("family_from_sys");
56         }
57 }
58
59 } // namespace Net
60 } // namespace Msp