blob: 13130e251573176364d06fbc6e54d152d63f61be [file] [log] [blame]
shockjianga5ae48c2014-07-27 23:21:41 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2014, Regents of the University of California.
4 *
5 * This file is part of NDNS (Named Data Networking Domain Name Service).
6 * See AUTHORS.md for complete list of NDNS authors and contributors.
7 *
8 * NDNS is free software: you can redistribute it and/or modify it under the terms
9 * of the GNU General Public License as published by the Free Software Foundation,
10 * either version 3 of the License, or (at your option) any later version.
11 *
12 * NDNS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
13 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along with
17 * NDNS, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 */
19#ifndef NDNS_NDN_APP_HPP
20#define NDNS_NDN_APP_HPP
21
22#include <ndn-cxx/face.hpp>
23#include <ndn-cxx/name.hpp>
24#include <ndn-cxx/security/key-chain.hpp>
25
26#include <boost/asio.hpp>
27#include <boost/bind.hpp>
28#include <boost/date_time/posix_time/posix_time.hpp>
29#include <boost/noncopyable.hpp>
30
shockjiang99ad3892014-08-03 14:56:13 -070031#include "ndns-label.hpp"
32
shockjianga5ae48c2014-07-27 23:21:41 -070033using namespace std;
34
35namespace ndn {
shockjiang99ad3892014-08-03 14:56:13 -070036namespace ndns {
shockjianga5ae48c2014-07-27 23:21:41 -070037
shockjiang99ad3892014-08-03 14:56:13 -070038class NDNApp
39{
shockjianga5ae48c2014-07-27 23:21:41 -070040public:
41 NDNApp(const char *programName, const char *prefix);
42 virtual ~NDNApp();
43
shockjiang99ad3892014-08-03 14:56:13 -070044 virtual void onData(const ndn::Interest& interest, Data& data)
shockjianga5ae48c2014-07-27 23:21:41 -070045 {
46 }
shockjiang99ad3892014-08-03 14:56:13 -070047 virtual void onTimeout(const ndn::Interest& interest)
shockjianga5ae48c2014-07-27 23:21:41 -070048 {
shockjiang99ad3892014-08-03 14:56:13 -070049 std::cout << "!- Interest Timeout" << interest.getName() << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070050 }
51
shockjiang99ad3892014-08-03 14:56:13 -070052 virtual void onRegisterFailed(const ndn::Name& prefix,
53 const std::string& reason)
shockjianga5ae48c2014-07-27 23:21:41 -070054 {
55 m_error = "ERROR: Failed to register prefix in local hub's daemon";
56 m_error += " due to: ";
57 m_error += reason;
58 m_hasError = true;
59 this->stop();
60 }
61
shockjiang99ad3892014-08-03 14:56:13 -070062 virtual void onInterest(const Name &name, const Interest& interest)
shockjianga5ae48c2014-07-27 23:21:41 -070063 {
64
65 }
66
shockjiang99ad3892014-08-03 14:56:13 -070067 virtual void signalHandler()
shockjianga5ae48c2014-07-27 23:21:41 -070068 {
69 this->stop();
70 exit(1);
71 }
72
shockjiang99ad3892014-08-03 14:56:13 -070073 virtual void stop()
shockjianga5ae48c2014-07-27 23:21:41 -070074 {
shockjiang99ad3892014-08-03 14:56:13 -070075 std::cout << m_programName << " stops" << std::endl;
shockjianga5ae48c2014-07-27 23:21:41 -070076 m_ioService.stop();
77 m_face.shutdown();
shockjiang99ad3892014-08-03 14:56:13 -070078 if (hasError()) {
79 cout << m_error << endl;
shockjianga5ae48c2014-07-27 23:21:41 -070080 }
81 }
82
shockjiang99ad3892014-08-03 14:56:13 -070083 bool hasError() const
84 {
shockjianga5ae48c2014-07-27 23:21:41 -070085 return m_hasError;
86 }
87
shockjiang99ad3892014-08-03 14:56:13 -070088 void setHasError(bool hasError)
89 {
shockjianga5ae48c2014-07-27 23:21:41 -070090 m_hasError = hasError;
91 }
92
shockjiang99ad3892014-08-03 14:56:13 -070093 const char* getPrefix() const
94 {
shockjianga5ae48c2014-07-27 23:21:41 -070095 return m_prefix;
96 }
97
shockjiang99ad3892014-08-03 14:56:13 -070098 void setPrefix(char* prefix)
99 {
shockjianga5ae48c2014-07-27 23:21:41 -0700100 m_prefix = prefix;
101 }
102
shockjiang99ad3892014-08-03 14:56:13 -0700103 const char* getProgramName() const
104 {
shockjianga5ae48c2014-07-27 23:21:41 -0700105 return m_programName;
106 }
107
shockjiang99ad3892014-08-03 14:56:13 -0700108 void setProgramName(char* programName)
109 {
shockjianga5ae48c2014-07-27 23:21:41 -0700110 m_programName = programName;
111 }
112
shockjiang99ad3892014-08-03 14:56:13 -0700113 const string& getErr() const
114 {
shockjianga5ae48c2014-07-27 23:21:41 -0700115 return m_error;
116 }
117
shockjiang99ad3892014-08-03 14:56:13 -0700118 void setErr(const string& err)
119 {
shockjianga5ae48c2014-07-27 23:21:41 -0700120 m_error = err;
121 }
122
shockjiang99ad3892014-08-03 14:56:13 -0700123 uint32_t getInterestTriedMax() const
124 {
shockjianga5ae48c2014-07-27 23:21:41 -0700125 return m_interestTriedMax;
126 }
127
shockjiang99ad3892014-08-03 14:56:13 -0700128 void setInterestTriedMax(uint32_t interestTriedMax)
129 {
shockjianga5ae48c2014-07-27 23:21:41 -0700130 m_interestTriedMax = interestTriedMax;
131 }
132
shockjiang99ad3892014-08-03 14:56:13 -0700133 time::milliseconds getContentFreshness() const
134 {
shockjianga5ae48c2014-07-27 23:21:41 -0700135 return m_contentFreshness;
136 }
137
shockjiang99ad3892014-08-03 14:56:13 -0700138 void setContentFreshness(time::milliseconds contentFreshness)
139 {
shockjianga5ae48c2014-07-27 23:21:41 -0700140 m_contentFreshness = contentFreshness;
141 }
142
shockjiang99ad3892014-08-03 14:56:13 -0700143 time::milliseconds getInterestLifetime() const
144 {
shockjianga5ae48c2014-07-27 23:21:41 -0700145 return m_interestLifetime;
146 }
147
shockjiang99ad3892014-08-03 14:56:13 -0700148 void setInterestLifetime(time::milliseconds interestLifetime)
149 {
shockjianga5ae48c2014-07-27 23:21:41 -0700150 m_interestLifetime = interestLifetime;
151 }
152
shockjiang99ad3892014-08-03 14:56:13 -0700153 const Name& getForwardingHint() const
154 {
155 return m_forwardingHint;
156 }
157
158 void setForwardingHint(const Name& forwardingHint)
159 {
160 m_forwardingHint = forwardingHint;
161 }
162
163 unsigned short getEnableForwardingHint() const
164 {
165 return m_enableForwardingHint;
166 }
167
168 void setEnableForwardingHint(unsigned short enableForwardingHint)
169 {
170 m_enableForwardingHint = enableForwardingHint;
171 }
172
173protected:
shockjianga5ae48c2014-07-27 23:21:41 -0700174 const char* m_programName;
shockjiang99ad3892014-08-03 14:56:13 -0700175 const char* m_prefix;bool m_hasError;
shockjianga5ae48c2014-07-27 23:21:41 -0700176 string m_error;
177 time::milliseconds m_contentFreshness;
178 time::milliseconds m_interestLifetime;
179
180 uint32_t m_interestTriedMax;
181 uint32_t m_interestTriedNum;
182
183 //Name m_name;
184 boost::asio::io_service m_ioService;
185 //Zone m_zone;
186 //ZoneMgr m_zoneMgr;
187
shockjianga5ae48c2014-07-27 23:21:41 -0700188 Face m_face;
189 KeyChain m_keyChain;
shockjiang99ad3892014-08-03 14:56:13 -0700190
191 /**
192 * forwarding hint
193 */
194 unsigned short m_enableForwardingHint;
195 Name m_forwardingHint;
shockjianga5ae48c2014-07-27 23:21:41 -0700196};
197
198} //namespace ndns
199} /* namespace ndn */
200
201#endif /* NDN_APP_HPP_ */