diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-11-30 19:19:59 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-11-30 19:19:59 +0000 |
commit | 40b3f64b55f98e03b3173541b8d94cd924099223 (patch) | |
tree | 78a14654425eab2729e3c8077860573766a794c0 /src/nix-worker/main.cc | |
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/nix-worker/main.cc')
-rw-r--r-- | src/nix-worker/main.cc | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/nix-worker/main.cc b/src/nix-worker/main.cc new file mode 100644 index 000000000..4fe92a85a --- /dev/null +++ b/src/nix-worker/main.cc @@ -0,0 +1,63 @@ +#include "shared.hh" +#include "local-store.hh" +#include "util.hh" + +using namespace nix; + + +/* !!! Mostly cut&pasted from util/archive.hh */ +/* Use buffered reads. */ +static unsigned int readInt(int fd) +{ + unsigned char buf[8]; + readFull(fd, buf, sizeof(buf)); + if (buf[4] || buf[5] || buf[6] || buf[7]) + throw Error("implementation cannot deal with > 32-bit integers"); + return + buf[0] | + (buf[1] << 8) | + (buf[2] << 16) | + (buf[3] << 24); +} + + +void processConnection(int fdFrom, int fdTo) +{ + store = openStore(); + + unsigned int magic = readInt(fdFrom); + if (magic != 0x6e697864) throw Error("protocol mismatch"); + + + +} + + +void run(Strings args) +{ + bool slave = false; + bool daemon = false; + + for (Strings::iterator i = args.begin(); i != args.end(); ) { + string arg = *i++; + if (arg == "--slave") slave = true; + } + + if (slave) + processConnection(STDIN_FILENO, STDOUT_FILENO); + + else if (daemon) + throw Error("daemon mode not implemented"); + + else + throw Error("must be run in either --slave or --daemon mode"); + +} + + +void printHelp() +{ +} + + +string programId = "nix-store"; |