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