about summary refs log tree commit diff
path: root/src/libutil/serialise.hh
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-11-30T19·19+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-11-30T19·19+0000
commit40b3f64b55f98e03b3173541b8d94cd924099223 (patch)
tree78a14654425eab2729e3c8077860573766a794c0 /src/libutil/serialise.hh
parent9adc074dc3e135356c2390038bf72264c29c1e03 (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.hh71
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 */