/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil -*- */
/**
 * Copyright (C) 2013 Regents of the University of California.
 * @author: Yingdi Yu <yingdi@cs.ucla.edu>
 * See COPYING for copyright and distribution information.
 */

#ifndef NDN_SECURITY_SEC_RULE_HPP
#define NDN_SECURITY_SEC_RULE_HPP

#include "../common.hpp"
#include "../data.hpp"

namespace ndn {

class SecRule
{
public:
  struct Error : public std::runtime_error { Error(const std::string &what) : std::runtime_error(what) {} };
  
  SecRule(bool isPositive)
  : m_isPositive(isPositive)
  {}
  
  virtual 
  ~SecRule() 
  {}
  
  virtual bool 
  matchDataName(const Data& data) = 0;
  
  virtual bool 
  matchSignerName(const Data& data) = 0;
  
  virtual bool
  satisfy(const Data& data) = 0;
  
  virtual bool
  satisfy(const Name& dataName, const Name& signerName) = 0;
  
  inline bool
  isPositive();
  
protected:
  bool m_isPositive;
};

bool
SecRule::isPositive()
{
  return m_isPositive;
}
    
} // namespace ndn

#endif //NDN_SECURITY_SEC_RULE_HPP
