[libvirt] [PATCH 01/10] Provide a simple object for encoding/decoding RPC messages

Daniel P. Berrange berrange at redhat.com
Fri Mar 18 18:40:32 UTC 2011


On Tue, Mar 15, 2011 at 01:34:53PM -0600, Eric Blake wrote:
> On 03/15/2011 11:51 AM, Daniel P. Berrange wrote:
> > This provides a new struct that contains a buffer for the RPC
> > message header+payload, as well as a decoded copy of the message
> > header. There is an API for applying a XDR encoding & decoding
> > of the message headers and payloads. There are also APIs for
> > maintaining a simple FIFO queue of message instances.
> > 
> > Expected usage scenarios are:
> > 
> > To send a message
> > 
> >    msg = virNetMessageNew()
> > 
> >    ...fill in msg->header fields..
> >    virNetMessageEncodeHeader(msg)
> >    ...loook at msg->header fields to determine payload filter
> >    virNetMessageEncodePayload(msg, xdrfilter, data)
> >    ...send msg->bufferLength worth of data from buffer
> > 
> > To receive a message
> > 
> >    msg = virNetMessageNew()
> >    ...read VIR_NET_MESSAGE_LEN_MAX of data into buffer
> >    virNetMessageDecodeLength(msg)
> >    ...read msg->bufferLength-msg->bufferOffset of data into buffer
> >    virNetMessageDecodeHeader(msg)
> >    ...look at msg->header fields to determine payload filter
> >    virNetMessageDecodePayload(msg, xdrfilter, data)
> >    ...run payload processor
> > 
> 
> > +++ b/src/Makefile.am
> > @@ -1202,6 +1202,7 @@ EXTRA_DIST += $(LIBVIRT_QEMU_SYMBOL_FILE)
> >  noinst_LTLIBRARIES += libvirt-net-rpc.la
> >  
> >  libvirt_net_rpc_la_SOURCES = \
> > +	rpc/virnetmessage.h rpc/virnetmessage.c \
> >  	rpc/virnetprotocol.h rpc/virnetprotocol.c
> 
> Huh? There's no src/rpc in current libvirt.git.  This looks like 2/15 in
> the v1 posting.  Did you forget to submit the original 1/15 as a
> prerequisite patch?
> http://www.redhat.com/archives/libvir-list/2010-December/msg00617.html

Yes, picked the wrong hash when sending the series.

> > +
> > +struct _virNetMessage {
> > +    char buffer[VIR_NET_MESSAGE_MAX + VIR_NET_MESSAGE_LEN_MAX];
> 
> Is it worth a comment warning that this struct should never be
> stack-allocated?

Added

> 
> > +void virNetMessageFree(virNetMessagePtr msg);
> 
> cfg.mk should list this as a free-like function.

Added, and several more in later patches

> 
> > +
> > +virNetMessagePtr virNetMessageQueueServe(virNetMessagePtr *queue);
> 
> It's worth adding attributes:
> 
> ATTRIBUTE_NONNULL(1)
> 
> > +void virNetMessageQueuePush(virNetMessagePtr *queue,
> > +                            virNetMessagePtr msg);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
> 
> > +
> > +int virNetMessageEncodeHeader(virNetMessagePtr msg);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK
> 
> > +int virNetMessageDecodeLength(virNetMessagePtr msg);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK
> 
> > +int virNetMessageDecodeHeader(virNetMessagePtr msg);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK
> 
> > +
> > +int virNetMessageEncodePayload(virNetMessagePtr msg,
> > +                               xdrproc_t filter,
> > +                               void *data);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK
> 
> > +int virNetMessageDecodePayload(virNetMessagePtr msg,
> > +                               xdrproc_t filter,
> > +                               void *data);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK
> 
> > +
> > +int virNetMessageEncodePayloadRaw(virNetMessagePtr msg,
> > +                                  const char *buf,
> > +                                  size_t len);
> ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK
> 
> > +
> > +void virNetMessageSaveError(virNetMessageErrorPtr rerr);
> ATTRIBUTE_NONNULL(1)

Added all those too.


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list