1*407bc4bfSDaniel P. Berrangé /* 2*407bc4bfSDaniel P. Berrangé * JSON Parser 3*407bc4bfSDaniel P. Berrangé * 4*407bc4bfSDaniel P. Berrangé * Copyright IBM, Corp. 2009 5*407bc4bfSDaniel P. Berrangé * 6*407bc4bfSDaniel P. Berrangé * Authors: 7*407bc4bfSDaniel P. Berrangé * Anthony Liguori <aliguori@us.ibm.com> 8*407bc4bfSDaniel P. Berrangé * 9*407bc4bfSDaniel P. Berrangé * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 10*407bc4bfSDaniel P. Berrangé * See the COPYING.LIB file in the top-level directory. 11*407bc4bfSDaniel P. Berrangé * 12*407bc4bfSDaniel P. Berrangé */ 13*407bc4bfSDaniel P. Berrangé 14*407bc4bfSDaniel P. Berrangé #ifndef QAPI_QMP_JSON_PARSER_H 15*407bc4bfSDaniel P. Berrangé #define QAPI_QMP_JSON_PARSER_H 16*407bc4bfSDaniel P. Berrangé 17*407bc4bfSDaniel P. Berrangé typedef struct JSONLexer { 18*407bc4bfSDaniel P. Berrangé int start_state, state; 19*407bc4bfSDaniel P. Berrangé GString *token; 20*407bc4bfSDaniel P. Berrangé int x, y; 21*407bc4bfSDaniel P. Berrangé } JSONLexer; 22*407bc4bfSDaniel P. Berrangé 23*407bc4bfSDaniel P. Berrangé typedef struct JSONMessageParser { 24*407bc4bfSDaniel P. Berrangé void (*emit)(void *opaque, QObject *json, Error *err); 25*407bc4bfSDaniel P. Berrangé void *opaque; 26*407bc4bfSDaniel P. Berrangé va_list *ap; 27*407bc4bfSDaniel P. Berrangé JSONLexer lexer; 28*407bc4bfSDaniel P. Berrangé int brace_count; 29*407bc4bfSDaniel P. Berrangé int bracket_count; 30*407bc4bfSDaniel P. Berrangé GQueue tokens; 31*407bc4bfSDaniel P. Berrangé uint64_t token_size; 32*407bc4bfSDaniel P. Berrangé } JSONMessageParser; 33*407bc4bfSDaniel P. Berrangé 34*407bc4bfSDaniel P. Berrangé void json_message_parser_init(JSONMessageParser *parser, 35*407bc4bfSDaniel P. Berrangé void (*emit)(void *opaque, QObject *json, 36*407bc4bfSDaniel P. Berrangé Error *err), 37*407bc4bfSDaniel P. Berrangé void *opaque, va_list *ap); 38*407bc4bfSDaniel P. Berrangé 39*407bc4bfSDaniel P. Berrangé void json_message_parser_feed(JSONMessageParser *parser, 40*407bc4bfSDaniel P. Berrangé const char *buffer, size_t size); 41*407bc4bfSDaniel P. Berrangé 42*407bc4bfSDaniel P. Berrangé void json_message_parser_flush(JSONMessageParser *parser); 43*407bc4bfSDaniel P. Berrangé 44*407bc4bfSDaniel P. Berrangé void json_message_parser_destroy(JSONMessageParser *parser); 45*407bc4bfSDaniel P. Berrangé 46*407bc4bfSDaniel P. Berrangé #endif 47