diff options
Diffstat (limited to 'common/marshaller.h')
-rw-r--r-- | common/marshaller.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/common/marshaller.h b/common/marshaller.h new file mode 100644 index 00000000..3b159aa9 --- /dev/null +++ b/common/marshaller.h @@ -0,0 +1,58 @@ +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + Copyright (C) 2010 Red Hat, Inc. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef _H_MARSHALLER +#define _H_MARSHALLER + +#include <spice/types.h> +#include <sys/uio.h> + +typedef struct SpiceMarshaller SpiceMarshaller; +typedef void (*spice_marshaller_item_free_func)(uint8_t *data, void *opaque); + +SpiceMarshaller *spice_marshaller_new(void); +void spice_marshaller_reset(SpiceMarshaller *m); +void spice_marshaller_destroy(SpiceMarshaller *m); +uint8_t *spice_marshaller_reserve_space(SpiceMarshaller *m, size_t size); +void spice_marshaller_unreserve_space(SpiceMarshaller *m, size_t size); +uint8_t *spice_marshaller_add(SpiceMarshaller *m, uint8_t *data, size_t size); +uint8_t *spice_marshaller_add_ref(SpiceMarshaller *m, uint8_t *data, size_t size); +uint8_t *spice_marshaller_add_ref_full(SpiceMarshaller *m, uint8_t *data, size_t size, + spice_marshaller_item_free_func free_data, void *opaque); +void spice_marshaller_flush(SpiceMarshaller *m); +void spice_marshaller_set_base(SpiceMarshaller *m, size_t base); +uint8_t *spice_marshaller_linearize(SpiceMarshaller *m, size_t skip, + size_t *len, int *free_res); +uint8_t *spice_marshaller_get_ptr(SpiceMarshaller *m); +size_t spice_marshaller_get_offset(SpiceMarshaller *m); +size_t spice_marshaller_get_size(SpiceMarshaller *m); +size_t spice_marshaller_get_total_size(SpiceMarshaller *m); +SpiceMarshaller *spice_marshaller_get_submarshaller(SpiceMarshaller *m); +SpiceMarshaller *spice_marshaller_get_ptr_submarshaller(SpiceMarshaller *m, int is_64bit); +int spice_marshaller_fill_iovec(SpiceMarshaller *m, struct iovec *vec, + int n_vec, size_t skip_bytes); +void spice_marshaller_add_uint64(SpiceMarshaller *m, uint64_t v); +void spice_marshaller_add_int64(SpiceMarshaller *m, int64_t v); +void spice_marshaller_add_uint32(SpiceMarshaller *m, uint32_t v); +void spice_marshaller_add_int32(SpiceMarshaller *m, int32_t v); +void spice_marshaller_add_uint16(SpiceMarshaller *m, uint16_t v); +void spice_marshaller_add_int16(SpiceMarshaller *m, int16_t v); +void spice_marshaller_add_uint8(SpiceMarshaller *m, uint8_t v); +void spice_marshaller_add_int8(SpiceMarshaller *m, int8_t v); + +#endif |