aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2010-12-01 16:35:50 +0000
committerDaniel P. Berrange <berrange@redhat.com>2011-06-24 11:48:45 +0100
commit434de30da545aea1379324b9098061201dd1529b (patch)
treee7023ad5f655ad7eb5814a7fb63b91112d62e066 /src/rpc/virnetclientstream.h
parentIntroduce generic RPC module for advertising via MDNS (diff)
downloadlibvirt-434de30da545aea1379324b9098061201dd1529b.tar.gz
libvirt-434de30da545aea1379324b9098061201dd1529b.tar.bz2
libvirt-434de30da545aea1379324b9098061201dd1529b.zip
Introduce generic RPC client objects
To facilitate creation of new clients using XDR RPC services, pull alot of the remote driver code into a set of reusable objects. - virNetClient: Encapsulates a socket connection to a remote RPC server. Handles all the network I/O for reading/writing RPC messages. Delegates RPC encoding and decoding to the registered programs - virNetClientProgram: Handles processing and dispatch of RPC messages for a single RPC (program,version). A program can register to receive async events from a client - virNetClientStream: Handles generic I/O stream integration to RPC layer Each new client program now merely needs to define the list of RPC procedures & events it wants and their handlers. It does not need to deal with any of the network I/O functionality at all.
Diffstat (limited to 'src/rpc/virnetclientstream.h')
-rw-r--r--src/rpc/virnetclientstream.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/rpc/virnetclientstream.h b/src/rpc/virnetclientstream.h
new file mode 100644
index 000000000..6c8d53809
--- /dev/null
+++ b/src/rpc/virnetclientstream.h
@@ -0,0 +1,76 @@
+/*
+ * virnetclientstream.h: generic network RPC client stream
+ *
+ * Copyright (C) 2006-2011 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Daniel P. Berrange <berrange@redhat.com>
+ */
+
+#ifndef __VIR_NET_CLIENT_STREAM_H__
+# define __VIR_NET_CLIENT_STREAM_H__
+
+# include "virnetclientprogram.h"
+
+typedef struct _virNetClientStream virNetClientStream;
+typedef virNetClientStream *virNetClientStreamPtr;
+
+typedef void (*virNetClientStreamEventCallback)(virNetClientStreamPtr stream,
+ int events, void *opaque);
+
+virNetClientStreamPtr virNetClientStreamNew(virNetClientProgramPtr prog,
+ int proc,
+ unsigned serial);
+
+void virNetClientStreamRef(virNetClientStreamPtr st);
+
+void virNetClientStreamFree(virNetClientStreamPtr st);
+
+bool virNetClientStreamRaiseError(virNetClientStreamPtr st);
+
+int virNetClientStreamSetError(virNetClientStreamPtr st,
+ virNetMessagePtr msg);
+
+bool virNetClientStreamMatches(virNetClientStreamPtr st,
+ virNetMessagePtr msg);
+
+int virNetClientStreamQueuePacket(virNetClientStreamPtr st,
+ virNetMessagePtr msg);
+
+int virNetClientStreamSendPacket(virNetClientStreamPtr st,
+ virNetClientPtr client,
+ int status,
+ const char *data,
+ size_t nbytes);
+
+int virNetClientStreamRecvPacket(virNetClientStreamPtr st,
+ virNetClientPtr client,
+ char *data,
+ size_t nbytes,
+ bool nonblock);
+
+int virNetClientStreamEventAddCallback(virNetClientStreamPtr st,
+ int events,
+ virNetClientStreamEventCallback cb,
+ void *opaque,
+ virFreeCallback ff);
+
+int virNetClientStreamEventUpdateCallback(virNetClientStreamPtr st,
+ int events);
+int virNetClientStreamEventRemoveCallback(virNetClientStreamPtr st);
+
+
+#endif /* __VIR_NET_CLIENT_STREAM_H__ */