xref: /freebsd-src/contrib/unbound/sldns/parse.h (revision 5685098846d7f11ad642d9804d94dc7429a7b212)
109a3aaf3SDag-Erling Smørgrav /*
209a3aaf3SDag-Erling Smørgrav  * parse.h
309a3aaf3SDag-Erling Smørgrav  *
409a3aaf3SDag-Erling Smørgrav  * a Net::DNS like library for C
509a3aaf3SDag-Erling Smørgrav  * LibDNS Team @ NLnet Labs
609a3aaf3SDag-Erling Smørgrav  * (c) NLnet Labs, 2005-2006
709a3aaf3SDag-Erling Smørgrav  * See the file LICENSE for the license
809a3aaf3SDag-Erling Smørgrav  */
909a3aaf3SDag-Erling Smørgrav 
1009a3aaf3SDag-Erling Smørgrav #ifndef LDNS_PARSE_H
1109a3aaf3SDag-Erling Smørgrav #define LDNS_PARSE_H
1209a3aaf3SDag-Erling Smørgrav 
1309a3aaf3SDag-Erling Smørgrav struct sldns_buffer;
1409a3aaf3SDag-Erling Smørgrav 
1509a3aaf3SDag-Erling Smørgrav #ifdef __cplusplus
1609a3aaf3SDag-Erling Smørgrav extern "C" {
1709a3aaf3SDag-Erling Smørgrav #endif
1809a3aaf3SDag-Erling Smørgrav 
1909a3aaf3SDag-Erling Smørgrav #define LDNS_PARSE_SKIP_SPACE		"\f\n\r\v"
2009a3aaf3SDag-Erling Smørgrav #define LDNS_PARSE_NORMAL		" \f\n\r\t\v"
2109a3aaf3SDag-Erling Smørgrav #define LDNS_PARSE_NO_NL		" \t"
2209a3aaf3SDag-Erling Smørgrav #define LDNS_MAX_LINELEN		10230
2309a3aaf3SDag-Erling Smørgrav #define LDNS_MAX_KEYWORDLEN		32
2409a3aaf3SDag-Erling Smørgrav 
2509a3aaf3SDag-Erling Smørgrav 
2609a3aaf3SDag-Erling Smørgrav /**
2709a3aaf3SDag-Erling Smørgrav  * \file
2809a3aaf3SDag-Erling Smørgrav  *
2909a3aaf3SDag-Erling Smørgrav  * Contains some low-level parsing functions, mostly used in the _frm_str
3009a3aaf3SDag-Erling Smørgrav  * family of functions.
3109a3aaf3SDag-Erling Smørgrav  */
3209a3aaf3SDag-Erling Smørgrav 
3309a3aaf3SDag-Erling Smørgrav /**
3409a3aaf3SDag-Erling Smørgrav  * different type of directives in zone files
3509a3aaf3SDag-Erling Smørgrav  * We now deal with $TTL, $ORIGIN and $INCLUDE.
3609a3aaf3SDag-Erling Smørgrav  * The latter is not implemented in ldns (yet)
3709a3aaf3SDag-Erling Smørgrav  */
3809a3aaf3SDag-Erling Smørgrav enum sldns_enum_directive
3909a3aaf3SDag-Erling Smørgrav {
4009a3aaf3SDag-Erling Smørgrav 	LDNS_DIR_TTL,
4109a3aaf3SDag-Erling Smørgrav 	LDNS_DIR_ORIGIN,
4209a3aaf3SDag-Erling Smørgrav 	LDNS_DIR_INCLUDE
4309a3aaf3SDag-Erling Smørgrav };
4409a3aaf3SDag-Erling Smørgrav typedef enum sldns_enum_directive sldns_directive;
4509a3aaf3SDag-Erling Smørgrav 
4609a3aaf3SDag-Erling Smørgrav /**
4709a3aaf3SDag-Erling Smørgrav  * returns a token/char from the stream F.
4809a3aaf3SDag-Erling Smørgrav  * This function deals with ( and ) in the stream,
4909a3aaf3SDag-Erling Smørgrav  * and ignores them when encountered
5009a3aaf3SDag-Erling Smørgrav  * \param[in] *f the file to read from
5109a3aaf3SDag-Erling Smørgrav  * \param[out] *token the read token is put here
5209a3aaf3SDag-Erling Smørgrav  * \param[in] *delim chars at which the parsing should stop
5309a3aaf3SDag-Erling Smørgrav  * \param[in] *limit how much to read. If 0 the builtin maximum is used
5409a3aaf3SDag-Erling Smørgrav  * \return 0 on error of EOF of the stream F.  Otherwise return the length of what is read
5509a3aaf3SDag-Erling Smørgrav  */
5609a3aaf3SDag-Erling Smørgrav ssize_t sldns_fget_token(FILE *f, char *token, const char *delim, size_t limit);
5709a3aaf3SDag-Erling Smørgrav 
5809a3aaf3SDag-Erling Smørgrav /**
5909a3aaf3SDag-Erling Smørgrav  * returns a token/char from the stream F.
6009a3aaf3SDag-Erling Smørgrav  * This function deals with ( and ) in the stream,
6109a3aaf3SDag-Erling Smørgrav  * and ignores when it finds them.
6209a3aaf3SDag-Erling Smørgrav  * \param[in] *f the file to read from
6309a3aaf3SDag-Erling Smørgrav  * \param[out] *token the token is put here
6409a3aaf3SDag-Erling Smørgrav  * \param[in] *delim chars at which the parsing should stop
6509a3aaf3SDag-Erling Smørgrav  * \param[in] *limit how much to read. If 0 use builtin maximum
6609a3aaf3SDag-Erling Smørgrav  * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
6709a3aaf3SDag-Erling Smørgrav  * \return 0 on error of EOF of F otherwise return the length of what is read
6809a3aaf3SDag-Erling Smørgrav  */
6909a3aaf3SDag-Erling Smørgrav ssize_t sldns_fget_token_l(FILE *f, char *token, const char *delim, size_t limit, int *line_nr);
7009a3aaf3SDag-Erling Smørgrav 
7109a3aaf3SDag-Erling Smørgrav /**
7209a3aaf3SDag-Erling Smørgrav  * returns a token/char from the buffer b.
7309a3aaf3SDag-Erling Smørgrav  * This function deals with ( and ) in the buffer,
7409a3aaf3SDag-Erling Smørgrav  * and ignores when it finds them.
7509a3aaf3SDag-Erling Smørgrav  * \param[in] *b the buffer to read from
7609a3aaf3SDag-Erling Smørgrav  * \param[out] *token the token is put here
7709a3aaf3SDag-Erling Smørgrav  * \param[in] *delim chars at which the parsing should stop
7809a3aaf3SDag-Erling Smørgrav  * \param[in] *limit how much to read. If 0 the builtin maximum is used
7909a3aaf3SDag-Erling Smørgrav  * \param[in] *par if you pass nonNULL, set to 0 on first call, the parenthesis
8009a3aaf3SDag-Erling Smørgrav  * state is stored in it, for use on next call.  User must check it is back
8109a3aaf3SDag-Erling Smørgrav  * to zero after last bget in string (for parse error).  If you pass NULL,
8209a3aaf3SDag-Erling Smørgrav  * the entire parenthesized string is read in.
8309a3aaf3SDag-Erling Smørgrav  * \param[in] skipw string with whitespace to skip before the start of the
8409a3aaf3SDag-Erling Smørgrav  * token, like " ", or " \t", or NULL for none.
8509a3aaf3SDag-Erling Smørgrav  * \returns 0 on error of EOF of b. Otherwise return the length of what is read
8609a3aaf3SDag-Erling Smørgrav  */
8709a3aaf3SDag-Erling Smørgrav ssize_t sldns_bget_token_par(struct sldns_buffer *b, char *token, const char *delim, size_t limit, int* par, const char* skipw);
8809a3aaf3SDag-Erling Smørgrav 
8909a3aaf3SDag-Erling Smørgrav /**
9009a3aaf3SDag-Erling Smørgrav  * returns a token/char from the buffer b.
9109a3aaf3SDag-Erling Smørgrav  * This function deals with ( and ) in the buffer,
9209a3aaf3SDag-Erling Smørgrav  * and ignores when it finds them.
9309a3aaf3SDag-Erling Smørgrav  * \param[in] *b the buffer to read from
9409a3aaf3SDag-Erling Smørgrav  * \param[out] *token the token is put here
9509a3aaf3SDag-Erling Smørgrav  * \param[in] *delim chars at which the parsing should stop
9609a3aaf3SDag-Erling Smørgrav  * \param[in] *limit how much to read. If 0 the builtin maximum is used
9709a3aaf3SDag-Erling Smørgrav  * \returns 0 on error of EOF of b. Otherwise return the length of what is read
9809a3aaf3SDag-Erling Smørgrav  */
9909a3aaf3SDag-Erling Smørgrav ssize_t sldns_bget_token(struct sldns_buffer *b, char *token, const char *delim, size_t limit);
10009a3aaf3SDag-Erling Smørgrav 
10109a3aaf3SDag-Erling Smørgrav /*
10209a3aaf3SDag-Erling Smørgrav  * searches for keyword and delim in a file. Gives everything back
10309a3aaf3SDag-Erling Smørgrav  * after the keyword + k_del until we hit d_del
10409a3aaf3SDag-Erling Smørgrav  * \param[in] f file pointer to read from
10509a3aaf3SDag-Erling Smørgrav  * \param[in] keyword keyword to look for
1068a384985SDag-Erling Smørgrav  * \param[in] k_del keyword delimiter
10709a3aaf3SDag-Erling Smørgrav  * \param[out] data the data found
1088a384985SDag-Erling Smørgrav  * \param[in] d_del the data delimiter
109*56850988SCy Schubert  * \param[in] data_limit maximum size the data buffer
11009a3aaf3SDag-Erling Smørgrav  * \return the number of character read
11109a3aaf3SDag-Erling Smørgrav  */
11209a3aaf3SDag-Erling Smørgrav ssize_t sldns_fget_keyword_data(FILE *f, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
11309a3aaf3SDag-Erling Smørgrav 
11409a3aaf3SDag-Erling Smørgrav /*
11509a3aaf3SDag-Erling Smørgrav  * searches for keyword and delim. Gives everything back
11609a3aaf3SDag-Erling Smørgrav  * after the keyword + k_del until we hit d_del
11709a3aaf3SDag-Erling Smørgrav  * \param[in] f file pointer to read from
11809a3aaf3SDag-Erling Smørgrav  * \param[in] keyword keyword to look for
1198a384985SDag-Erling Smørgrav  * \param[in] k_del keyword delimiter
12009a3aaf3SDag-Erling Smørgrav  * \param[out] data the data found
1218a384985SDag-Erling Smørgrav  * \param[in] d_del the data delimiter
122*56850988SCy Schubert  * \param[in] data_limit maximum size the data buffer
12309a3aaf3SDag-Erling Smørgrav  * \param[in] line_nr pointer to an integer containing the current line number (for
12409a3aaf3SDag-Erling Smørgrav debugging purposes)
12509a3aaf3SDag-Erling Smørgrav  * \return the number of character read
12609a3aaf3SDag-Erling Smørgrav  */
12709a3aaf3SDag-Erling Smørgrav ssize_t sldns_fget_keyword_data_l(FILE *f, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit, int *line_nr);
12809a3aaf3SDag-Erling Smørgrav 
12909a3aaf3SDag-Erling Smørgrav /*
13009a3aaf3SDag-Erling Smørgrav  * searches for keyword and delim in a buffer. Gives everything back
13109a3aaf3SDag-Erling Smørgrav  * after the keyword + k_del until we hit d_del
13209a3aaf3SDag-Erling Smørgrav  * \param[in] b buffer pointer to read from
13309a3aaf3SDag-Erling Smørgrav  * \param[in] keyword keyword to look for
1348a384985SDag-Erling Smørgrav  * \param[in] k_del keyword delimiter
13509a3aaf3SDag-Erling Smørgrav  * \param[out] data the data found
1368a384985SDag-Erling Smørgrav  * \param[in] d_del the data delimiter
137*56850988SCy Schubert  * \param[in] data_limit maximum size the data buffer
13809a3aaf3SDag-Erling Smørgrav  * \return the number of character read
13909a3aaf3SDag-Erling Smørgrav  */
14009a3aaf3SDag-Erling Smørgrav ssize_t sldns_bget_keyword_data(struct sldns_buffer *b, const char *keyword, const char *k_del, char *data, const char *d_del, size_t data_limit);
14109a3aaf3SDag-Erling Smørgrav 
14209a3aaf3SDag-Erling Smørgrav /**
14309a3aaf3SDag-Erling Smørgrav  * returns the next character from a buffer. Advances the position pointer with 1.
14409a3aaf3SDag-Erling Smørgrav  * When end of buffer is reached returns EOF. This is the buffer's equivalent
14509a3aaf3SDag-Erling Smørgrav  * for getc().
14609a3aaf3SDag-Erling Smørgrav  * \param[in] *buffer buffer to read from
14709a3aaf3SDag-Erling Smørgrav  * \return EOF on failure otherwise return the character
14809a3aaf3SDag-Erling Smørgrav  */
14909a3aaf3SDag-Erling Smørgrav int sldns_bgetc(struct sldns_buffer *buffer);
15009a3aaf3SDag-Erling Smørgrav 
15109a3aaf3SDag-Erling Smørgrav /**
15209a3aaf3SDag-Erling Smørgrav  * skips all of the characters in the given string in the buffer, moving
15309a3aaf3SDag-Erling Smørgrav  * the position to the first character that is not in *s.
15409a3aaf3SDag-Erling Smørgrav  * \param[in] *buffer buffer to use
15509a3aaf3SDag-Erling Smørgrav  * \param[in] *s characters to skip
15609a3aaf3SDag-Erling Smørgrav  */
15709a3aaf3SDag-Erling Smørgrav void sldns_bskipcs(struct sldns_buffer *buffer, const char *s);
15809a3aaf3SDag-Erling Smørgrav 
15909a3aaf3SDag-Erling Smørgrav /**
16009a3aaf3SDag-Erling Smørgrav  * skips all of the characters in the given string in the fp, moving
16109a3aaf3SDag-Erling Smørgrav  * the position to the first character that is not in *s.
16209a3aaf3SDag-Erling Smørgrav  * \param[in] *fp file to use
16309a3aaf3SDag-Erling Smørgrav  * \param[in] *s characters to skip
16409a3aaf3SDag-Erling Smørgrav  */
16509a3aaf3SDag-Erling Smørgrav void sldns_fskipcs(FILE *fp, const char *s);
16609a3aaf3SDag-Erling Smørgrav 
16709a3aaf3SDag-Erling Smørgrav 
16809a3aaf3SDag-Erling Smørgrav /**
16909a3aaf3SDag-Erling Smørgrav  * skips all of the characters in the given string in the fp, moving
17009a3aaf3SDag-Erling Smørgrav  * the position to the first character that is not in *s.
17109a3aaf3SDag-Erling Smørgrav  * \param[in] *fp file to use
17209a3aaf3SDag-Erling Smørgrav  * \param[in] *s characters to skip
17309a3aaf3SDag-Erling Smørgrav  * \param[in] line_nr pointer to an integer containing the current line number (for debugging purposes)
17409a3aaf3SDag-Erling Smørgrav  */
17509a3aaf3SDag-Erling Smørgrav void sldns_fskipcs_l(FILE *fp, const char *s, int *line_nr);
17609a3aaf3SDag-Erling Smørgrav 
17709a3aaf3SDag-Erling Smørgrav #ifdef __cplusplus
17809a3aaf3SDag-Erling Smørgrav }
17909a3aaf3SDag-Erling Smørgrav #endif
18009a3aaf3SDag-Erling Smørgrav 
18109a3aaf3SDag-Erling Smørgrav #endif /* LDNS_PARSE_H */
182