From 40b3f64b55f98e03b3173541b8d94cd924099223 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 30 Nov 2006 19:19:59 +0000 Subject: * Skeleton of the privileged worker program. * Some refactoring: put the NAR archive integer/string serialisation code in a separate file so it can be reused by the worker protocol implementation. --- src/libutil/serialise.hh | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/libutil/serialise.hh (limited to 'src/libutil/serialise.hh') diff --git a/src/libutil/serialise.hh b/src/libutil/serialise.hh new file mode 100644 index 0000000000..459a693ee8 --- /dev/null +++ b/src/libutil/serialise.hh @@ -0,0 +1,71 @@ +#ifndef __SERIALISE_H +#define __SERIALISE_H + +#include "types.hh" + + +namespace nix { + + +/* Abstract destination of binary data. */ +struct Sink +{ + virtual ~Sink() { } + virtual void operator () (const unsigned char * data, unsigned int len) = 0; +}; + + +/* Abstract source of binary data. */ +struct Source +{ + virtual ~Source() { } + + /* The callee should store exactly *len bytes in the buffer + pointed to by data. It should block if that much data is not + yet available, or throw an error if it is not going to be + available. */ + virtual void operator () (unsigned char * data, unsigned int len) = 0; +}; + + +/* A sink that writes data to a file descriptor. */ +struct FdSink : Sink +{ + int fd; + + FdSink(int fd) + { + this->fd = fd; + } + + void operator () (const unsigned char * data, unsigned int len); +}; + + +/* A source that reads data from a file descriptor. */ +struct FdSource : Source +{ + int fd; + + FdSource(int fd) + { + this->fd = fd; + } + + void operator () (unsigned char * data, unsigned int len); +}; + + +void writePadding(unsigned int len, Sink & sink); +void writeInt(unsigned int n, Sink & sink); +void writeString(const string & s, Sink & sink); + +void readPadding(unsigned int len, Source & source); +unsigned int readInt(Source & source); +string readString(Source & source); + + +} + + +#endif /* !__SERIALISE_H */ -- cgit 1.4.1