blob: 8f97b7b4a36649a576265be54f5ed1519aa6ac80 [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -08002/**
Alexander Afanasyevc169a812014-05-20 20:37:29 -04003 * Copyright (c) 2013-2014 Regents of the University of California.
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyevdfa52c42014-04-24 21:10:11 -07006 *
Alexander Afanasyevc169a812014-05-20 20:37:29 -04007 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080020 */
21
22#ifndef NDN_HELPERS_COMMAND_INTEREST_GENERATOR_HPP
23#define NDN_HELPERS_COMMAND_INTEREST_GENERATOR_HPP
24
25#include "../interest.hpp"
26#include "../security/key-chain.hpp"
27#include "../util/time.hpp"
28#include "../util/random.hpp"
29
30namespace ndn {
31
32/**
33 * @brief Helper class to generate CommandInterests
34 *
35 * @see http://redmine.named-data.net/projects/nfd/wiki/Command_Interests
36 */
37class CommandInterestGenerator
38{
39public:
40 static const Name DEFAULT_CERTIFICATE_NAME;
41
42 CommandInterestGenerator()
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070043 : m_lastTimestamp(time::toUnixTimestamp(time::system_clock::now()))
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080044 {
45 }
46
47 virtual
48 ~CommandInterestGenerator()
49 {
50 }
51
52 void
53 generate(Interest& interest, const Name& certificateName = Name());
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070054
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080055 void
56 generateWithIdentity(Interest& interest, const Name& identity);
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070057
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080058private:
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070059 time::milliseconds m_lastTimestamp;
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080060 KeyChain m_keyChain;
61};
62
63
64inline void
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070065CommandInterestGenerator::generate(Interest& interest,
Yingdi Yue66bf2a2014-04-28 17:07:36 -070066 const Name& certificateName /*= Name()*/)
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080067{
Alexander Afanasyevfdbfc6d2014-04-14 15:12:11 -070068 if (certificateName.empty())
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080069 m_keyChain.sign(interest);
70 else
71 m_keyChain.sign(interest, certificateName);
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080072}
Alexander Afanasyevaa0e7da2014-03-17 14:37:33 -070073
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080074inline void
75CommandInterestGenerator::generateWithIdentity(Interest& interest, const Name& identity)
76{
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080077 m_keyChain.signByIdentity(interest, identity);
Alexander Afanasyev9cbf70a2014-02-17 18:07:51 -080078}
79
80
81} // namespace ndn
82
83#endif // NDN_HELPERS_COMMAND_INTEREST_GENERATOR_HPP