File: jsonutils.h

package info (click to toggle)
nagios4 4.4.6-4.1
  • links: PTS
  • area: main
  • in suites: sid, trixie
  • size: 22,336 kB
  • sloc: ansic: 97,631; sh: 12,619; javascript: 5,483; perl: 2,624; makefile: 1,265; php: 381; ruby: 95
file content (227 lines) | stat: -rw-r--r-- 9,062 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
/**************************************************************************
 *
 * JSONUTILS.H -  Utility information for Nagios CGI for that return 
 *                JSON-formatted data
 *
 * Copyright (c) 2013 Nagios Enterprises, LLC
 * Last Modified: 04-13-2013
 *
 * License:
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *************************************************************************/

#ifndef NAGIOS_JSONUTILS_H_INCLUDED
#define NAGIOS_JSONUTILS_H_INCLUDED

/* JSON object definitions */
#define JSON_TYPE_INVALID	0
#define JSON_TYPE_OBJECT	1
#define JSON_TYPE_ARRAY		2
#define JSON_TYPE_INTEGER	3
#define JSON_TYPE_REAL		4
#define JSON_TYPE_TIME_T	5
#define JSON_TYPE_STRING	6
#define JSON_TYPE_BOOLEAN	7
#define JSON_TYPE_DURATION	8

struct json_object_struct;

typedef struct json_object_member_struct {
	char 		*key;
	unsigned	type;
	union {
		long long			integer;
		unsigned long long	unsigned_integer;
		time_t				time;
		double				real;
		char *				string;
		unsigned			boolean;
		struct json_object_struct	*object;
		}		value;
	} json_object_member;

typedef struct json_object_struct {
	unsigned member_count;
	json_object_member **members;
	} json_object;

typedef json_object json_array;

/* Mapping from CGI query string option to value */
typedef struct string_value_mapping_struct {
	char 		*string;		/* String to map from */
	unsigned	value;			/* Value to map to */
	char 		*description;	/* Description of the meaning of the 
									string/value */
	} string_value_mapping;

typedef struct option_help_struct {
	const char *					name; 			/* name used in query */
	const char *					label;			/* short label for name */
	const char *					type;			/* option type */
	/* If the type is of the form nagios:<cgibase>/<objtype>, value values
		for this option will be obtained by sending the query
		'http://<whatever>/<cgibase>.cgi?objecttype=<objtype>' */
	const char *					required[25];	/* optiontypes required 
														for */
	const char *					optional[25];	/* optiontypes optional 
														for */
	const char *					depends_on;		/* valid values dependent on
														other option */
	const char *					description;	/* longer description */
	const string_value_mapping *	valid_values;	/* list of valid values */
	} option_help;

/* String escaping structures */
typedef struct json_escape_pair_struct {
	const wchar_t *from;
	const wchar_t *to;
}	json_escape_pair;

typedef struct json_escape_struct {
	const int				count;
	const json_escape_pair	*pairs;
}	json_escape;

/* Output Format Version */
#define OUTPUT_FORMAT_VERSION	0

/* Result Types */
#define RESULT_SUCCESS	0
#define RESULT_MEMORY_ALLOCATION_ERROR	1
#define RESULT_FILE_OPEN_READ_ERROR	2
#define RESULT_OPTION_INVALID	3
#define RESULT_OPTION_MISSING	4
#define RESULT_OPTION_VALUE_MISSING	5
#define RESULT_OPTION_VALUE_INVALID	6
#define RESULT_OPTION_IGNORED	7

/* Boolean Values - Used when selecting true, false, or both */
#define BOOLEAN_TRUE	1
#define BOOLEAN_FALSE	2
#define BOOLEAN_EITHER  (BOOLEAN_TRUE | BOOLEAN_FALSE)

/* Formatting Options */
#define JSON_FORMAT_WHITESPACE	(1<<0)
#define JSON_FORMAT_ENUMERATE	(1<<1)
#define JSON_FORMAT_BITMASK		(1<<2)
#define JSON_FORMAT_DURATION	(1<<3)
#if 0
#define JSON_FORMAT_DATETIME	(1<<3)
#define JSON_FORMAT_DATE		(1<<4)
#define JSON_FORMAT_TIME		(1<<5)
#endif

/* Possible Query Statuses */
#define QUERY_STATUS_ALPHA		0
#define QUERY_STATUS_BETA		1
#define QUERY_STATUS_RELEASED	2
#define QUERY_STATUS_DEPRECATED	3

extern const string_value_mapping svm_format_options[];
extern const string_value_mapping svm_host_statuses[];
extern const string_value_mapping svm_host_states[];
extern const string_value_mapping svm_service_statuses[];
extern const string_value_mapping svm_service_states[];
extern const string_value_mapping svm_check_options[];
extern const string_value_mapping svm_host_check_types[];
extern const string_value_mapping svm_service_check_types[];
extern const string_value_mapping svm_state_types[];
extern const string_value_mapping svm_acknowledgement_types[];
extern const string_value_mapping svm_comment_types[];
extern const string_value_mapping svm_comment_entry_types[];
extern const string_value_mapping svm_downtime_types[];
extern const string_value_mapping parent_host_extras[];
extern const string_value_mapping child_host_extras[];
extern const string_value_mapping parent_service_extras[];
extern const string_value_mapping child_service_extras[];
#ifdef JSON_NAGIOS_4X
extern const string_value_mapping svm_option_types[];
#endif

extern const char *dayofweek[];
extern const char *month[];

extern json_object *json_new_object(void);
extern void json_free_object(json_object *, int);
extern json_array *json_new_array(void);
extern void json_free_member(json_object_member *, int);
extern void json_object_append_object(json_object *, char *, json_object *);
extern void json_object_append_array(json_object *, char *, json_array *);
extern void json_object_append_integer(json_object *, char *, int);
extern void json_object_append_real(json_object *, char *, double);
extern void json_object_append_time(json_object *, char *, unsigned long);
extern void json_object_append_time_t(json_object *, char *, time_t);
extern void json_set_time_t(json_object_member *, time_t);
extern void json_object_append_string(json_object *, char *,
		const json_escape *, char *, ...);
extern void json_object_append_boolean(json_object *, char *, int);
extern void json_array_append_object(json_array *, json_object *);
extern void json_array_append_array(json_array *, json_array *);
extern void json_array_append_integer(json_array *, int);
extern void json_array_append_real(json_array *, double);
extern void json_array_append_time(json_array *, unsigned long);
extern void json_array_append_time_t(json_array *, time_t);
extern void json_array_append_string(json_array *, const json_escape *,
		char *, ...);
extern void json_array_append_boolean(json_array *, int);
extern void json_object_append_duration(json_object *, char *, unsigned long);
extern void json_array_append_duration(json_object *, unsigned long);
extern json_object_member *json_get_object_member(json_object *, char *);
extern json_object_member *json_get_array_member(json_object *, char *);
extern void json_object_print(json_object *, int, int, char *, unsigned);
extern void json_array_print(json_array *, int, int, char *, unsigned);
extern void json_member_print(json_object_member *, int, int, char *, unsigned);

extern json_object *json_result(time_t, char *, char *, int, time_t, authdata *,
		int, char *, ...);
extern json_object *json_help(option_help *);
extern int passes_start_and_count_limits(int, int, int, int);
extern void indentf(int, int, char *, ...);
extern void json_string(int, int, char *, char *);
extern void json_boolean(int, int, char *, int);
extern void json_int(int, int, char *, int);
extern void json_unsigned(int, int, char *, unsigned long long);
extern void json_float(int, int, char *, double);
extern void json_time(int, int, char *, unsigned long);
extern void json_time_t(int, int, char *, time_t, char *);
extern void json_duration(int, int, char *, unsigned long, int);

extern void json_enumeration(json_object *, unsigned, char *, int, 
		const string_value_mapping *);
extern void json_bitmask(json_object *, unsigned, char *, int, 
		const string_value_mapping *);

extern int parse_bitmask_cgivar(char *, char *, int, json_object *, time_t,
		authdata *, char *, char *, const string_value_mapping *, unsigned *);
extern int parse_enumeration_cgivar(char *, char *, int, json_object *,
		time_t, authdata *, char *, char *, const string_value_mapping *,
		int *);
extern int parse_string_cgivar(char *, char *, int, json_object *, time_t,
		authdata *, char *, char *, char **);
extern int parse_time_cgivar(char *, char *, int, json_object *, time_t,
		authdata *, char *, char *, time_t *);
extern int parse_boolean_cgivar(char *, char *, int, json_object *, time_t,
		authdata *, char *, char *, int *);
extern int parse_int_cgivar(char *, char *, int, json_object *, time_t,
		authdata *, char *, char *, int *);

extern int get_query_status(const int[][2], int);
extern char *svm_get_string_from_value(int, const string_value_mapping *);
extern char *svm_get_description_from_value(int, const string_value_mapping *);

extern time_t compile_time(const char *, const char *);
extern char *json_escape_string(const char *, const json_escape *);
#endif