ndn-cxx: NDN C++ Library 0.9.0-33-g832ea91d
Loading...
Searching...
No Matches
notification-stream.hpp
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013-2024 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * 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.
20 */
21
22#ifndef NDN_CXX_UTIL_NOTIFICATION_STREAM_HPP
23#define NDN_CXX_UTIL_NOTIFICATION_STREAM_HPP
24
25#include "ndn-cxx/face.hpp"
26#include "ndn-cxx/name.hpp"
29
30namespace ndn::util {
31
36template<typename Notification>
37class NotificationStream : noncopyable
38{
39public:
40 BOOST_CONCEPT_ASSERT((WireEncodable<Notification>));
41
42 NotificationStream(Face& face, const Name& prefix, KeyChain& keyChain)
43 : m_face(face)
44 , m_prefix(prefix)
45 , m_keyChain(keyChain)
46 {
47 }
48
49 virtual
51
52 void
53 postNotification(const Notification& notification)
54 {
55 Name dataName = m_prefix;
56 dataName.appendSequenceNumber(m_sequenceNo);
57
58 auto data = make_shared<Data>(dataName);
59 data->setContent(notification.wireEncode());
60 data->setFreshnessPeriod(1_s);
61
62 m_keyChain.sign(*data);
63 m_face.put(*data);
64
65 ++m_sequenceNo;
66 }
67
68private:
69 Face& m_face;
70 const Name m_prefix;
71 KeyChain& m_keyChain;
72 uint64_t m_sequenceNo = 0;
73};
74
75} // namespace ndn::util
76
77#endif // NDN_CXX_UTIL_NOTIFICATION_STREAM_HPP
Provide a communication channel with local or remote NDN forwarder.
Definition face.hpp:91
void put(const Data &data)
Publish a Data packet.
Definition face.cpp:186
Represents an absolute name.
Definition name.hpp:45
Name & appendSequenceNumber(uint64_t seqNo)
Append a sequence number component.
Definition name.hpp:476
A concept check for TLV abstraction with a wireEncode() method.
Definition concepts.hpp:46
The main interface for signing key management.
Definition key-chain.hpp:87
void sign(Data &data, const SigningInfo &params=SigningInfo())
Sign a Data packet according to the supplied signing information.
A facility to publish notifications.
virtual ~NotificationStream()=default
NotificationStream(Face &face, const Name &prefix, KeyChain &keyChain)
void postNotification(const Notification &notification)