Kea  2.3.5-git
tcp_endpoint.h
Go to the documentation of this file.
1 // Copyright (C) 2011-2015 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef TCP_ENDPOINT_H
8 #define TCP_ENDPOINT_H 1
9 
10 #ifndef BOOST_ASIO_HPP
11 #error "asio.hpp must be included before including this, see asiolink.h as to why"
12 #endif
13 
14 #include <asiolink/io_endpoint.h>
15 
16 namespace isc {
17 namespace asiolink {
18 
23 class TCPEndpoint : public IOEndpoint {
24 public:
28 
29 
35  asio_endpoint_placeholder_(new boost::asio::ip::tcp::endpoint()),
36  asio_endpoint_(*asio_endpoint_placeholder_)
37  {}
38 
43  TCPEndpoint(const IOAddress& address, const unsigned short port) :
44  asio_endpoint_placeholder_(
45  new boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address.toText()),
46  port)),
47  asio_endpoint_(*asio_endpoint_placeholder_)
48  {}
49 
56  TCPEndpoint(boost::asio::ip::tcp::endpoint& asio_endpoint) :
57  asio_endpoint_placeholder_(NULL), asio_endpoint_(asio_endpoint)
58  {}
59 
66  TCPEndpoint(const boost::asio::ip::tcp::endpoint& asio_endpoint) :
67  asio_endpoint_placeholder_(new boost::asio::ip::tcp::endpoint(asio_endpoint)),
68  asio_endpoint_(*asio_endpoint_placeholder_)
69  {}
70 
72  virtual ~TCPEndpoint() { delete asio_endpoint_placeholder_; }
74 
75  virtual IOAddress getAddress() const {
76  return (asio_endpoint_.address());
77  }
78 
79  virtual const struct sockaddr& getSockAddr() const {
80  return (*asio_endpoint_.data());
81  }
82 
83  virtual uint16_t getPort() const {
84  return (asio_endpoint_.port());
85  }
86 
87  virtual short getProtocol() const {
88  return (asio_endpoint_.protocol().protocol());
89  }
90 
91  virtual short getFamily() const {
92  return (asio_endpoint_.protocol().family());
93  }
94 
95  // This is not part of the exposed IOEndpoint API but allows
96  // direct access to the ASIO implementation of the endpoint
97  inline const boost::asio::ip::tcp::endpoint& getASIOEndpoint() const {
98  return (asio_endpoint_);
99  }
100  inline boost::asio::ip::tcp::endpoint& getASIOEndpoint() {
101  return (asio_endpoint_);
102  }
103 
104 private:
105  boost::asio::ip::tcp::endpoint* asio_endpoint_placeholder_;
106  boost::asio::ip::tcp::endpoint& asio_endpoint_;
107 };
108 
109 } // namespace asiolink
110 } // namespace isc
111 #endif // TCP_ENDPOINT_H
112 
113 // Local Variables:
114 // mode: c++
115 // End:
Defines the logger used by the top-level component of kea-lfc.