On 12/01/2010 10:26 AM, Daniel P. Berrange wrote:
To facilitate creation of new clients using XDR RPC services,
pull alot of the remote driver code into a set of reusable
s/alot/a lot/
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
- virNetClientSASLContext: Handles everything todo with
SASL authentication and encryption. The callers no
longer need directly call any cyrus-sasl APIs, which
means error handling is simpler & alternative SASL
impls can be provided for Win32
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.
+++ b/src/Makefile.am
@@ -1117,7 +1117,7 @@ libvirt_qemu_la_LIBADD = libvirt.la $(CYGWIN_EXTRA_LIBADD)
EXTRA_DIST += $(LIBVIRT_QEMU_SYMBOL_FILE)
-noinst_LTLIBRARIES += libvirt-net-rpc.la libvirt-net-rpc-server.la
+noinst_LTLIBRARIES += libvirt-net-rpc.la libvirt-net-rpc-server.la
libvirt-net-rpc-client.la
Wrap at 80 columns.
libvirt_net_rpc_la_SOURCES = \
../daemon/event.c \
@@ -1153,6 +1153,18 @@ libvirt_net_server_la_LDFLAGS = \
libvirt_net_server_la_LIBADD = \
$(CYGWIN_EXTRA_LIBADD)
+libvirt_net_client_la_SOURCES = \
+ rpc/virnetclientsaslcontext.h rpc/virnetclientsaslcontext.c \
+ rpc/virnetclientprogram.h rpc/virnetclientprogram.c \
+ rpc/virnetclient.h rpc/virnetclient.c
+libvirt_net_client_la_CFLAGS = \
+ $(AM_CFLAGS)
+libvirt_net_client_la_LDFLAGS = \
+ $(AM_LDFLAGS) \
+ $(CYGWIN_EXTRA_LDFLAGS) \
+ $(MINGW_EXTRA_LDFLAGS)l
s/l$//
+++ b/src/rpc/virnetclient.c
@@ -0,0 +1,1237 @@
+
+
Copyright header? Probably affects multiple new files across multiple
of these patches.
+
+#ifdef WIN32
+# define pipe(fds) _pipe(fds,4096, _O_BINARY)
+#endif
Yuck. Gnulib should really take care of this for us. But for now, we
have to keep it.
+
+virNetClientPtr virNetClientNewCommand(const char **cmdargv,
+ const char **cmdenv)
+{
If virNetSocketNewConnectCommand is rewritten around virCommand, then
this should be updated as well.
+
+static int virNetClientCallDispatchStream(virNetClientPtr client ATTRIBUTE_UNUSED)
+{
+#if 0
+ struct private_stream_data *privst;
You weren't kidding about this being an incomplete RFC series.
+#define __VIR_NET_CLIENT_H__
+
+#if HAVE_SASL
'make syntax-check' won't like this if you have cppi installed.
Again, mostly okay; just copying existing code and renaming into new
API. Overall, I'm liking the direction this series is heading.
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org