mirror of
https://github.com/NixOS/nix
synced 2025-07-01 04:18:00 +02:00
* 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.
This commit is contained in:
parent
9adc074dc3
commit
40b3f64b55
12 changed files with 255 additions and 126 deletions
71
src/libutil/serialise.hh
Normal file
71
src/libutil/serialise.hh
Normal file
|
@ -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 */
|
Loading…
Add table
Add a link
Reference in a new issue