blob: b9ad6d03b47a153df9440ace5fd6ed97bc531ab7 [file] [log] [blame]
Greg Claytonac304e42011-07-19 16:44:54 +00001//===-- SocketAddress.cpp ---------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Host/SocketAddress.h"
11#include <stddef.h>
12
13// C Includes
14#include <string.h>
15
16// C++ Includes
17// Other libraries and framework includes
18// Project includes
19
20using namespace lldb_private;
21
22//----------------------------------------------------------------------
23// SocketAddress constructor
24//----------------------------------------------------------------------
25SocketAddress::SocketAddress()
26{
27 Clear ();
28}
29
30//----------------------------------------------------------------------
31// SocketAddress copy constructor
32//----------------------------------------------------------------------
33SocketAddress::SocketAddress (const SocketAddress& rhs) :
34 m_socket_addr (rhs.m_socket_addr)
35{
36}
37
38//----------------------------------------------------------------------
39// Destructor
40//----------------------------------------------------------------------
41SocketAddress::~SocketAddress()
42{
43}
44
45void
46SocketAddress::Clear ()
47{
48 memset (&m_socket_addr, 0, sizeof(m_socket_addr));
49}
50
51bool
52SocketAddress::IsValid () const
53{
54 return GetLength () != 0;
55}
56
57socklen_t
58SocketAddress::GetLength () const
59{
60 return m_socket_addr.sa.sa_len;
61}
62
63socklen_t
64SocketAddress::GetMaxLength ()
65{
66 return sizeof (sockaddr_t);
67}
68
69void
70SocketAddress::SetLength (socklen_t len)
71{
72 m_socket_addr.sa.sa_len = len;
73}
74
75sa_family_t
76SocketAddress::GetFamily () const
77{
78 return m_socket_addr.sa.sa_family;
79}
80
81void
82SocketAddress::SetFamily (sa_family_t family)
83{
84 m_socket_addr.sa.sa_family = family;
85}
86
87in_port_t
88SocketAddress::GetPort () const
89{
90 switch (GetFamily())
91 {
92 case AF_INET: return m_socket_addr.sa_ipv4.sin_port;
93 case AF_INET6: return m_socket_addr.sa_ipv6.sin6_port;
94 }
95 return 0;
96}
97
98//----------------------------------------------------------------------
99// SocketAddress assignment operator
100//----------------------------------------------------------------------
101const SocketAddress&
102SocketAddress::operator=(const SocketAddress& rhs)
103{
104 if (this != &rhs)
105 m_socket_addr = rhs.m_socket_addr;
106 return *this;
107}
108
109const SocketAddress&
110SocketAddress::operator=(const struct addrinfo *addr_info)
111{
112 Clear();
113 if (addr_info &&
114 addr_info->ai_addr &&
115 addr_info->ai_addrlen > 0&&
116 addr_info->ai_addrlen <= sizeof m_socket_addr)
117 {
118 ::memcpy (&m_socket_addr,
119 addr_info->ai_addr,
120 addr_info->ai_addrlen);
121 }
122 return *this;
123}
124
125
126