Merge branch 'v5-stable-elasticsearch' into v5-devel-tmp
[rsyslog.git] / parse.h
1 /* parsing routines for the counted string class. These
2  * routines provide generic parsing aid as well some fairly
3  * complex routines targeted toward specific needs.
4  *
5  * General information - read this:
6  * All routines work on a single CStr object, which must be supplied
7  * during construction. The parse class keeps an internal pointer of
8  * where the next parse operation is to start (you could also say
9  * this is where the last parse operation stopped).
10  *
11  * Each parse operation carried out by this package starts from the
12  * parse pointer, parses the caller-requested element (e.g. an
13  * integer or delemited string) and the update the parse pointer. If
14  * the caller tries to parse beyond the end of the original string,
15  * an error is returned. In general, all functions return a parsRet
16  * error code and all require the parseObj to be the first parameter.
17  * The to-be-parsed string provided to the parse object MUST NOT be
18  * freed or modified by the caller during the lifetime of the parse
19  * object. However, the caller must free it when it is no longer needed.
20  * Optinally, the parse object can be instructed to do that. All objects
21  * returned by the parse routines must be freed by the caller. For
22  * simpler data types (like integers), the caller must provide the
23  * necessary buffer space.
24  *
25  * begun 2005-09-09 rgerhards
26  *
27  * Copyright (C) 2005-2012 Adiscon GmbH
28  *
29  * This file is part of rsyslog.
30  *
31  * Licensed under the Apache License, Version 2.0 (the "License");
32  * you may not use this file except in compliance with the License.
33  * You may obtain a copy of the License at
34  * 
35  *       http://www.apache.org/licenses/LICENSE-2.0
36  *       -or-
37  *       see COPYING.ASL20 in the source distribution
38  * 
39  * Unless required by applicable law or agreed to in writing, software
40  * distributed under the License is distributed on an "AS IS" BASIS,
41  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
42  * See the License for the specific language governing permissions and
43  * limitations under the License.
44  */
45 #ifndef _PARSE_H_INCLUDED__
46 #define _PARSE_H_INCLUDED__ 1
47
48 #include "stringbuf.h"
49
50 /** 
51  * The parse object
52  */
53 struct rsParsObject
54 {       
55 #ifndef NDEBUG
56         rsObjID OID;                    /**< object ID */
57 #endif
58         cstr_t *pCStr;          /**< pointer to the string object we are parsing */
59         int iCurrPos;                   /**< current parsing position (char offset) */
60 };
61 typedef struct rsParsObject rsParsObj;
62
63
64 /* BEGIN "inline"-like functions */
65 /* END "inline"-like functions */
66
67 int rsParsGetParsePointer(rsParsObj *pThis);
68
69 /**
70  * Construct a rsPars object.
71  */
72 rsRetVal rsParsConstruct(rsParsObj **ppThis);
73 rsRetVal rsParsAssignString(rsParsObj *pThis, cstr_t *pCStr);
74
75 /* parse an integer. The parse pointer is advanced */
76 rsRetVal parsInt(rsParsObj *pThis, int* pInt);
77
78 /* Skip whitespace. Often used to trim parsable entries. */
79 rsRetVal parsSkipWhitespace(rsParsObj *pThis, sbool bRequireOne);
80
81 /* Parse string up to a delimiter.
82  *
83  * Input:
84  * cDelim - the delimiter
85  *   The following two are for whitespace stripping,
86  *   0 means "no", 1 "yes"
87  *   - bTrimLeading
88  *   - bTrimTrailing
89  * 
90  * Output:
91  * ppCStr Pointer to the parsed string
92  */
93 rsRetVal parsDelimCStr(rsParsObj *pThis, cstr_t **ppCStr, char cDelim, int bTrimLeading, int bTrimTrailing, int bConvLower);
94
95 rsRetVal parsSkipAfterChar(rsParsObj *pThis, char c);
96 rsRetVal parsQuotedCStr(rsParsObj *pThis, cstr_t **ppCStr);
97 rsRetVal rsParsConstructFromSz(rsParsObj **ppThis, unsigned char *psz);
98 rsRetVal rsParsDestruct(rsParsObj *pThis);
99 int parsIsAtEndOfParseString(rsParsObj *pThis);
100 int parsGetCurrentPosition(rsParsObj *pThis);
101 char parsPeekAtCharAtParsPtr(rsParsObj *pThis);
102 #ifdef SYSLOG_INET
103 rsRetVal parsAddrWithBits(rsParsObj *pThis, netAddr_t **pIP, int *pBits);
104 #endif
105
106 #endif
107 /* vim:set ai:
108  */