sync-logic-handler.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2014-2021, The University of Memphis,
4  * Regents of the University of California,
5  * Arizona Board of Regents.
6  *
7  * This file is part of NLSR (Named-data Link State Routing).
8  * See AUTHORS.md for complete list of NLSR authors and contributors.
9  *
10  * NLSR is free software: you can redistribute it and/or modify it under the terms
11  * of the GNU General Public License as published by the Free Software Foundation,
12  * either version 3 of the License, or (at your option) any later version.
13  *
14  * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
15  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16  * PURPOSE. See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef NLSR_SYNC_LOGIC_HANDLER_HPP
23 #define NLSR_SYNC_LOGIC_HANDLER_HPP
24 
25 #include "conf-parameter.hpp"
26 #include "test-access-control.hpp"
27 #include "signals.hpp"
28 #include "lsa/lsa.hpp"
30 
31 #include <ndn-cxx/face.hpp>
32 #include <ndn-cxx/util/signal.hpp>
33 
34 namespace nlsr {
35 
36 class ConfParameter;
37 
47 {
48 public:
49  class Error : public std::runtime_error
50  {
51  public:
52  using std::runtime_error::runtime_error;
53  };
54 
55  using IsLsaNew =
56  std::function<bool(const ndn::Name&, const Lsa::Type& lsaType, const uint64_t&)>;
57 
58  SyncLogicHandler(ndn::Face& face, const IsLsaNew& isLsaNew, const ConfParameter& conf);
59 
69  void
70  publishRoutingUpdate(const Lsa::Type& type, const uint64_t& seqNo);
71 
79  void
80  processUpdate(const ndn::Name& updateName, uint64_t highSeq);
81 
90  void
91  processUpdateFromSync(const ndn::Name& originRouter,
92  const ndn::Name& updateName, uint64_t seqNo);
93 
94 public:
95  std::unique_ptr<OnNewLsa> onNewLsa;
96 
97 private:
98  ndn::Face& m_syncFace;
99  IsLsaNew m_isLsaNew;
100  const ConfParameter& m_confParam;
101 
103  ndn::Name m_nameLsaUserPrefix;
104  ndn::Name m_adjLsaUserPrefix;
105  ndn::Name m_coorLsaUserPrefix;
106 
107  SyncProtocolAdapter m_syncLogic;
108 
109 private:
110  const std::string NLSR_COMPONENT = "nlsr";
111  const std::string LSA_COMPONENT = "LSA";
112 };
113 
114 } // namespace nlsr
115 
116 #endif // NLSR_SYNC_LOGIC_HANDLER_HPP
A class to house all the configuration parameters for NLSR.
#define PUBLIC_WITH_TESTS_ELSE_PRIVATE
std::unique_ptr< OnNewLsa > onNewLsa
std::function< bool(const ndn::Name &, const Lsa::Type &lsaType, const uint64_t &)> IsLsaNew
NLSR-to-ChronoSync interaction point.
Copyright (c) 2014-2020, The University of Memphis, Regents of the University of California, Arizona Board of Regents.
SyncLogicHandler(ndn::Face &face, const IsLsaNew &isLsaNew, const ConfParameter &conf)
void publishRoutingUpdate(const Lsa::Type &type, const uint64_t &seqNo)
Instruct ChronoSync to publish an update.