face-uri.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
28 #ifndef NDN_UTIL_FACE_URI_HPP
29 #define NDN_UTIL_FACE_URI_HPP
30 
31 #include "../common.hpp"
32 #include "time.hpp"
33 
34 #include <boost/asio/ip/tcp.hpp>
35 #include <boost/asio/ip/udp.hpp>
36 #include <boost/asio/local/stream_protocol.hpp>
37 
38 namespace ndn {
39 namespace util {
40 
41 namespace ethernet {
42 class Address;
43 } // namespace ethernet
44 
48 class FaceUri
49 {
50 public:
51  class Error : public std::invalid_argument
52  {
53  public:
54  explicit
55  Error(const std::string& what)
56  : std::invalid_argument(what)
57  {
58  }
59  };
60 
61  FaceUri();
62 
68  explicit
69  FaceUri(const std::string& uri);
70 
71  // This overload is needed so that calls with string literal won't be
72  // resolved to boost::asio::local::stream_protocol::endpoint overload.
73  explicit
74  FaceUri(const char* uri);
75 
77  bool
78  parse(const std::string& uri);
79 
80 public: // scheme-specific construction
82  explicit
83  FaceUri(const boost::asio::ip::udp::endpoint& endpoint);
84 
86  explicit
87  FaceUri(const boost::asio::ip::tcp::endpoint& endpoint);
88 
90  FaceUri(const boost::asio::ip::tcp::endpoint& endpoint, const std::string& scheme);
91 
92 #ifdef BOOST_ASIO_HAS_LOCAL_SOCKETS
93  explicit
95  FaceUri(const boost::asio::local::stream_protocol::endpoint& endpoint);
96 #endif // BOOST_ASIO_HAS_LOCAL_SOCKETS
97 
99  static FaceUri
100  fromFd(int fd);
101 
103  explicit
104  FaceUri(const ethernet::Address& address);
105 
107  static FaceUri
108  fromDev(const std::string& ifname);
109 
111  static FaceUri
112  fromUdpDev(const boost::asio::ip::udp::endpoint& endpoint, const std::string& ifname);
113 
114 public: // getters
116  const std::string&
117  getScheme() const
118  {
119  return m_scheme;
120  }
121 
123  const std::string&
124  getHost() const
125  {
126  return m_host;
127  }
128 
130  const std::string&
131  getPort() const
132  {
133  return m_port;
134  }
135 
137  const std::string&
138  getPath() const
139  {
140  return m_path;
141  }
142 
144  std::string
145  toString() const;
146 
147 public: // EqualityComparable concept
148  bool
149  operator==(const FaceUri& rhs) const;
150 
151  bool
152  operator!=(const FaceUri& rhs) const;
153 
154 public: // canonical FaceUri
157  static bool
158  canCanonize(const std::string& scheme);
159 
165  bool
166  isCanonical() const;
167 
168  typedef function<void(const FaceUri&)> CanonizeSuccessCallback;
169  typedef function<void(const std::string& reason)> CanonizeFailureCallback;
170 
180  void
181  canonize(const CanonizeSuccessCallback& onSuccess,
182  const CanonizeFailureCallback& onFailure,
183  boost::asio::io_service& io,
184  const time::nanoseconds& timeout) const;
185 
186 private:
187  std::string m_scheme;
188  std::string m_host;
189  std::string m_port;
190  std::string m_path;
192  bool m_isV6;
193 
194  friend std::ostream& operator<<(std::ostream& os, const FaceUri& uri);
195 };
196 
197 std::ostream&
198 operator<<(std::ostream& os, const FaceUri& uri);
199 
200 } // namespace util
201 } // namespace ndn
202 
203 #endif // NDN_UTIL_FACE_URI_HPP
Copyright (c) 2013-2016 Regents of the University of California.
Definition: common.hpp:74
const std::string & getPath() const
get path
Definition: face-uri.hpp:138
bool parse(const std::string &uri)
exception-safe parsing
Definition: face-uri.cpp:62
static bool canCanonize(const std::string &scheme)
Definition: face-uri.cpp:534
bool operator==(const FaceUri &rhs) const
Definition: face-uri.cpp:178
represents an Ethernet hardware address
Definition: ethernet.hpp:53
represents the underlying protocol and address used by a Face
Definition: face-uri.hpp:48
STL namespace.
function< void(const FaceUri &)> CanonizeSuccessCallback
Definition: face-uri.hpp:168
const std::string & getPort() const
get port
Definition: face-uri.hpp:131
bool isCanonical() const
determine whether this FaceUri is in canonical form
Definition: face-uri.cpp:540
friend std::ostream & operator<<(std::ostream &os, const FaceUri &uri)
Definition: face-uri.cpp:202
const std::string & getScheme() const
get scheme (protocol)
Definition: face-uri.hpp:117
Error(const std::string &what)
Definition: face-uri.hpp:55
std::ostream & operator<<(std::ostream &os, Digest< Hash > &digest)
Definition: digest.cpp:170
bool operator!=(const FaceUri &rhs) const
Definition: face-uri.cpp:188
const std::string & getHost() const
get host (domain)
Definition: face-uri.hpp:124
static FaceUri fromDev(const std::string &ifname)
create dev FaceUri from network device name
Definition: face-uri.cpp:159
static FaceUri fromUdpDev(const boost::asio::ip::udp::endpoint &endpoint, const std::string &ifname)
create udp4 or udp6 NIC-associated FaceUri from endpoint and network device name
Definition: face-uri.cpp:168
std::string toString() const
write as a string
Definition: face-uri.cpp:194
function< void(const std::string &reason)> CanonizeFailureCallback
Definition: face-uri.hpp:169
static FaceUri fromFd(int fd)
create fd FaceUri from file descriptor
Definition: face-uri.cpp:143
void canonize(const CanonizeSuccessCallback &onSuccess, const CanonizeFailureCallback &onFailure, boost::asio::io_service &io, const time::nanoseconds &timeout) const
asynchronously convert this FaceUri to canonical form
Definition: face-uri.cpp:551