12910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner/* 22910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * JSON streaming support 32910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 42910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Copyright IBM, Corp. 2009 52910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 62910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Authors: 72910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * Anthony Liguori <aliguori@us.ibm.com> 82910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 92910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. 102910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * See the COPYING.LIB file in the top-level directory. 112910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner * 122910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner */ 132910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 142910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#ifndef QEMU_JSON_STREAMER_H 152910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define QEMU_JSON_STREAMER_H 162910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 172910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "qlist.h" 182910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include "json-lexer.h" 192910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 202910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnertypedef struct JSONMessageParser 212910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner{ 222910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner void (*emit)(struct JSONMessageParser *parser, QList *tokens); 232910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner JSONLexer lexer; 242910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner int brace_count; 252910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner int bracket_count; 262910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner QList *tokens; 272910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner} JSONMessageParser; 282910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 292910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid json_message_parser_init(JSONMessageParser *parser, 302910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner void (*func)(JSONMessageParser *, QList *)); 312910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 322910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerint json_message_parser_feed(JSONMessageParser *parser, 332910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner const char *buffer, size_t size); 342910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 352910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnerint json_message_parser_flush(JSONMessageParser *parser); 362910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 372910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turnervoid json_message_parser_destroy(JSONMessageParser *parser); 382910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 392910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#endif 40