34 file_.open(fname_.c_str(), std::ifstream::in);
35 int sav_error = errno;
36 if (!file_.is_open()) {
38 <<
" reason: " << strerror(sav_error));
52 file_.getline(buf,
sizeof(buf));
55 if (file_.gcount() > 0) {
76 "UserFile entry is malformed JSON: " << ex.
what());
82 std::string id_type_str;
88 for (
auto const& element_pair : elements->mapValue()) {
90 std::string label = element_pair.first;
95 <<
"has non-string value for : " << label);
98 std::string value = element_pair.second->stringValue();
100 if (label ==
"type") {
102 }
else if (label ==
"id") {
107 properties[label]=value;
115 }
catch (
const std::exception& ex) {
117 << user_string <<
" " << ex.
what());
124 user.reset(
new User(id_type, id_str));
125 }
catch (
const std::exception& ex) {
127 << user_string <<
" " << ex.
what());
131 user->setProperties(properties);
137 return (file_.is_open());
143 if (file_.is_open()) {
146 }
catch (
const std::exception& ex) {
149 std::cout <<
"UserFile unexpected error closing the file: "
150 << fname_ <<
" : " << ex.what() << std::endl;
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
static ElementPtr fromJSON(const std::string &in, bool preproc=false)
These functions will parse the given string (JSON) representation of a compound element.
A standard Data module exception that is thrown if a parse error is encountered when constructing an ...
Thrown a UserFile encounters an error.
static const size_t USER_ENTRY_MAX_LEN
Maximum length of a single user entry.
virtual UserPtr readNextUser()
Fetches the next user from the file.
virtual void close()
Closes the underlying file.
UserFile(const std::string &fname)
Constructor.
UserPtr makeUser(const std::string &user_string)
Creates a new User instance from JSON text.
virtual bool isOpen() const
Returns true if the file is open.
virtual ~UserFile()
Destructor. / The destructor does call the close method.
virtual void open()
Opens the input file for reading.
static UserIdType lookupType(const std::string &type_str)
Returns the id type for a given text label.
UserIdType
Defines the supported types of user ids.
Represents a unique DHCP user This class is used to represent a specific DHCP user who is identified ...
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
Defines the logger used by the user check hooks library.
std::map< std::string, std::string > PropertyMap
Defines a map of string values keyed by string labels.
boost::shared_ptr< User > UserPtr
Defines a smart pointer to a User.
This file defines classes: UserId and User.
Defines the class, UserFile, which implements the UserDataSource interface for text files.