diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-11-30T19·19+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-11-30T19·19+0000 |
commit | 40b3f64b55f98e03b3173541b8d94cd924099223 (patch) | |
tree | 78a14654425eab2729e3c8077860573766a794c0 /src/libutil/serialise.hh | |
parent | 9adc074dc3e135356c2390038bf72264c29c1e03 (diff) |
* 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.
Diffstat (limited to 'src/libutil/serialise.hh')
-rw-r--r-- | src/libutil/serialise.hh | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/libutil/serialise.hh b/src/libutil/serialise.hh new file mode 100644 index 000000000000..459a693ee838 --- /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 */ |