blob: 36e08f161d503e1ded4c68b315b2dad8bac9d50c [file] [log] [blame]
Alexander Afanasyevc169a812014-05-20 20:37:29 -04001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -07002/**
Junxiao Shi103d8ed2016-08-07 20:34:10 +00003 * Copyright (c) 2013-2016 Regents of the University of California.
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -07004 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -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 Afanasyev258ec2b2014-05-14 16:15:37 -070020 */
21
22#include "interest-filter.hpp"
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070023#include "util/regex/regex-pattern-list-matcher.hpp"
24
25namespace ndn {
26
Junxiao Shi103d8ed2016-08-07 20:34:10 +000027InterestFilter::InterestFilter(const Name& prefix)
28 : m_prefix(prefix)
29{
30}
31
32InterestFilter::InterestFilter(const char* prefixUri)
33 : m_prefix(prefixUri)
34{
35}
36
37InterestFilter::InterestFilter(const std::string& prefixUri)
38 : m_prefix(prefixUri)
39{
40}
41
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070042InterestFilter::InterestFilter(const Name& prefix, const std::string& regexFilter)
43 : m_prefix(prefix)
Junxiao Shi103d8ed2016-08-07 20:34:10 +000044 , m_regexFilter(make_shared<RegexPatternListMatcher>(regexFilter, nullptr))
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070045{
46}
47
Junxiao Shi103d8ed2016-08-07 20:34:10 +000048InterestFilter::operator const Name&() const
49{
50 if (hasRegexFilter()) {
51 BOOST_THROW_EXCEPTION(Error("Please update InterestCallback to accept const InterestFilter&"
52 " (non-trivial InterestFilter is being used)"));
53 }
54 return m_prefix;
55}
56
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070057bool
58InterestFilter::doesMatch(const Name& name) const
59{
Junxiao Shi103d8ed2016-08-07 20:34:10 +000060 return m_prefix.isPrefixOf(name) &&
61 (!hasRegexFilter() ||
62 m_regexFilter->match(name, m_prefix.size(), name.size() - m_prefix.size()));
Alexander Afanasyev258ec2b2014-05-14 16:15:37 -070063}
64
65std::ostream&
66operator<<(std::ostream& os, const InterestFilter& filter)
67{
68 os << filter.getPrefix();
69 if (filter.hasRegexFilter()) {
70 os << "?regex=" << filter.getRegexFilter();
71 }
72 return os;
73}
74
75} // namespace ndn