On 06/22/2011 09:33 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 > > - 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. > +++ b/src/Makefile.am > @@ -1187,7 +1187,7 @@ else > EXTRA_DIST += $(LOCK_DRIVER_SANLOCK_SOURCES) > endif > > -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 > > libvirt_net_rpc_la_SOURCES = \ > rpc/virnetmessage.h rpc/virnetmessage.c \ > @@ -1237,6 +1237,18 @@ libvirt_net_rpc_server_la_LDFLAGS = \ > libvirt_net_rpc_server_la_LIBADD = \ > $(CYGWIN_EXTRA_LIBADD) > > +libvirt_net_rpc_client_la_SOURCES = \ > + rpc/virnetclientprogram.h rpc/virnetclientprogram.c \ > + rpc/virnetclientstream.h rpc/virnetclientstream.c \ > + rpc/virnetclient.h rpc/virnetclient.c > +libvirt_net_rpc_client_la_CFLAGS = \ > + $(AM_CFLAGS) > +libvirt_net_rpc_client_la_LDFLAGS = \ > + $(AM_LDFLAGS) \ > + $(CYGWIN_EXTRA_LDFLAGS) \ > + $(MINGW_EXTRA_LDFLAGS)l There's that 'l' again. Copy and paste strikes hard. :) > + > +struct _virNetClientCall { > + int mode; > + > + virNetMessagePtr msg; > + int expectReply; bool? > +static virNetClientPtr virNetClientNew(virNetSocketPtr sock, > + const char *hostname) > +{ > + virNetClientPtr client; > + int wakeupFD[2] = { -1, -1 }; > + > + if (pipe(wakeupFD) < 0) { pipe2(wakeupFD, O_CLOEXEC|O_NONBLOCK) > +++ b/src/rpc/virnetclient.h > @@ -0,0 +1,86 @@ > + > +#ifndef __VIR_NET_CLIENT_H__ > +# define __VIR_NET_CLIENT_H__ > + > +# include <stdbool.h> Another <stdbool.h> > +static void > +virNetClientStreamEventTimer(int timer ATTRIBUTE_UNUSED, void *opaque) > +{ > + virNetClientStreamPtr st = opaque; > + int events = 0; > + > + /* XXX we need a mutex on 'st' to protect this callback */ A few places throughout this series, I've noticed double-spaces mid-sentence in comments. Not fatal, but might be worth a cleanup pass later on. Looks like a reasonable refactoring overall; most of the code seems to be copied from elsewhere already existing (so I'm assuming later patches clean up existing code to use these new objects). ACK with nits fixed. -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list