You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
389 lines
15 KiB
389 lines
15 KiB
1 year ago
|
/*
|
||
|
** Zabbix
|
||
|
** Copyright (C) 2001-2023 Zabbix SIA
|
||
|
**
|
||
|
** This program is free software; you can redistribute it and/or modify
|
||
|
** it under the terms of the GNU General Public License as published by
|
||
|
** the Free Software Foundation; either version 2 of the License, or
|
||
|
** (at your option) any later version.
|
||
|
**
|
||
|
** 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
**/
|
||
|
|
||
|
#ifndef ZABBIX_ZJSON_H
|
||
|
#define ZABBIX_ZJSON_H
|
||
|
|
||
|
#include "zbxtypes.h"
|
||
|
#include "zbxalgo.h"
|
||
|
|
||
|
#define ZBX_PROTO_TAG_CLOCK "clock"
|
||
|
#define ZBX_PROTO_TAG_NS "ns"
|
||
|
#define ZBX_PROTO_TAG_DATA "data"
|
||
|
#define ZBX_PROTO_TAG_COMMANDS "commands"
|
||
|
#define ZBX_PROTO_TAG_REGEXP "regexp"
|
||
|
#define ZBX_PROTO_TAG_DELAY "delay"
|
||
|
#define ZBX_PROTO_TAG_REFRESH_UNSUPPORTED "refresh_unsupported"
|
||
|
#define ZBX_PROTO_TAG_DRULE "drule"
|
||
|
#define ZBX_PROTO_TAG_DCHECK "dcheck"
|
||
|
#define ZBX_PROTO_TAG_HOST "host"
|
||
|
#define ZBX_PROTO_TAG_HOST_METADATA "host_metadata"
|
||
|
#define ZBX_PROTO_TAG_INFO "info"
|
||
|
#define ZBX_PROTO_TAG_IP "ip"
|
||
|
#define ZBX_PROTO_TAG_DNS "dns"
|
||
|
#define ZBX_PROTO_TAG_CONN "conn"
|
||
|
#define ZBX_PROTO_TAG_KEY "key"
|
||
|
#define ZBX_PROTO_TAG_KEY_ORIG "key_orig"
|
||
|
#define ZBX_PROTO_TAG_KEYS "keys"
|
||
|
#define ZBX_PROTO_TAG_LASTLOGSIZE "lastlogsize"
|
||
|
#define ZBX_PROTO_TAG_MTIME "mtime"
|
||
|
#define ZBX_PROTO_TAG_LOGTIMESTAMP "timestamp"
|
||
|
#define ZBX_PROTO_TAG_LOGSOURCE "source"
|
||
|
#define ZBX_PROTO_TAG_LOGSEVERITY "severity"
|
||
|
#define ZBX_PROTO_TAG_LOGEVENTID "eventid"
|
||
|
#define ZBX_PROTO_TAG_PORT "port"
|
||
|
#define ZBX_PROTO_TAG_TLS_ACCEPTED "tls_accepted"
|
||
|
#define ZBX_PROTO_TAG_PROXY "proxy"
|
||
|
#define ZBX_PROTO_TAG_REQUEST "request"
|
||
|
#define ZBX_PROTO_TAG_RESPONSE "response"
|
||
|
#define ZBX_PROTO_TAG_STATUS "status"
|
||
|
#define ZBX_PROTO_TAG_STATE "state"
|
||
|
#define ZBX_PROTO_TAG_TYPE "type"
|
||
|
#define ZBX_PROTO_TAG_LIMIT "limit"
|
||
|
#define ZBX_PROTO_TAG_VALUE "value"
|
||
|
#define ZBX_PROTO_TAG_SCRIPTID "scriptid"
|
||
|
#define ZBX_PROTO_TAG_HOSTID "hostid"
|
||
|
#define ZBX_PROTO_TAG_AVAILABLE "available"
|
||
|
#define ZBX_PROTO_TAG_ERROR "error"
|
||
|
#define ZBX_PROTO_TAG_USERNAME "username"
|
||
|
#define ZBX_PROTO_TAG_PASSWORD "password"
|
||
|
#define ZBX_PROTO_TAG_SID "sid"
|
||
|
#define ZBX_PROTO_TAG_VERSION "version"
|
||
|
#define ZBX_PROTO_TAG_INTERFACE_AVAILABILITY "interface availability"
|
||
|
#define ZBX_PROTO_TAG_HISTORY_DATA "history data"
|
||
|
#define ZBX_PROTO_TAG_DISCOVERY_DATA "discovery data"
|
||
|
#define ZBX_PROTO_TAG_AUTOREGISTRATION "auto registration"
|
||
|
#define ZBX_PROTO_TAG_MORE "more"
|
||
|
#define ZBX_PROTO_TAG_ITEMID "itemid"
|
||
|
#define ZBX_PROTO_TAG_TTL "ttl"
|
||
|
#define ZBX_PROTO_TAG_COMMANDTYPE "commandtype"
|
||
|
#define ZBX_PROTO_TAG_COMMAND "command"
|
||
|
#define ZBX_PROTO_TAG_EXECUTE_ON "execute_on"
|
||
|
#define ZBX_PROTO_TAG_AUTHTYPE "authtype"
|
||
|
#define ZBX_PROTO_TAG_PUBLICKEY "publickey"
|
||
|
#define ZBX_PROTO_TAG_PRIVATEKEY "privatekey"
|
||
|
#define ZBX_PROTO_TAG_PARENT_TASKID "parent_taskid"
|
||
|
#define ZBX_PROTO_TAG_TASKS "tasks"
|
||
|
#define ZBX_PROTO_TAG_ALERTID "alertid"
|
||
|
#define ZBX_PROTO_TAG_JMX_ENDPOINT "jmx_endpoint"
|
||
|
#define ZBX_PROTO_TAG_EVENTID "eventid"
|
||
|
#define ZBX_PROTO_TAG_CAUSE_EVENTID "cause_eventid"
|
||
|
#define ZBX_PROTO_TAG_NAME "name"
|
||
|
#define ZBX_PROTO_TAG_SEVERITY "severity"
|
||
|
#define ZBX_PROTO_TAG_HOSTS "hosts"
|
||
|
#define ZBX_PROTO_TAG_GROUPS "groups"
|
||
|
#define ZBX_PROTO_TAG_TAGS "tags"
|
||
|
#define ZBX_PROTO_TAG_TAG "tag"
|
||
|
#define ZBX_PROTO_TAG_PROBLEM_EVENTID "p_eventid"
|
||
|
#define ZBX_PROTO_TAG_ITEMID "itemid"
|
||
|
#define ZBX_PROTO_TAG_COUNT "count"
|
||
|
#define ZBX_PROTO_TAG_MIN "min"
|
||
|
#define ZBX_PROTO_TAG_AVG "avg"
|
||
|
#define ZBX_PROTO_TAG_MAX "max"
|
||
|
#define ZBX_PROTO_TAG_SESSION "session"
|
||
|
#define ZBX_PROTO_TAG_ID "id"
|
||
|
#define ZBX_PROTO_TAG_PARAMS "params"
|
||
|
#define ZBX_PROTO_TAG_FROM "from"
|
||
|
#define ZBX_PROTO_TAG_TO "to"
|
||
|
#define ZBX_PROTO_TAG_HISTORY "history"
|
||
|
#define ZBX_PROTO_TAG_TIMESTAMP "timestamp"
|
||
|
#define ZBX_PROTO_TAG_ERROR_HANDLER "error_handler"
|
||
|
#define ZBX_PROTO_TAG_ERROR_HANDLER_PARAMS "error_handler_params"
|
||
|
#define ZBX_PROTO_TAG_VALUE_TYPE "value_type"
|
||
|
#define ZBX_PROTO_TAG_STEPS "steps"
|
||
|
#define ZBX_PROTO_TAG_ACTION "action"
|
||
|
#define ZBX_PROTO_TAG_FAILED "failed"
|
||
|
#define ZBX_PROTO_TAG_RESULT "result"
|
||
|
#define ZBX_PROTO_TAG_LINE_RAW "line_raw"
|
||
|
#define ZBX_PROTO_TAG_LABELS "labels"
|
||
|
#define ZBX_PROTO_TAG_HELP "help"
|
||
|
#define ZBX_PROTO_TAG_MEDIATYPEID "mediatypeid"
|
||
|
#define ZBX_PROTO_TAG_SENDTO "sendto"
|
||
|
#define ZBX_PROTO_TAG_SUBJECT "subject"
|
||
|
#define ZBX_PROTO_TAG_MESSAGE "message"
|
||
|
#define ZBX_PROTO_TAG_PREVIOUS "previous"
|
||
|
#define ZBX_PROTO_TAG_SINGLE "single"
|
||
|
#define ZBX_PROTO_TAG_INTERFACE "interface"
|
||
|
#define ZBX_PROTO_TAG_FLAGS "flags"
|
||
|
#define ZBX_PROTO_TAG_PARAMETERS "parameters"
|
||
|
#define ZBX_PROTO_TAG_PROXYID "proxyid"
|
||
|
#define ZBX_PROTO_TAG_INTERFACE_ID "interfaceid"
|
||
|
#define ZBX_PROTO_TAG_USEIP "useip"
|
||
|
#define ZBX_PROTO_TAG_ADDRESS "address"
|
||
|
#define ZBX_PROTO_TAG_TLS_CONNECT "tls_connect"
|
||
|
#define ZBX_PROTO_TAG_TLS_ISSUER "tls_issuer"
|
||
|
#define ZBX_PROTO_TAG_TLS_SUBJECT "tls_subject"
|
||
|
#define ZBX_PROTO_TAG_TLS_PSK_IDENTITY "tls_psk_identity"
|
||
|
#define ZBX_PROTO_TAG_TLS_PSK "tls_psk"
|
||
|
#define ZBX_PROTO_TAG_FOLLOW_REDIRECTS "follow_redirects"
|
||
|
#define ZBX_PROTO_TAG_POST_TYPE "post_type"
|
||
|
#define ZBX_PROTO_TAG_RETRIEVE_MODE "retrieve_mode"
|
||
|
#define ZBX_PROTO_TAG_REQUEST_METHOD "request_method"
|
||
|
#define ZBX_PROTO_TAG_OUTPUT_FORMAT "output_format"
|
||
|
#define ZBX_PROTO_TAG_VERIFY_PEER "verify_peer"
|
||
|
#define ZBX_PROTO_TAG_VERIFY_HOST "verify_host"
|
||
|
#define ZBX_PROTO_TAG_SNMP_OID "snmp_oid"
|
||
|
#define ZBX_PROTO_TAG_DETAILS "details"
|
||
|
#define ZBX_PROTO_TAG_VERSION "version"
|
||
|
#define ZBX_PROTO_TAG_COMMUNITY "community"
|
||
|
#define ZBX_PROTO_TAG_SECURITYNAME "securityname"
|
||
|
#define ZBX_PROTO_TAG_SECURITYLEVEL "securitylevel"
|
||
|
#define ZBX_PROTO_TAG_AUTHPASSPHRASE "authpassphrase"
|
||
|
#define ZBX_PROTO_TAG_PRIVPASSPHRASE "privpassphrase"
|
||
|
#define ZBX_PROTO_TAG_AUTHPROTOCOL "authprotocol"
|
||
|
#define ZBX_PROTO_TAG_PRIVPROTOCOL "privprotocol"
|
||
|
#define ZBX_PROTO_TAG_CONTEXTNAME "contextname"
|
||
|
#define ZBX_PROTO_TAG_MAX_REPS "max_repetitions"
|
||
|
#define ZBX_PROTO_TAG_IPMI_SENSOR "ipmi_sensor"
|
||
|
#define ZBX_PROTO_TAG_TIMEOUT "timeout"
|
||
|
#define ZBX_PROTO_TAG_URL "url"
|
||
|
#define ZBX_PROTO_TAG_QUERY_FIELDS "query_fields"
|
||
|
#define ZBX_PROTO_TAG_POSTS "posts"
|
||
|
#define ZBX_PROTO_TAG_STATUS_CODES "status_codes"
|
||
|
#define ZBX_PROTO_TAG_HTTP_PROXY "http_proxy"
|
||
|
#define ZBX_PROTO_TAG_HTTP_HEADERS "headers"
|
||
|
#define ZBX_PROTO_TAG_SSL_CERT_FILE "ssl_cert_file"
|
||
|
#define ZBX_PROTO_TAG_SSL_KEY_FILE "ssl_key_file"
|
||
|
#define ZBX_PROTO_TAG_SSL_KEY_PASSWORD "ssl_key_password"
|
||
|
#define ZBX_PROTO_TAG_MAINTENANCE_STATUS "maintenance_status"
|
||
|
#define ZBX_PROTO_TAG_MAINTENANCE_TYPE "maintenance_type"
|
||
|
#define ZBX_PROTO_TAG_IPMI_AUTHTYPE "ipmi_authtype"
|
||
|
#define ZBX_PROTO_TAG_IPMI_PRIVILEGE "ipmi_privilege"
|
||
|
#define ZBX_PROTO_TAG_IPMI_USERNAME "ipmi_username"
|
||
|
#define ZBX_PROTO_TAG_IPMI_PASSWORD "ipmi_password"
|
||
|
#define ZBX_PROTO_TAG_DATA_TYPE "datatype"
|
||
|
#define ZBX_PROTO_TAG_PROXY_DELAY "proxy_delay"
|
||
|
#define ZBX_PROTO_TAG_EXPRESSIONS "expressions"
|
||
|
#define ZBX_PROTO_TAG_EXPRESSION "expression"
|
||
|
#define ZBX_PROTO_TAG_CLIENTIP "clientip"
|
||
|
#define ZBX_PROTO_TAG_ITEM_TAGS "item_tags"
|
||
|
#define ZBX_PROTO_TAG_PROXY_UPLOAD "upload"
|
||
|
#define ZBX_PROTO_TAG_DASHBOARDID "dashboardid"
|
||
|
#define ZBX_PROTO_TAG_USERID "userid"
|
||
|
#define ZBX_PROTO_TAG_PERIOD "period"
|
||
|
#define ZBX_PROTO_TAG_NOW "now"
|
||
|
#define ZBX_PROTO_TAG_SESSIONID "sessionid"
|
||
|
#define ZBX_PROTO_TAG_SIGN "sign"
|
||
|
#define ZBX_PROTO_TAG_DETAIL "detail"
|
||
|
#define ZBX_PROTO_TAG_RECIPIENT "recipient"
|
||
|
#define ZBX_PROTO_TAG_RECIPIENTS "recipients"
|
||
|
#define ZBX_PROTO_TAG_LASTACCESS "lastaccess"
|
||
|
#define ZBX_PROTO_TAG_LASTACCESS_AGE "lastaccess_age"
|
||
|
#define ZBX_PROTO_TAG_DB_TIMESTAMP "db_timestamp"
|
||
|
#define ZBX_PROTO_TAG_NODE "node"
|
||
|
#define ZBX_PROTO_TAG_FAILOVER_DELAY "failover_delay"
|
||
|
#define ZBX_PROTO_TAG_SECTION "section"
|
||
|
#define ZBX_PROTO_TAG_PID "pid"
|
||
|
#define ZBX_PROTO_TAG_PROCESS_NAME "process_name"
|
||
|
#define ZBX_PROTO_TAG_PROCESS_NUM "process_num"
|
||
|
#define ZBX_PROTO_TAG_SCOPE "scope"
|
||
|
#define ZBX_PROTO_TAG_HEARTBEAT_FREQ "heartbeat_freq"
|
||
|
#define ZBX_PROTO_TAG_ACTIVE_STATUS "active_status"
|
||
|
#define ZBX_PROTO_TAG_PROXY_ACTIVE_AVAIL_DATA "host data"
|
||
|
#define ZBX_PROTO_TAG_PROXY_NAME "proxy_name"
|
||
|
#define ZBX_PROTO_TAG_PROXY_NAMES "proxy_names"
|
||
|
#define ZBX_PROTO_TAG_PROXYIDS "proxyids"
|
||
|
#define ZBX_PROTO_TAG_SUPPRESS_UNTIL "suppress_until"
|
||
|
#define ZBX_PROTO_TAG_CONFIG_REVISION "config_revision"
|
||
|
#define ZBX_PROTO_TAG_FULL_SYNC "full_sync"
|
||
|
#define ZBX_PROTO_TAG_MACRO_SECRETS "macro.secrets"
|
||
|
#define ZBX_PROTO_TAG_REMOVED_HOSTIDS "del_hostids"
|
||
|
#define ZBX_PROTO_TAG_REMOVED_MACRO_HOSTIDS "del_macro_hostids"
|
||
|
#define ZBX_PROTO_TAG_ACKNOWLEDGEID "acknowledgeid"
|
||
|
#define ZBX_PROTO_TAG_WAIT "wait"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_FAILED "failed"
|
||
|
#define ZBX_PROTO_VALUE_SUCCESS "success"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_GET_ACTIVE_CHECKS "active checks"
|
||
|
#define ZBX_PROTO_VALUE_PROXY_CONFIG "proxy config"
|
||
|
#define ZBX_PROTO_VALUE_PROXY_HEARTBEAT "proxy heartbeat"
|
||
|
#define ZBX_PROTO_VALUE_SENDER_DATA "sender data"
|
||
|
#define ZBX_PROTO_VALUE_AGENT_DATA "agent data"
|
||
|
#define ZBX_PROTO_VALUE_COMMAND "command"
|
||
|
#define ZBX_PROTO_VALUE_JAVA_GATEWAY_INTERNAL "java gateway internal"
|
||
|
#define ZBX_PROTO_VALUE_JAVA_GATEWAY_JMX "java gateway jmx"
|
||
|
#define ZBX_PROTO_VALUE_GET_QUEUE "queue.get"
|
||
|
#define ZBX_PROTO_VALUE_GET_STATUS "status.get"
|
||
|
#define ZBX_PROTO_VALUE_PROXY_DATA "proxy data"
|
||
|
#define ZBX_PROTO_VALUE_PROXY_TASKS "proxy tasks"
|
||
|
#define ZBX_PROTO_VALUE_ACTIVE_CHECK_HEARTBEAT "active check heartbeat"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_GET_QUEUE_OVERVIEW "overview"
|
||
|
#define ZBX_PROTO_VALUE_GET_QUEUE_PROXY "overview by proxy"
|
||
|
#define ZBX_PROTO_VALUE_GET_QUEUE_DETAILS "details"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_GET_STATUS_PING "ping"
|
||
|
#define ZBX_PROTO_VALUE_GET_STATUS_FULL "full"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_ZABBIX_STATS "zabbix.stats"
|
||
|
#define ZBX_PROTO_VALUE_ZABBIX_STATS_QUEUE "queue"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_ZABBIX_ALERT_SEND "alert.send"
|
||
|
#define ZBX_PROTO_VALUE_ZABBIX_ITEM_TEST "item.test"
|
||
|
#define ZBX_PROTO_VALUE_PREPROCESSING_TEST "preprocessing.test"
|
||
|
#define ZBX_PROTO_VALUE_EXPRESSIONS_EVALUATE "expressions.evaluate"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_PROXY_UPLOAD_ENABLED "enabled"
|
||
|
#define ZBX_PROTO_VALUE_PROXY_UPLOAD_DISABLED "disabled"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_REPORT_TEST "report.test"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_HISTORY_PUSH "history.push"
|
||
|
|
||
|
#define ZBX_PROTO_VALUE_SUPPRESSION_SUPPRESS "suppress"
|
||
|
#define ZBX_PROTO_VALUE_SUPPRESSION_UNSUPPRESS "unsuppress"
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
ZBX_JSON_TYPE_UNKNOWN = 0,
|
||
|
ZBX_JSON_TYPE_STRING,
|
||
|
ZBX_JSON_TYPE_INT,
|
||
|
ZBX_JSON_TYPE_ARRAY,
|
||
|
ZBX_JSON_TYPE_OBJECT,
|
||
|
ZBX_JSON_TYPE_NULL,
|
||
|
ZBX_JSON_TYPE_TRUE,
|
||
|
ZBX_JSON_TYPE_FALSE,
|
||
|
ZBX_JSON_TYPE_NUMBER
|
||
|
}
|
||
|
zbx_json_type_t;
|
||
|
|
||
|
typedef enum
|
||
|
{
|
||
|
ZBX_JSON_EMPTY = 0,
|
||
|
ZBX_JSON_COMMA
|
||
|
}
|
||
|
zbx_json_status_t;
|
||
|
|
||
|
#define ZBX_JSON_STAT_BUF_LEN 4096
|
||
|
|
||
|
struct zbx_json
|
||
|
{
|
||
|
char *buffer;
|
||
|
char buf_stat[ZBX_JSON_STAT_BUF_LEN];
|
||
|
size_t buffer_allocated;
|
||
|
size_t buffer_offset;
|
||
|
size_t buffer_size;
|
||
|
zbx_json_status_t status;
|
||
|
int level;
|
||
|
};
|
||
|
|
||
|
struct zbx_json_parse
|
||
|
{
|
||
|
const char *start;
|
||
|
const char *end;
|
||
|
};
|
||
|
|
||
|
const char *zbx_json_strerror(void);
|
||
|
|
||
|
void zbx_json_init(struct zbx_json *j, size_t allocate);
|
||
|
void zbx_json_initarray(struct zbx_json *j, size_t allocate);
|
||
|
void zbx_json_clean(struct zbx_json *j);
|
||
|
void zbx_json_free(struct zbx_json *j);
|
||
|
void zbx_json_addobject(struct zbx_json *j, const char *name);
|
||
|
void zbx_json_addarray(struct zbx_json *j, const char *name);
|
||
|
void zbx_json_addstring(struct zbx_json *j, const char *name, const char *string, zbx_json_type_t type);
|
||
|
void zbx_json_adduint64(struct zbx_json *j, const char *name, zbx_uint64_t value);
|
||
|
void zbx_json_addint64(struct zbx_json *j, const char *name, zbx_int64_t value);
|
||
|
void zbx_json_addraw(struct zbx_json *j, const char *name, const char *data);
|
||
|
void zbx_json_addfloat(struct zbx_json *j, const char *name, double value);
|
||
|
void zbx_json_adddouble(struct zbx_json *j, const char *name, double value);
|
||
|
int zbx_json_close(struct zbx_json *j);
|
||
|
|
||
|
int zbx_json_open(const char *buffer, struct zbx_json_parse *jp);
|
||
|
const char *zbx_json_next(const struct zbx_json_parse *jp, const char *p);
|
||
|
const char *zbx_json_next_value(const struct zbx_json_parse *jp, const char *p, char *string, size_t len,
|
||
|
zbx_json_type_t *type);
|
||
|
const char *zbx_json_next_value_dyn(const struct zbx_json_parse *jp, const char *p, char **string,
|
||
|
size_t *string_alloc, zbx_json_type_t *type);
|
||
|
const char *zbx_json_pair_next(const struct zbx_json_parse *jp, const char *p, char *name, size_t len);
|
||
|
const char *zbx_json_pair_by_name(const struct zbx_json_parse *jp, const char *name);
|
||
|
int zbx_json_value_by_name(const struct zbx_json_parse *jp, const char *name, char *string, size_t len,
|
||
|
zbx_json_type_t *type);
|
||
|
int zbx_json_value_by_name_dyn(const struct zbx_json_parse *jp, const char *name, char **string,
|
||
|
size_t *string_alloc, zbx_json_type_t *type);
|
||
|
int zbx_json_brackets_open(const char *p, struct zbx_json_parse *jp);
|
||
|
int zbx_json_brackets_by_name(const struct zbx_json_parse *jp, const char *name, struct zbx_json_parse *out);
|
||
|
int zbx_json_object_is_empty(const struct zbx_json_parse *jp);
|
||
|
int zbx_json_count(const struct zbx_json_parse *jp);
|
||
|
const char *zbx_json_decodevalue(const char *p, char *string, size_t size, zbx_json_type_t *type);
|
||
|
const char *zbx_json_decodevalue_dyn(const char *p, char **string, size_t *string_alloc, zbx_json_type_t *type);
|
||
|
void zbx_json_escape(char **string);
|
||
|
int zbx_json_open_path(const struct zbx_json_parse *jp, const char *path, struct zbx_json_parse *out);
|
||
|
zbx_json_type_t zbx_json_valuetype(const char *p);
|
||
|
|
||
|
/* jsonpath support */
|
||
|
|
||
|
typedef struct zbx_jsonpath_segment zbx_jsonpath_segment_t;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
zbx_jsonpath_segment_t *segments;
|
||
|
int segments_num;
|
||
|
int segments_alloc;
|
||
|
|
||
|
/* set to 1 when jsonpath points at single location */
|
||
|
unsigned char definite;
|
||
|
unsigned char first_match; /* set to 1 if first match must be returned */
|
||
|
}
|
||
|
zbx_jsonpath_t;
|
||
|
|
||
|
typedef struct zbx_jsonobj zbx_jsonobj_t;
|
||
|
|
||
|
ZBX_PTR_VECTOR_DECL(jsonobj_ptr, zbx_jsonobj_t *)
|
||
|
|
||
|
typedef union
|
||
|
{
|
||
|
char *string;
|
||
|
double number;
|
||
|
zbx_hashset_t object;
|
||
|
zbx_vector_jsonobj_ptr_t array;
|
||
|
}
|
||
|
zbx_jsonobj_data_t;
|
||
|
|
||
|
struct zbx_jsonobj
|
||
|
{
|
||
|
zbx_json_type_t type;
|
||
|
zbx_jsonobj_data_t data;
|
||
|
};
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
char *name;
|
||
|
zbx_jsonobj_t value;
|
||
|
}
|
||
|
zbx_jsonobj_el_t;
|
||
|
|
||
|
typedef struct zbx_jsonpath_index zbx_jsonpath_index_t;
|
||
|
|
||
|
int zbx_jsonpath_compile(const char *path, zbx_jsonpath_t *jsonpath);
|
||
|
int zbx_jsonpath_query(const struct zbx_json_parse *jp, const char *path, char **output);
|
||
|
int zbx_jsonobj_query_ext(zbx_jsonobj_t *obj, zbx_jsonpath_index_t *index, const char *path, char **output);
|
||
|
void zbx_jsonpath_clear(zbx_jsonpath_t *jsonpath);
|
||
|
|
||
|
zbx_jsonpath_index_t *zbx_jsonpath_index_create(char **error);
|
||
|
void zbx_jsonpath_index_free(zbx_jsonpath_index_t *index);
|
||
|
|
||
|
int zbx_jsonobj_open(const char *data, zbx_jsonobj_t *obj);
|
||
|
void zbx_jsonobj_clear(zbx_jsonobj_t *obj);
|
||
|
int zbx_jsonobj_query(zbx_jsonobj_t *obj, const char *path, char **output);
|
||
|
int zbx_jsonobj_to_string(char **str, size_t *str_alloc, size_t *str_offset, zbx_jsonobj_t *obj);
|
||
|
|
||
|
#endif /* ZABBIX_ZJSON_H */
|