blob: e0d0beba799dcc4dd5b7cbf06019da461ac8ac68 [file] [log] [blame]
Eric Newberry94996d62015-05-07 13:48:46 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
3 * Copyright (c) 2015, Arizona Board of Regents.
4 *
5 * This file is part of ndn-tools (Named Data Networking Essential Tools).
6 * See AUTHORS.md for complete list of ndn-tools authors and contributors.
7 *
8 * ndn-tools 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 * ndn-tools 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 * ndn-tools, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Eric Newberry <enewberry@email.arizona.edu>
20 * @author Jerald Paul Abraham <jeraldabraham@email.arizona.edu>
21 */
22
23#include "ping-server.hpp"
24
25namespace ndn {
26namespace ping {
27namespace server {
28
29PingServer::PingServer(Face& face, const Options& options)
30 : m_options(options)
31 , m_name(options.prefix)
32 , m_nPings(0)
33 , m_face(face)
34{
Eric Newberry62f7f712015-05-17 12:15:52 -070035 shared_ptr<Buffer> b = make_shared<Buffer>();
36 b->assign(m_options.payloadSize, 'a');
37 m_payload = Block(tlv::Content, b);
Eric Newberry94996d62015-05-07 13:48:46 -070038}
39
40void
41PingServer::run()
42{
43 m_name.append("ping");
44 m_face.setInterestFilter(m_name,
45 bind(&PingServer::onInterest,
46 this, _2),
47 bind(&PingServer::onRegisterFailed,
48 this, _2));
49
50 m_face.processEvents();
51}
52
53int
54PingServer::getNPings() const
55{
56 return m_nPings;
57}
58
59void
60PingServer::onInterest(const Interest& interest)
61{
62 Name interestName = interest.getName();
63
64 afterReceive(interestName);
65
Eric Newberry94996d62015-05-07 13:48:46 -070066 shared_ptr<Data> data = make_shared<Data>(interestName);
67 data->setFreshnessPeriod(m_options.freshnessPeriod);
Eric Newberry62f7f712015-05-17 12:15:52 -070068 data->setContent(m_payload);
Eric Newberry94996d62015-05-07 13:48:46 -070069 m_keyChain.sign(*data);
70 m_face.put(*data);
71
72 ++m_nPings;
73 if (m_options.shouldLimitSatisfied && m_options.nMaxPings > 0 && m_options.nMaxPings == m_nPings) {
74 m_face.shutdown();
75 m_face.getIoService().stop();
76 }
77}
78
79void
80PingServer::onRegisterFailed(const std::string& reason)
81{
82 throw "Failed to register prefix in local hub's daemon, REASON: " + reason;
83}
84
85} // namespace server
86} // namespace ping
87} // namespace ndn