blob: e524b8bc2b6dc64204de66943277c5f6b7b6c574 [file] [log] [blame]
Jeff Thompson25b4e612013-10-10 16:03:24 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -07002/**
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07003 * Copyright (c) 2013-2014, Regents of the University of California.
4 * All rights reserved.
5 *
6 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
7 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
8 *
9 * This file licensed under New BSD License. See COPYING for detailed information about
10 * ndn-cxx library copyright, permissions, and redistribution restrictions.
11 *
12 * Based on code originally written by Jeff Thompson <jefft0@remap.ucla.edu>
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -070013 */
14
Jeff Thompsonb9e3c8e2013-08-02 11:42:51 -070015#ifndef NDN_FACE_HPP
Jeff Thompsona0d18c92013-08-06 13:55:32 -070016#define NDN_FACE_HPP
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -070017
Alexander Afanasyev0222fba2014-02-09 23:16:02 -080018#include "common.hpp"
19#include "interest.hpp"
20#include "data.hpp"
21
Alexander Afanasyeve2e0d752014-01-03 13:30:30 -080022#include "transport/transport.hpp"
23#include "transport/unix-transport.hpp"
Alexander Afanasyev20d2c582014-01-26 15:32:51 -080024#include "transport/tcp-transport.hpp"
Jeff Thompsonbeb8b7d2013-07-16 15:49:21 -070025
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070026#include "util/scheduler.hpp"
Alexander Afanasyev0222fba2014-02-09 23:16:02 -080027#include "detail/registered-prefix.hpp"
28#include "detail/pending-interest.hpp"
29
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -070030namespace ndn {
31
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -070032namespace nfd {
33class Controller;
34}
35class IdentityCertificate;
36
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -070037/**
Alexander Afanasyev0222fba2014-02-09 23:16:02 -080038 * An OnData function object is used to pass a callback to expressInterest.
39 */
40typedef function<void(const Interest&, Data&)> OnData;
41
42/**
43 * An OnTimeout function object is used to pass a callback to expressInterest.
44 */
45typedef function<void(const Interest&)> OnTimeout;
46
47/**
48 * An OnInterest function object is used to pass a callback to registerPrefix.
49 */
Alexander Afanasyev90164962014-03-06 08:29:59 +000050typedef function<void (const InterestFilter&, const Interest&)> OnInterest;
Alexander Afanasyev0222fba2014-02-09 23:16:02 -080051
52/**
53 * An OnRegisterFailed function object is used to report when registerPrefix fails.
54 */
Alexander Afanasyev90164962014-03-06 08:29:59 +000055typedef function<void(const InterestFilter&, const std::string&)> OnSetInterestFilterFailed;
Alexander Afanasyev0222fba2014-02-09 23:16:02 -080056
57
58
59/**
60 * @brief Abstraction to communicate with local or remote NDN forwarder
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -070061 */
Alexander Afanasyev8460afb2014-02-15 20:31:42 -080062class Face : noncopyable
63{
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -070064public:
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -070065 class Error : public std::runtime_error
66 {
67 public:
68 explicit
69 Error(const std::string& what)
70 : std::runtime_error(what)
71 {
72 }
73 };
Alexander Afanasyevb790d952014-01-24 12:07:53 -080074
75 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -070076 * @brief Create a new Face using the default transport (UnixTransport)
77 *
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -060078 * @throws ConfigFile::Error on configuration file parse failure
79 * @throws Face::Error on unsupported protocol
Alexander Afanasyevb790d952014-01-24 12:07:53 -080080 */
Alexander Afanasyevf7ca3202014-02-14 22:28:31 -080081 Face();
Alexander Afanasyeve2e0d752014-01-03 13:30:30 -080082
83 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -070084 * @brief Create a new Face using the default transport (UnixTransport)
85 *
86 * @deprecated This constructor is deprecated. Use `Face(boost::asio::io_service&)`
87 * instead.
88 *
89 * @param ioService A shared pointer to boost::io_service object that should control all
90 * IO operations
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -060091 * @throws ConfigFile::Error on configuration file parse failure
92 * @throws Face::Error on unsupported protocol
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -070093 */
Alexander Afanasyevf7ca3202014-02-14 22:28:31 -080094 explicit
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -080095 Face(const shared_ptr<boost::asio::io_service>& ioService);
96
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -070097 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -070098 * @brief Create a new Face using the default transport (UnixTransport)
99 *
100 * @par Usage examples:
101 *
102 * Face face1;
103 * Face face2(face1.getIoService());
104 *
105 * // Now the following ensures that events on both faces are processed
106 * face1.processEvents();
107 * // or face1.getIoService().run();
108 *
109 * @par or
110 *
111 * boost::asio::io_service ioService;
112 * Face face1(ioService);
113 * Face face2(ioService);
114 * ...
115 *
116 * ioService.run();
117 *
118 * @param ioService A reference to boost::io_service object that should control all
119 * IO operations.
120 * @throws ConfigFile::Error on configuration file parse failure
121 * @throws Face::Error on unsupported protocol
122 */
123 explicit
124 Face(boost::asio::io_service& ioService);
125
126 /**
127 * @brief Create a new Face using TcpTransport
128 *
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -0700129 * @param host The host of the NDN hub.
Alexander Afanasyev20d2c582014-01-26 15:32:51 -0800130 * @param port The port or service name of the NDN hub. If omitted. use 6363.
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600131 * @throws Face::Error on unsupported protocol
Jeff Thompsonfe08e5a2013-08-13 11:15:59 -0700132 */
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800133 Face(const std::string& host, const std::string& port = "6363");
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800134
135 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700136 * @brief Create a new Face using the given Transport
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800137 * @param transport A shared_ptr to a Transport object used for communication.
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600138 * @throws Face::Error on unsupported protocol
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800139 */
Alexander Afanasyevf7ca3202014-02-14 22:28:31 -0800140 explicit
141 Face(const shared_ptr<Transport>& transport);
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800142
143 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700144 * @brief Create a new Face using the given Transport and IO service object
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800145 *
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700146 * @sa Face(boost::asio::io_service&)
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800147 *
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600148 * @throws Face::Error on unsupported protocol
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800149 */
150 Face(const shared_ptr<Transport>& transport,
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700151 boost::asio::io_service& ioService);
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800152
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700153
154 ~Face();
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700155
Jeff Thompson4fe45512013-08-23 14:06:38 -0700156 /**
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800157 * @brief Express Interest
158 *
159 * @param interest A reference to the Interest. This copies the Interest.
160 * @param onData A function object to call when a matching data packet is received.
161 * @param onTimeout A function object to call if the interest times out.
162 * If onTimeout is an empty OnTimeout(), this does not use it.
163 *
Jeff Thompson11095142013-10-01 16:20:28 -0700164 * @return The pending interest ID which can be used with removePendingInterest.
Jeff Thompson4fe45512013-08-23 14:06:38 -0700165 */
Alexander Afanasyevb790d952014-01-24 12:07:53 -0800166 const PendingInterestId*
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800167 expressInterest(const Interest& interest,
168 const OnData& onData, const OnTimeout& onTimeout = OnTimeout());
Jeff Thompson4fe45512013-08-23 14:06:38 -0700169
170 /**
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800171 * @brief Express Interest using name and Interest template
172 *
173 * @param name Name of the Interest
174 * @param tmpl Interest template to fill parameters
175 * @param onData A callback to call when a matching data packet is received.
176 * @param onTimeout A callback to call if the interest times out.
177 * If onTimeout is an empty OnTimeout(), this does not use it.
178 *
Jeff Thompson11095142013-10-01 16:20:28 -0700179 * @return The pending interest ID which can be used with removePendingInterest.
Jeff Thompson7aec0252013-08-22 17:29:57 -0700180 */
Alexander Afanasyevb790d952014-01-24 12:07:53 -0800181 const PendingInterestId*
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800182 expressInterest(const Name& name,
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800183 const Interest& tmpl,
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800184 const OnData& onData, const OnTimeout& onTimeout = OnTimeout());
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700185
Jeff Thompson11095142013-10-01 16:20:28 -0700186 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700187 * @brief Remove the pending interest entry with the pendingInterestId from the pending
188 * interest table.
189 *
190 * This does not affect another pending interest with a different pendingInterestId,
191 * even it if has the same interest name. If there is no entry with the
192 * pendingInterestId, do nothing.
193 *
Jeff Thompson11095142013-10-01 16:20:28 -0700194 * @param pendingInterestId The ID returned from expressInterest.
195 */
196 void
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800197 removePendingInterest(const PendingInterestId* pendingInterestId);
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700198
Jeff Thompson432c8be2013-08-09 16:16:08 -0700199 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700200 * @brief Register prefix with the connected NDN hub and call onInterest when a matching
201 * interest is received.
202 *
Alexander Afanasyev90164962014-03-06 08:29:59 +0000203 * @param interestFilter Interest filter (prefix part will be registered with the forwarder)
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700204 * @param onInterest A function object to call when a matching interest is received
205 *
206 * @param onRegisterFailed A function object to call if failed to retrieve the connected
207 * hub’s ID or failed to register the prefix. This calls
208 * onRegisterFailed(prefix) where prefix is the prefix given to
209 * registerPrefix.
210 *
Jeff Thompson11095142013-10-01 16:20:28 -0700211 * @return The registered prefix ID which can be used with removeRegisteredPrefix.
Jeff Thompson86507bc2013-08-23 20:51:38 -0700212 */
Alexander Afanasyevb790d952014-01-24 12:07:53 -0800213 const RegisteredPrefixId*
Alexander Afanasyev90164962014-03-06 08:29:59 +0000214 setInterestFilter(const InterestFilter& interestFilter,
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800215 const OnInterest& onInterest,
216 const OnSetInterestFilterFailed& onSetInterestFilterFailed);
Jeff Thompson11095142013-10-01 16:20:28 -0700217
218 /**
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700219 * @brief Register prefix with the connected NDN hub and call onInterest when a matching
220 * interest is received.
221 *
Alexander Afanasyev90164962014-03-06 08:29:59 +0000222 * @param interestFilter Interest filter (prefix part will be registered with the forwarder)
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700223 * @param onInterest A function object to call when a matching interest is received
224 *
225 * @param onRegisterFailed A function object to call if failed to retrieve the connected
226 * hub’s ID or failed to register the prefix. This calls
227 * onRegisterFailed(prefix) where prefix is the prefix given to
228 * registerPrefix.
229 *
230 * @param certificate A certificate under which the prefix registration command interest
231 * is signed.
232 *
233 * @return The registered prefix ID which can be used with removeRegisteredPrefix.
234 */
235 const RegisteredPrefixId*
Alexander Afanasyev90164962014-03-06 08:29:59 +0000236 setInterestFilter(const InterestFilter& interestFilter,
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700237 const OnInterest& onInterest,
238 const OnSetInterestFilterFailed& onSetInterestFilterFailed,
239 const IdentityCertificate& certificate);
240
241 /**
242 * @brief Register prefix with the connected NDN hub and call onInterest when a matching
243 * interest is received.
244 *
Alexander Afanasyev90164962014-03-06 08:29:59 +0000245 * @param interestFilter Interest filter (prefix part will be registered with the forwarder)
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700246 * @param onInterest A function object to call when a matching interest is received
247 *
248 * @param onRegisterFailed A function object to call if failed to retrieve the connected
249 * hub’s ID or failed to register the prefix. This calls
250 * onRegisterFailed(prefix) where prefix is the prefix given to
251 * registerPrefix.
252 *
253 * @param identity A signing identity. A command interest is signed under the default
254 * certificate of this identity.
255 *
256 * @return The registered prefix ID which can be used with removeRegisteredPrefix.
257 */
258 const RegisteredPrefixId*
Alexander Afanasyev90164962014-03-06 08:29:59 +0000259 setInterestFilter(const InterestFilter& interestFilter,
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700260 const OnInterest& onInterest,
261 const OnSetInterestFilterFailed& onSetInterestFilterFailed,
262 const Name& identity);
263
264 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700265 * @brief Remove the registered prefix entry with the registeredPrefixId from the
266 * pending interest table.
267 *
268 * This does not affect another registered prefix with a different registeredPrefixId,
269 * even it if has the same prefix name. If there is no entry with the
270 * registeredPrefixId, do nothing.
271 *
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700272 * unsetInterestFilter will use the same credentials as original
273 * setInterestFilter/registerPrefix command
274 *
Jeff Thompson11095142013-10-01 16:20:28 -0700275 * @param registeredPrefixId The ID returned from registerPrefix.
276 */
277 void
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800278 unsetInterestFilter(const RegisteredPrefixId* registeredPrefixId);
Alexander Afanasyeva557d5a2013-12-28 21:59:03 -0800279
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700280 /**
281 * @brief (FOR DEBUG PURPOSES ONLY) Request direct NFD FIB management
282 */
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700283 void
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700284 setDirectFibManagement(bool isDirectFibManagementRequested = false);
Yingdi Yue66bf2a2014-04-28 17:07:36 -0700285
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800286 /**
Alexander Afanasyeva557d5a2013-12-28 21:59:03 -0800287 * @brief Publish data packet
288 *
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700289 * This method can be called to satisfy the incoming Interest or to put Data packet into
290 * the cache of the local NDN forwarder
Alexander Afanasyeva557d5a2013-12-28 21:59:03 -0800291 */
292 void
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800293 put(const Data& data);
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700294
Jeff Thompson86507bc2013-08-23 20:51:38 -0700295 /**
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700296 * @brief Process any data to receive or call timeout callbacks.
Alexander Afanasyeva557d5a2013-12-28 21:59:03 -0800297 *
298 * This call will block forever (default timeout == 0) to process IO on the face.
299 * To exit, one expected to call face.shutdown() from one of the callback methods.
300 *
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700301 * If positive timeout is specified, then processEvents will exit after this timeout, if
302 * not stopped earlier with face.shutdown() or when all active events finish. The call
303 * can be called repeatedly, if desired.
Alexander Afanasyeva557d5a2013-12-28 21:59:03 -0800304 *
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700305 * If negative timeout is specified, then processEvents will not block and process only
306 * pending events.
Alexander Afanasyevf75a0aa2014-01-09 14:29:22 -0800307 *
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700308 * @param timeout maximum time to block the thread.
309 * @param keepThread Keep thread in a blocked state (in event processing), even when
310 * there are no outstanding events (e.g., no Interest/Data is expected)
311 *
312 * @throw This may throw an exception for reading data or in the callback for processing
313 * the data. If you call this from an main event loop, you may want to catch and
314 * log/disregard all exceptions.
Jeff Thompson432c8be2013-08-09 16:16:08 -0700315 */
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700316 void
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -0700317 processEvents(const time::milliseconds& timeout = time::milliseconds::zero(),
318 bool keepThread = false);
Jeff Thompson432c8be2013-08-09 16:16:08 -0700319
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700320 /**
321 * @brief Shutdown face operations
322 *
323 * This method cancels all pending operations and closes connection to NDN Forwarder.
324 *
325 * Note that this method does not stop IO service and if the same IO service is shared
326 * between multiple Faces or with other IO objects (e.g., Scheduler).
327 */
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700328 void
Jeff Thompson0050abe2013-09-17 12:50:25 -0700329 shutdown();
Yingdi Yu0d920812014-01-30 14:50:57 -0800330
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700331 /**
332 * @brief Get shared_ptr of the IO service object
333 *
334 * @deprecated Use getIoService instead
335 */
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700336 shared_ptr<boost::asio::io_service>
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700337 ioService()
338 {
339 return m_ioService;
340 }
341
342 /**
343 * @brief Get reference to IO service object
344 */
345 boost::asio::io_service&
346 getIoService()
347 {
348 return *m_ioService;
349 }
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800350
351private:
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600352
353 /**
354 * @throws Face::Error on unsupported protocol
355 */
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800356 void
Alexander Afanasyev7682ccb2014-02-20 10:29:35 -0800357 construct(const shared_ptr<Transport>& transport,
Alexander Afanasyev505646e2014-02-24 20:13:37 -0800358 const shared_ptr<boost::asio::io_service>& ioService);
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600359
360 bool
361 isSupportedNfdProtocol(const std::string& protocol);
362
363 bool
364 isSupportedNrdProtocol(const std::string& protocol);
365
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700366 class ProcessEventsTimeout
367 {
368 };
369
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800370 typedef std::list<shared_ptr<PendingInterest> > PendingInterestTable;
Alexander Afanasyev90164962014-03-06 08:29:59 +0000371 typedef std::list<shared_ptr<InterestFilterRecord> > InterestFilterTable;
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800372 typedef std::list<shared_ptr<RegisteredPrefix> > RegisteredPrefixTable;
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700373
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800374 void
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800375 asyncExpressInterest(const shared_ptr<const Interest>& interest,
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800376 const OnData& onData, const OnTimeout& onTimeout);
377
378 void
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800379 asyncRemovePendingInterest(const PendingInterestId* pendingInterestId);
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800380
381 void
Alexander Afanasyev90164962014-03-06 08:29:59 +0000382 afterPrefixRegistered(const shared_ptr<RegisteredPrefix>& registeredPrefix);
383
384 void
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800385 asyncUnsetInterestFilter(const RegisteredPrefixId* registeredPrefixId);
Alexander Afanasyev12dfbad2014-02-11 14:42:46 -0800386
387 void
Alexander Afanasyev90164962014-03-06 08:29:59 +0000388 finalizeUnregisterPrefix(RegisteredPrefixTable::iterator item);
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700389
390 void
Alexander Afanasyev6d48bc12014-02-18 00:10:51 -0800391 onReceiveElement(const Block& wire);
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800392
Alexander Afanasyev7dced462014-03-19 15:12:32 -0700393 void
394 asyncShutdown();
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700395
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800396 static void
397 fireProcessEventsTimeout(const boost::system::error_code& error);
398
Alexander Afanasyev42c81852014-02-25 21:37:26 -0800399 void
400 satisfyPendingInterests(Data& data);
401
402 void
403 processInterestFilters(Interest& interest);
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700404
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800405 void
406 checkPitExpire();
Yingdi Yuf9fa52f2014-02-06 12:27:32 -0800407
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700408 template<class SignatureGenerator>
409 const RegisteredPrefixId*
410 setInterestFilterImpl(const InterestFilter& interestFilter,
411 const OnInterest& onInterest,
412 const OnSetInterestFilterFailed& onSetInterestFilterFailed,
413 const SignatureGenerator& signatureGenerator);
414
Jeff Thompsonb982b6d2013-07-15 18:15:45 -0700415private:
Alexander Afanasyevf39c5372014-02-17 19:42:56 -0800416 shared_ptr<boost::asio::io_service> m_ioService;
Alexander Afanasyev691c3ce2014-04-23 14:28:04 -0700417 shared_ptr<boost::asio::io_service::work> m_ioServiceWork; // if thread needs to be preserved
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -0700418 shared_ptr<monotonic_deadline_timer> m_pitTimeoutCheckTimer;
Alexander Afanasyevf39c5372014-02-17 19:42:56 -0800419 bool m_pitTimeoutCheckTimerActive;
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -0700420 shared_ptr<monotonic_deadline_timer> m_processEventsTimeoutTimer;
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -0700421
Alexander Afanasyevf39c5372014-02-17 19:42:56 -0800422 shared_ptr<Transport> m_transport;
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800423
Alexander Afanasyevf39c5372014-02-17 19:42:56 -0800424 PendingInterestTable m_pendingInterestTable;
Alexander Afanasyev90164962014-03-06 08:29:59 +0000425 InterestFilterTable m_interestFilterTable;
Alexander Afanasyevf39c5372014-02-17 19:42:56 -0800426 RegisteredPrefixTable m_registeredPrefixTable;
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800427
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700428 nfd::Controller* m_nfdController;
429 bool m_isDirectNfdFibManagementRequested;
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600430
431 ConfigFile m_config;
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -0700432};
433
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600434inline bool
435Face::isSupportedNfdProtocol(const std::string& protocol)
436{
437 return protocol == "nfd-0.1";
438}
439
440inline bool
441Face::isSupportedNrdProtocol(const std::string& protocol)
442{
443 return protocol == "nrd-0.1";
444}
445
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700446inline void
447Face::setDirectFibManagement(bool isDirectFibManagementRequested/* = false*/)
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600448{
Alexander Afanasyevee8bb1e2014-05-02 17:39:54 -0700449 m_isDirectNfdFibManagementRequested = isDirectFibManagementRequested;
Steve DiBenedettoc07b3a22014-03-19 12:32:52 -0600450}
451
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800452} // namespace ndn
Jeff Thompsonaa4e6db2013-07-15 17:25:23 -0700453
Alexander Afanasyev0222fba2014-02-09 23:16:02 -0800454#endif // NDN_FACE_HPP