blob: 1d70fda33fbfd20ef8895ce1fe47445cf9c56f4c [file] [log] [blame]
Junxiao Shib47247d2017-01-24 15:09:16 +00001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Junxiao Shi2d491752017-07-14 21:32:05 +00002/*
Davide Pesaventoe422f9e2022-06-03 01:30:23 -04003 * Copyright (c) 2014-2022, Regents of the University of California,
Junxiao Shib47247d2017-01-24 15:09:16 +00004 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis.
10 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
24 */
25
26#include "protocol-factory.hpp"
Davide Pesaventod27841b2018-11-13 00:22:24 -050027
Junxiao Shib47247d2017-01-24 15:09:16 +000028#include <boost/range/adaptor/map.hpp>
29#include <boost/range/algorithm/copy.hpp>
30
Davide Pesaventoe422f9e2022-06-03 01:30:23 -040031namespace nfd::face {
Junxiao Shib47247d2017-01-24 15:09:16 +000032
33ProtocolFactory::Registry&
34ProtocolFactory::getRegistry()
35{
36 static Registry registry;
37 return registry;
38}
39
40unique_ptr<ProtocolFactory>
Junxiao Shi0ba6d642017-07-17 00:53:22 +000041ProtocolFactory::create(const std::string& id, const CtorParams& params)
Junxiao Shib47247d2017-01-24 15:09:16 +000042{
43 Registry& registry = getRegistry();
44 auto found = registry.find(id);
Junxiao Shi2d491752017-07-14 21:32:05 +000045 if (found == registry.end()) {
46 return nullptr;
47 }
48
Junxiao Shi0ba6d642017-07-17 00:53:22 +000049 return found->second(params);
Junxiao Shib47247d2017-01-24 15:09:16 +000050}
51
52std::set<std::string>
53ProtocolFactory::listRegistered()
54{
55 std::set<std::string> factoryIds;
56 boost::copy(getRegistry() | boost::adaptors::map_keys,
57 std::inserter(factoryIds, factoryIds.end()));
58 return factoryIds;
59}
60
Junxiao Shi0ba6d642017-07-17 00:53:22 +000061ProtocolFactory::ProtocolFactory(const CtorParams& params)
62 : addFace(params.addFace)
63 , netmon(params.netmon)
64{
65 BOOST_ASSERT(addFace != nullptr);
66 BOOST_ASSERT(netmon != nullptr);
67}
68
Davide Pesaventod27841b2018-11-13 00:22:24 -050069ProtocolFactory::~ProtocolFactory() = default;
70
71void
72ProtocolFactory::processConfig(OptionalConfigSection configSection,
73 FaceSystem::ConfigContext& context)
74{
75 doProcessConfig(configSection, context);
76}
77
78void
79ProtocolFactory::doProcessConfig(OptionalConfigSection,
80 FaceSystem::ConfigContext&)
81{
82}
83
84void
85ProtocolFactory::createFace(const CreateFaceRequest& req,
86 const FaceCreatedCallback& onCreated,
87 const FaceCreationFailedCallback& onFailure)
88{
89 BOOST_ASSERT(!FaceUri::canCanonize(req.remoteUri.getScheme()) ||
90 req.remoteUri.isCanonical());
91 BOOST_ASSERT(!req.localUri || !FaceUri::canCanonize(req.localUri->getScheme()) ||
92 req.localUri->isCanonical());
93 doCreateFace(req, onCreated, onFailure);
94}
95
96void
97ProtocolFactory::doCreateFace(const CreateFaceRequest&,
98 const FaceCreatedCallback&,
99 const FaceCreationFailedCallback& onFailure)
100{
101 onFailure(406, "Unsupported protocol");
102}
103
Junxiao Shieef49a92018-11-10 12:19:36 +0000104shared_ptr<Face>
105ProtocolFactory::createNetdevBoundFace(const FaceUri& remote,
106 const shared_ptr<const ndn::net::NetworkInterface>& netif)
107{
108 BOOST_ASSERT(remote.isCanonical());
Davide Pesaventod27841b2018-11-13 00:22:24 -0500109 return doCreateNetdevBoundFace(remote, netif);
Junxiao Shieef49a92018-11-10 12:19:36 +0000110}
111
112shared_ptr<Face>
Davide Pesaventod27841b2018-11-13 00:22:24 -0500113ProtocolFactory::doCreateNetdevBoundFace(const FaceUri&,
114 const shared_ptr<const ndn::net::NetworkInterface>&)
Junxiao Shieef49a92018-11-10 12:19:36 +0000115{
Davide Pesavento19779d82019-02-14 13:40:04 -0500116 NDN_THROW(Error("This protocol factory does not support netdev-bound faces"));
Davide Pesaventod27841b2018-11-13 00:22:24 -0500117}
118
119std::vector<shared_ptr<const Channel>>
120ProtocolFactory::getChannels() const
121{
122 return doGetChannels();
123}
124
125std::vector<shared_ptr<const Channel>>
126ProtocolFactory::doGetChannels() const
127{
128 return {};
Junxiao Shieef49a92018-11-10 12:19:36 +0000129}
130
Davide Pesaventoe422f9e2022-06-03 01:30:23 -0400131} // namespace nfd::face