Create a new libvirt-stream.h file to hold the public API definitions for the virStream type. This header file is not self-contained, so applications will not directly include it. They will contain to #include <libvirt/libvirt.h> Note the definition of virStreamPtr is not moved, since that must be declared early for all other libvirt APIs to be able to reference it. --- docs/apibuild.py | 1 + include/libvirt/Makefile.am | 1 + include/libvirt/libvirt-stream.h | 152 +++++++++++++++++++++++++++++++++++++++ include/libvirt/libvirt.h.in | 121 +------------------------------ 4 files changed, 155 insertions(+), 120 deletions(-) create mode 100644 include/libvirt/libvirt-stream.h diff --git a/docs/apibuild.py b/docs/apibuild.py index b8fd191..5ddbb58 100755 --- a/docs/apibuild.py +++ b/docs/apibuild.py @@ -28,6 +28,7 @@ included_files = { "libvirt-nodedev.h": "header with general libvirt API definitions", "libvirt-nwfilter.h": "header with general libvirt API definitions", "libvirt-secret.h": "header with general libvirt API definitions", + "libvirt-stream.h": "header with general libvirt API definitions", "virterror.h": "header with error specific API definitions", "libvirt.c": "Main interfaces for the libvirt library", "libvirt-domain.c": "Domain interfaces for the libvirt library", diff --git a/include/libvirt/Makefile.am b/include/libvirt/Makefile.am index 62332e1..78d5567 100644 --- a/include/libvirt/Makefile.am +++ b/include/libvirt/Makefile.am @@ -25,6 +25,7 @@ virinc_HEADERS = libvirt.h \ libvirt-nodedev.h \ libvirt-nwfilter.h \ libvirt-secret.h \ + libvirt-stream.h \ libvirt-lxc.h \ libvirt-qemu.h \ virterror.h diff --git a/include/libvirt/libvirt-stream.h b/include/libvirt/libvirt-stream.h new file mode 100644 index 0000000..831640d --- /dev/null +++ b/include/libvirt/libvirt-stream.h @@ -0,0 +1,152 @@ +/* + * libvirt-stream.h + * Summary: APIs for management of streams + * Description: Provides APIs for the management of streams + * Author: Daniel Veillard <veillard@xxxxxxxxxx> + * + * Copyright (C) 2006-2014 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 __VIR_LIBVIRT_STREAM_H__ +# define __VIR_LIBVIRT_STREAM_H__ + +# ifndef __VIR_LIBVIRT_H_INCLUDES__ +# error "Don't include this file directly, only use libvirt/libvirt.h" +# endif + + +typedef enum { + VIR_STREAM_NONBLOCK = (1 << 0), +} virStreamFlags; + +virStreamPtr virStreamNew(virConnectPtr conn, + unsigned int flags); +int virStreamRef(virStreamPtr st); + +int virStreamSend(virStreamPtr st, + const char *data, + size_t nbytes); + +int virStreamRecv(virStreamPtr st, + char *data, + size_t nbytes); + + +/** + * virStreamSourceFunc: + * + * @st: the stream object + * @data: preallocated array to be filled with data + * @nbytes: size of the data array + * @opaque: optional application provided data + * + * The virStreamSourceFunc callback is used together + * with the virStreamSendAll function for libvirt to + * obtain the data that is to be sent. + * + * The callback will be invoked multiple times, + * fetching data in small chunks. The application + * should fill the 'data' array with up to 'nbytes' + * of data and then return the number actual number + * of bytes. The callback will continue to be + * invoked until it indicates the end of the source + * has been reached by returning 0. A return value + * of -1 at any time will abort the send operation + * + * Returns the number of bytes filled, 0 upon end + * of file, or -1 upon error + */ +typedef int (*virStreamSourceFunc)(virStreamPtr st, + char *data, + size_t nbytes, + void *opaque); + +int virStreamSendAll(virStreamPtr st, + virStreamSourceFunc handler, + void *opaque); + +/** + * virStreamSinkFunc: + * + * @st: the stream object + * @data: preallocated array to be filled with data + * @nbytes: size of the data array + * @opaque: optional application provided data + * + * The virStreamSinkFunc callback is used together + * with the virStreamRecvAll function for libvirt to + * provide the data that has been received. + * + * The callback will be invoked multiple times, + * providing data in small chunks. The application + * should consume up 'nbytes' from the 'data' array + * of data and then return the number actual number + * of bytes consumed. The callback will continue to be + * invoked until it indicates the end of the stream + * has been reached. A return value of -1 at any time + * will abort the receive operation + * + * Returns the number of bytes consumed or -1 upon + * error + */ +typedef int (*virStreamSinkFunc)(virStreamPtr st, + const char *data, + size_t nbytes, + void *opaque); + +int virStreamRecvAll(virStreamPtr st, + virStreamSinkFunc handler, + void *opaque); + +typedef enum { + VIR_STREAM_EVENT_READABLE = (1 << 0), + VIR_STREAM_EVENT_WRITABLE = (1 << 1), + VIR_STREAM_EVENT_ERROR = (1 << 2), + VIR_STREAM_EVENT_HANGUP = (1 << 3), +} virStreamEventType; + + +/** + * virStreamEventCallback: + * + * @stream: stream on which the event occurred + * @events: bitset of events from virEventHandleType constants + * @opaque: user data registered with handle + * + * Callback for receiving stream events. The callback will + * be invoked once for each event which is pending. + */ +typedef void (*virStreamEventCallback)(virStreamPtr stream, int events, void *opaque); + +int virStreamEventAddCallback(virStreamPtr stream, + int events, + virStreamEventCallback cb, + void *opaque, + virFreeCallback ff); + +int virStreamEventUpdateCallback(virStreamPtr stream, + int events); + +int virStreamEventRemoveCallback(virStreamPtr stream); + + +int virStreamFinish(virStreamPtr st); +int virStreamAbort(virStreamPtr st); + +int virStreamFree(virStreamPtr st); + +#endif /* __VIR_LIBVIRT_STREAM_H__ */ diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in index 39824ab..7bfdd88 100644 --- a/include/libvirt/libvirt.h.in +++ b/include/libvirt/libvirt.h.in @@ -3673,126 +3673,6 @@ int virEventAddTimeout(int frequency, void virEventUpdateTimeout(int timer, int frequency); int virEventRemoveTimeout(int timer); -typedef enum { - VIR_STREAM_NONBLOCK = (1 << 0), -} virStreamFlags; - -virStreamPtr virStreamNew(virConnectPtr conn, - unsigned int flags); -int virStreamRef(virStreamPtr st); - -int virStreamSend(virStreamPtr st, - const char *data, - size_t nbytes); - -int virStreamRecv(virStreamPtr st, - char *data, - size_t nbytes); - - -/** - * virStreamSourceFunc: - * - * @st: the stream object - * @data: preallocated array to be filled with data - * @nbytes: size of the data array - * @opaque: optional application provided data - * - * The virStreamSourceFunc callback is used together - * with the virStreamSendAll function for libvirt to - * obtain the data that is to be sent. - * - * The callback will be invoked multiple times, - * fetching data in small chunks. The application - * should fill the 'data' array with up to 'nbytes' - * of data and then return the number actual number - * of bytes. The callback will continue to be - * invoked until it indicates the end of the source - * has been reached by returning 0. A return value - * of -1 at any time will abort the send operation - * - * Returns the number of bytes filled, 0 upon end - * of file, or -1 upon error - */ -typedef int (*virStreamSourceFunc)(virStreamPtr st, - char *data, - size_t nbytes, - void *opaque); - -int virStreamSendAll(virStreamPtr st, - virStreamSourceFunc handler, - void *opaque); - -/** - * virStreamSinkFunc: - * - * @st: the stream object - * @data: preallocated array to be filled with data - * @nbytes: size of the data array - * @opaque: optional application provided data - * - * The virStreamSinkFunc callback is used together - * with the virStreamRecvAll function for libvirt to - * provide the data that has been received. - * - * The callback will be invoked multiple times, - * providing data in small chunks. The application - * should consume up 'nbytes' from the 'data' array - * of data and then return the number actual number - * of bytes consumed. The callback will continue to be - * invoked until it indicates the end of the stream - * has been reached. A return value of -1 at any time - * will abort the receive operation - * - * Returns the number of bytes consumed or -1 upon - * error - */ -typedef int (*virStreamSinkFunc)(virStreamPtr st, - const char *data, - size_t nbytes, - void *opaque); - -int virStreamRecvAll(virStreamPtr st, - virStreamSinkFunc handler, - void *opaque); - -typedef enum { - VIR_STREAM_EVENT_READABLE = (1 << 0), - VIR_STREAM_EVENT_WRITABLE = (1 << 1), - VIR_STREAM_EVENT_ERROR = (1 << 2), - VIR_STREAM_EVENT_HANGUP = (1 << 3), -} virStreamEventType; - - -/** - * virStreamEventCallback: - * - * @stream: stream on which the event occurred - * @events: bitset of events from virEventHandleType constants - * @opaque: user data registered with handle - * - * Callback for receiving stream events. The callback will - * be invoked once for each event which is pending. - */ -typedef void (*virStreamEventCallback)(virStreamPtr stream, int events, void *opaque); - -int virStreamEventAddCallback(virStreamPtr stream, - int events, - virStreamEventCallback cb, - void *opaque, - virFreeCallback ff); - -int virStreamEventUpdateCallback(virStreamPtr stream, - int events); - -int virStreamEventRemoveCallback(virStreamPtr stream); - - -int virStreamFinish(virStreamPtr st); -int virStreamAbort(virStreamPtr st); - -int virStreamFree(virStreamPtr st); - int virDomainIsActive(virDomainPtr dom); int virDomainIsPersistent(virDomainPtr dom); @@ -5026,6 +4906,7 @@ typedef virMemoryParameter *virMemoryParameterPtr; #include <libvirt/libvirt-nodedev.h> #include <libvirt/libvirt-nwfilter.h> #include <libvirt/libvirt-secret.h> +#include <libvirt/libvirt-stream.h> #undef __VIR_LIBVIRT_H_INCLUDES__ #ifdef __cplusplus -- 2.1.0 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list