Kea 2.5.8
dhcp6/parser_context.h
Go to the documentation of this file.
1// Copyright (C) 2015-2023 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef PARSER_CONTEXT_H
8#define PARSER_CONTEXT_H
9#include <string>
10#include <map>
11#include <vector>
12#include <dhcp6/dhcp6_parser.h>
15
16// Tell Flex the lexer's prototype ...
17#define YY_DECL isc::dhcp::Dhcp6Parser::symbol_type parser6_lex (Parser6Context& driver)
18
19// ... and declare it for the parser's sake.
21
22namespace isc {
23namespace dhcp {
24
29public:
30 Dhcp6ParseError(const char* file, size_t line, const char* what) :
31 isc::Exception(file, line, what) { };
32};
33
36{
37public:
38
49 typedef enum {
52
56
62
65
68
71
74
77
80
83
86
89
92
95 } ParserType;
96
99
101 virtual ~Parser6Context();
102
104 std::vector<isc::data::ElementPtr> stack_;
105
110 void scanStringBegin(const std::string& str, ParserType type);
111
117 void scanFileBegin(FILE* f, const std::string& filename, ParserType type);
118
120 void scanEnd();
121
125 void includeFile(const std::string& filename);
126
137 isc::data::ElementPtr parseString(const std::string& str,
138 ParserType parser_type);
139
150 isc::data::ElementPtr parseFile(const std::string& filename,
151 ParserType parser_type);
152
162 void error(const isc::dhcp::location& loc,
163 const std::string& what,
164 size_t pos = 0);
165
173 void error(const std::string& what);
174
182 static void fatal(const std::string& what);
183
191 isc::data::Element::Position loc2pos(isc::dhcp::location& loc);
192
202 void require(const std::string& name,
205
214 void unique(const std::string& name,
216
223 void warning(const isc::dhcp::location& loc, const std::string& what);
224
230 void warnAboutExtraCommas(const isc::dhcp::location& loc);
231
233 typedef enum {
236
238 CONFIG,
239
242
245
248
251
254
257
260
263
266
269
272
275
278
281
286
289
292
295
298
301
304
307
310
313
316
319
322
325
328
331
334
337
340
343
346
350
352 std::string file_;
353
355 std::vector<std::string> files_;
356
361 isc::dhcp::location loc_;
362
364 std::vector<isc::dhcp::location> locs_;
365
367 std::vector<struct yy_buffer_state*> states_;
368
370 FILE* sfile_;
371
377 std::vector<FILE*> sfiles_;
378
381
394 void enter(const ParserContext& ctx);
395
399 void leave();
400
404 const std::string contextName();
405
406 private:
408 bool trace_scanning_;
409
411 bool trace_parsing_;
412
414 std::vector<ParserContext> cstack_;
415
419 isc::data::ElementPtr parseCommon();
420};
421
422}; // end of isc::eval namespace
423}; // end of isc namespace
424
425#endif
This is a base class for exceptions thrown from the DNS library module.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
Evaluation error exception raised when trying to parse.
Dhcp6ParseError(const char *file, size_t line, const char *what)
Evaluation context, an interface to the expression evaluation.
std::string file_
File name.
std::vector< isc::dhcp::location > locs_
Location stack.
isc::dhcp::location loc_
Location of the current token.
void require(const std::string &name, isc::data::Element::Position open_loc, isc::data::Element::Position close_loc)
Check if a required parameter is present.
isc::data::ElementPtr parseFile(const std::string &filename, ParserType parser_type)
Run the parser on the file specified.
isc::data::Element::Position loc2pos(isc::dhcp::location &loc)
Converts bison's position to one understandable by isc::data::Element.
void includeFile(const std::string &filename)
Divert input to an include file.
virtual ~Parser6Context()
destructor
FILE * sfile_
sFile (aka FILE)
void warning(const isc::dhcp::location &loc, const std::string &what)
Warning handler.
void leave()
Leave a syntactic context.
void unique(const std::string &name, isc::data::Element::Position loc)
Check if a parameter is already present.
void enter(const ParserContext &ctx)
Enter a new syntactic context.
std::vector< isc::data::ElementPtr > stack_
JSON elements being parsed.
Parser6Context()
Default constructor.
void scanStringBegin(const std::string &str, ParserType type)
Method called before scanning starts on a string.
std::vector< std::string > files_
File name stack.
ParserContext
Defines syntactic contexts for lexical tie-ins.
@ LOGGERS
Used while parsing Dhcp6/loggers structures.
@ RESERVATION_MODE
Used while parsing Dhcp6/reservation-mode.
@ CLIENT_CLASSES
Used while parsing Dhcp6/client-classes structures.
@ DATABASE_ON_FAIL
Used while parsing Dhcp6/*-database/on-fail.
@ OPTION_DEF
Used while parsing Dhcp6/option-def structures.
@ POOLS
Used while parsing Dhcp6/subnet6/pools structures.
@ EXPIRED_LEASES_PROCESSING
Used while parsing Dhcp6/expired-leases-processing.
@ OPTION_DATA
Used while parsing Dhcp6/option-data, Dhcp6/subnet6/option-data or anywhere option-data is present (c...
@ CONTROL_SOCKET
Used while parsing Dhcp6/control-socket structures.
@ DHCP_QUEUE_CONTROL
Used while parsing Dhcp6/dhcp-queue-control structures.
@ SERVER_ID
Used while parsing Dhcp6/server-id structures.
@ HOSTS_DATABASE
Used while parsing Dhcp6/hosts-database[s] structures.
@ SUBNET6
Used while parsing Dhcp6/Subnet6 structures.
@ RESERVATIONS
Used while parsing Dhcp6/reservations structures.
@ CONFIG_DATABASE
Used while parsing config-control/config-databases.
@ DATABASE_TYPE
Used while parsing Dhcp6/*-database/type.
@ DHCP_DDNS
Used while parsing Dhcp6/dhcp-ddns.
@ COMPATIBILITY
Used while parsing compatibility parameters.
@ INTERFACES_CONFIG
Used while parsing Dhcp6/interfaces structures.
@ DUID_TYPE
Used while parsing Dhcp6/server-id/type structures.
@ HOOKS_LIBRARIES
Used while parsing Dhcp6/hooks-libraries.
@ CONFIG
Used while parsing content of Dhcp6.
@ DDNS_CONFLICT_RESOLUTION_MODE
Used while parsing Dhcp6/ddns-conflict-resolution-mode.
@ LEASE_DATABASE
Used while parsing Dhcp6/lease-database structures.
@ NCR_PROTOCOL
Used while parsing Dhcp6/dhcp-ddns/ncr-protocol.
@ RELAY
Used while parsing Dhcp6/subnet6/relay structures.
@ OUTPUT_OPTIONS
Used while parsing Dhcp6/loggers/output-options structures.
@ HOST_RESERVATION_IDENTIFIERS
Used while parsing Dhcp6/host-reservation-identifiers.
@ NCR_FORMAT
Used while parsing Dhcp6/dhcp-ddns/ncr-format.
@ REPLACE_CLIENT_NAME
Used while parsing Dhcp6/dhcp-ddns/replace-client-name.
@ DHCP_MULTI_THREADING
Used while parsing Dhcp6/multi-threading structures.
@ NO_KEYWORD
This one is used in pure JSON mode.
@ SHARED_NETWORK
Used while parsing shared-networks structures.
@ PD_POOLS
Used while parsing Dhcp6/subnet6/pd-pools structures.
@ MAC_SOURCES
Used while parsing Dhcp6/mac-sources structures.
@ CONFIG_CONTROL
Used while parsing Dhcp6/config-control.
void warnAboutExtraCommas(const isc::dhcp::location &loc)
Warning for extra commas.
void scanEnd()
Method called after the last tokens are scanned.
isc::data::ElementPtr parseString(const std::string &str, ParserType parser_type)
Run the parser on the string specified.
void scanFileBegin(FILE *f, const std::string &filename, ParserType type)
Method called before scanning starts on a file.
ParserType
Defines currently supported scopes.
@ PARSER_PD_POOL
This will parse the input as pd-pool content.
@ PARSER_DHCP6
This parser will parse the content as Dhcp6 config wrapped in a map (that's the regular config file)
@ PARSER_OPTION_DATA
This will parse the input as option data.
@ PARSER_HOOKS_LIBRARY
This will parse the input as hooks-library.
@ PARSER_POOL6
This will parse the input as pool6 content.
@ PARSER_JSON
This parser will parse the content as generic JSON.
@ PARSER_OPTION_DEF
This will parse the input as option definition.
@ PARSER_INTERFACES
This will parse the input as interfaces content.
@ PARSER_DHCP_DDNS
This will parse the input as dhcp-ddns. (D2 client config)
@ PARSER_CONFIG_CONTROL
This will parse the input as config-control.
@ PARSER_HOST_RESERVATION
This will parse the input as host-reservation.
@ PARSER_OPTION_DEFS
This will parse the input option definitions (for tests).
@ PARSER_SUBNET6
This will parse the input as Subnet6 content.
@ SUBPARSER_DHCP6
This parser will parse the content of Dhcp6 (without outer { } and without "Dhcp6").
std::vector< FILE * > sfiles_
sFile (aka FILE) stack
std::vector< struct yy_buffer_state * > states_
Lexer state stack.
const std::string contextName()
Get the syntactic context name.
ParserContext ctx_
Current syntactic context.
#define YY_DECL
Forward declaration of the ParserContext class.
Define the isc::dhcp::parser class.
boost::shared_ptr< Element > ElementPtr
Definition: data.h:28
@ fatal
Definition: db_log.h:117
@ error
Definition: db_log.h:118
Defines the logger used by the top-level component of kea-lfc.
Represents the position of the data element within a configuration string.
Definition: data.h:94